summaryrefslogtreecommitdiffstats
path: root/services/sync/modules/util.js
diff options
context:
space:
mode:
Diffstat (limited to 'services/sync/modules/util.js')
-rw-r--r--services/sync/modules/util.js148
1 files changed, 37 insertions, 111 deletions
diff --git a/services/sync/modules/util.js b/services/sync/modules/util.js
index e9dbcb37d..67cc3f063 100644
--- a/services/sync/modules/util.js
+++ b/services/sync/modules/util.js
@@ -4,7 +4,7 @@
this.EXPORTED_SYMBOLS = ["XPCOMUtils", "Services", "Utils", "Async", "Svc", "Str"];
-var {classes: Cc, interfaces: Ci, results: Cr, utils: Cu} = Components;
+const {classes: Cc, interfaces: Ci, results: Cr, utils: Cu} = Components;
Cu.import("resource://gre/modules/Log.jsm");
Cu.import("resource://services-common/observers.js");
@@ -35,6 +35,8 @@ this.Utils = {
// In the ideal world, references to these would be removed.
nextTick: CommonUtils.nextTick,
namedTimer: CommonUtils.namedTimer,
+ exceptionStr: CommonUtils.exceptionStr,
+ stackTrace: CommonUtils.stackTrace,
makeURI: CommonUtils.makeURI,
encodeUTF8: CommonUtils.encodeUTF8,
decodeUTF8: CommonUtils.decodeUTF8,
@@ -52,7 +54,6 @@ this.Utils = {
digestBytes: CryptoUtils.digestBytes,
sha1: CryptoUtils.sha1,
sha1Base32: CryptoUtils.sha1Base32,
- sha256: CryptoUtils.sha256,
makeHMACKey: CryptoUtils.makeHMACKey,
makeHMACHasher: CryptoUtils.makeHMACHasher,
hkdfExpand: CryptoUtils.hkdfExpand,
@@ -61,25 +62,6 @@ this.Utils = {
getHTTPMACSHA1Header: CryptoUtils.getHTTPMACSHA1Header,
/**
- * The string to use as the base User-Agent in Sync requests.
- * This string will look something like
- *
- * Firefox/49.0a1 (Windows NT 6.1; WOW64; rv:46.0) FxSync/1.51.0.20160516142357.desktop
- */
- _userAgent: null,
- get userAgent() {
- if (!this._userAgent) {
- let hph = Cc["@mozilla.org/network/protocol;1?name=http"].getService(Ci.nsIHttpProtocolHandler);
- this._userAgent =
- Services.appinfo.name + "/" + Services.appinfo.version + // Product.
- " (" + hph.oscpu + ")" + // (oscpu)
- " FxSync/" + WEAVE_VERSION + "." + // Sync.
- Services.appinfo.appBuildID + "."; // Build.
- }
- return this._userAgent + Svc.Prefs.get("client.type", "desktop");
- },
-
- /**
* Wrap a function to catch all exceptions and log them
*
* @usage MyObj._catch = Utils.catch;
@@ -95,7 +77,7 @@ this.Utils = {
return func.call(thisArg);
}
catch(ex) {
- thisArg._log.debug("Exception calling " + (func.name || "anonymous function"), ex);
+ thisArg._log.debug("Exception: " + Utils.exceptionStr(ex));
if (exceptionCallback) {
return exceptionCallback.call(thisArg, ex);
}
@@ -271,14 +253,14 @@ this.Utils = {
*/
base32ToFriendly: function base32ToFriendly(input) {
return input.toLowerCase()
- .replace(/l/g, '8')
- .replace(/o/g, '9');
+ .replace("l", '8', "g")
+ .replace("o", '9', "g");
},
base32FromFriendly: function base32FromFriendly(input) {
return input.toUpperCase()
- .replace(/8/g, 'L')
- .replace(/9/g, 'O');
+ .replace("8", 'L', "g")
+ .replace("9", 'O', "g");
},
/**
@@ -356,14 +338,12 @@ this.Utils = {
try {
json = yield CommonUtils.readJSON(path);
+ } catch (e if e instanceof OS.File.Error && e.becauseNoSuchFile) {
+ // Ignore non-existent files.
} catch (e) {
- if (e instanceof OS.File.Error && e.becauseNoSuchFile) {
- // Ignore non-existent files, but explicitly return null.
- json = null;
- } else {
- if (that._log) {
- that._log.debug("Failed to load json", e);
- }
+ if (that._log) {
+ that._log.debug("Failed to load json: " +
+ CommonUtils.exceptionStr(e));
}
}
@@ -411,52 +391,6 @@ this.Utils = {
}
}),
- /**
- * Move a json file in the profile directory. Will fail if a file exists at the
- * destination.
- *
- * @returns a promise that resolves to undefined on success, or rejects on failure
- *
- * @param aFrom
- * Current path to the JSON file saved on disk, relative to profileDir/weave
- * .json will be appended to the file name.
- * @param aTo
- * New path to the JSON file saved on disk, relative to profileDir/weave
- * .json will be appended to the file name.
- * @param that
- * Object to use for logging
- */
- jsonMove(aFrom, aTo, that) {
- let pathFrom = OS.Path.join(OS.Constants.Path.profileDir, "weave",
- ...(aFrom + ".json").split("/"));
- let pathTo = OS.Path.join(OS.Constants.Path.profileDir, "weave",
- ...(aTo + ".json").split("/"));
- if (that._log) {
- that._log.trace("Moving " + pathFrom + " to " + pathTo);
- }
- return OS.File.move(pathFrom, pathTo, { noOverwrite: true });
- },
-
- /**
- * Removes a json file in the profile directory.
- *
- * @returns a promise that resolves to undefined on success, or rejects on failure
- *
- * @param filePath
- * Current path to the JSON file saved on disk, relative to profileDir/weave
- * .json will be appended to the file name.
- * @param that
- * Object to use for logging
- */
- jsonRemove(filePath, that) {
- let path = OS.Path.join(OS.Constants.Path.profileDir, "weave",
- ...(filePath + ".json").split("/"));
- if (that._log) {
- that._log.trace("Deleting " + path);
- }
- return OS.File.remove(path, { ignoreAbsent: true });
- },
-
getErrorString: function Utils_getErrorString(error, args) {
try {
return Str.errors.get(error, args || null);
@@ -543,7 +477,7 @@ this.Utils = {
// 20-char sync key.
if (pp.length == 23 &&
- [5, 11, 17].every(i => pp[i] == '-')) {
+ [5, 11, 17].every(function(i) pp[i] == '-')) {
return pp.slice(0, 5) + pp.slice(6, 11)
+ pp.slice(12, 17) + pp.slice(18, 23);
@@ -551,7 +485,7 @@ this.Utils = {
// "Modern" 26-char key.
if (pp.length == 31 &&
- [1, 7, 13, 19, 25].every(i => pp[i] == '-')) {
+ [1, 7, 13, 19, 25].every(function(i) pp[i] == '-')) {
return pp.slice(0, 1) + pp.slice(2, 7)
+ pp.slice(8, 13) + pp.slice(14, 19)
@@ -681,12 +615,30 @@ this.Utils = {
* Get the FxA identity hosts.
*/
getSyncCredentialsHostsFxA: function() {
+ // This is somewhat expensive and the result static, so we cache the result.
+ if (this._syncCredentialsHostsFxA) {
+ return this._syncCredentialsHostsFxA;
+ }
let result = new Set();
// the FxA host
result.add(FxAccountsCommon.FXA_PWDMGR_HOST);
- // We used to include the FxA hosts (hence the Set() result) but we now
- // don't give them special treatment (hence the Set() with exactly 1 item)
- return result;
+ //
+ // The FxA hosts - these almost certainly all have the same hostname, but
+ // better safe than sorry...
+ for (let prefName of ["identity.fxaccounts.remote.force_auth.uri",
+ "identity.fxaccounts.remote.signup.uri",
+ "identity.fxaccounts.remote.signin.uri",
+ "identity.fxaccounts.settings.uri"]) {
+ let prefVal;
+ try {
+ prefVal = Services.prefs.getCharPref(prefName);
+ } catch (_) {
+ continue;
+ }
+ let uri = Services.io.newURI(prefVal, null, null);
+ result.add(uri.prePath);
+ }
+ return this._syncCredentialsHostsFxA = result;
},
getDefaultDeviceName() {
@@ -720,32 +672,6 @@ this.Utils = {
Cc["@mozilla.org/network/protocol;1?name=http"].getService(Ci.nsIHttpProtocolHandler).oscpu;
return Str.sync.get("client.name2", [user, appName, system]);
- },
-
- getDeviceName() {
- const deviceName = Svc.Prefs.get("client.name", "");
-
- if (deviceName === "") {
- return this.getDefaultDeviceName();
- }
-
- return deviceName;
- },
-
- getDeviceType() {
- return Svc.Prefs.get("client.type", DEVICE_TYPE_DESKTOP);
- },
-
- formatTimestamp(date) {
- // Format timestamp as: "%Y-%m-%d %H:%M:%S"
- let year = String(date.getFullYear());
- let month = String(date.getMonth() + 1).padStart(2, "0");
- let day = String(date.getDate()).padStart(2, "0");
- let hours = String(date.getHours()).padStart(2, "0");
- let minutes = String(date.getMinutes()).padStart(2, "0");
- let seconds = String(date.getSeconds()).padStart(2, "0");
-
- return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
}
};
@@ -764,7 +690,7 @@ Svc.Prefs = new Preferences(PREFS_BRANCH);
Svc.DefaultPrefs = new Preferences({branch: PREFS_BRANCH, defaultBranch: true});
Svc.Obs = Observers;
-var _sessionCID = Services.appinfo.ID == SEAMONKEY_ID ?
+let _sessionCID = Services.appinfo.ID == SEAMONKEY_ID ?
"@mozilla.org/suite/sessionstore;1" :
"@mozilla.org/browser/sessionstore;1";