mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-08 02:14:43 +00:00
Bug 1333485 - Remove LogUtils.jsm from services/crypto/modules/. r=markh.
This commit is contained in:
parent
19c92ab8c5
commit
3e60e56c26
@ -1,101 +0,0 @@
|
||||
/* -*- js-indent-level: 2; indent-tabs-mode: nil -*- */
|
||||
/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
|
||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
||||
* You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
"use strict";
|
||||
|
||||
this.EXPORTED_SYMBOLS = ["Logger"];
|
||||
const PREF_DEBUG = "services.sync.log.cryptoDebug";
|
||||
|
||||
const Cu = Components.utils;
|
||||
const Ci = Components.interfaces;
|
||||
const Cc = Components.classes;
|
||||
const Cr = Components.results;
|
||||
|
||||
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
|
||||
Cu.import("resource://gre/modules/Services.jsm");
|
||||
|
||||
function IdentityLogger() {
|
||||
Services.prefs.addObserver(PREF_DEBUG, this, false);
|
||||
this._debug = Services.prefs.getBoolPref(PREF_DEBUG);
|
||||
return this;
|
||||
}
|
||||
|
||||
IdentityLogger.prototype = {
|
||||
QueryInterface: XPCOMUtils.generateQI([Ci.nsISupports, Ci.nsIObserver]),
|
||||
|
||||
observe: function observe(aSubject, aTopic, aData) {
|
||||
switch (aTopic) {
|
||||
case "nsPref:changed":
|
||||
this._debug = Services.prefs.getBoolPref(PREF_DEBUG);
|
||||
break;
|
||||
|
||||
case "quit-application-granted":
|
||||
Services.prefs.removeObserver(PREF_DEBUG, this);
|
||||
break;
|
||||
|
||||
default:
|
||||
this.log("Logger observer", "Unknown topic:", aTopic);
|
||||
break;
|
||||
}
|
||||
},
|
||||
|
||||
_generateLogMessage: function _generateLogMessage(aPrefix, args) {
|
||||
// create a string representation of a list of arbitrary things
|
||||
let strings = [];
|
||||
|
||||
// XXX bug 770418 - args look like flattened array, not list of strings
|
||||
|
||||
args.forEach(function(arg) {
|
||||
if (typeof arg === "string") {
|
||||
strings.push(arg);
|
||||
} else if (typeof arg === "undefined") {
|
||||
strings.push("undefined");
|
||||
} else if (arg === null) {
|
||||
strings.push("null");
|
||||
} else {
|
||||
try {
|
||||
strings.push(JSON.stringify(arg, null, 2));
|
||||
} catch (err) {
|
||||
strings.push("<<something>>");
|
||||
}
|
||||
}
|
||||
});
|
||||
return "Identity " + aPrefix + ": " + strings.join(" ");
|
||||
},
|
||||
|
||||
/**
|
||||
* log() - utility function to print a list of arbitrary things
|
||||
*
|
||||
* Enable with about:config pref services.sync.log.cryptoDebug
|
||||
*/
|
||||
log: function log(aPrefix, ...args) {
|
||||
if (!this._debug) {
|
||||
return;
|
||||
}
|
||||
let output = this._generateLogMessage(aPrefix, args);
|
||||
dump(output + "\n");
|
||||
|
||||
// Additionally, make the output visible in the Error Console
|
||||
Services.console.logStringMessage(output);
|
||||
},
|
||||
|
||||
/**
|
||||
* reportError() - report an error through component utils as well as
|
||||
* our log function
|
||||
*/
|
||||
reportError: function reportError(aPrefix, ...aArgs) {
|
||||
// Report the error in the browser
|
||||
let output = this._generateLogMessage(aPrefix, aArgs);
|
||||
Cu.reportError(output);
|
||||
dump("ERROR: " + output + "\n");
|
||||
for (let frame = Components.stack.caller; frame; frame = frame.caller) {
|
||||
dump(frame + "\n");
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
this.Logger = new IdentityLogger();
|
@ -14,7 +14,7 @@ const Cr = Components.results;
|
||||
|
||||
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
|
||||
Cu.import("resource://gre/modules/Services.jsm");
|
||||
Cu.import("resource://gre/modules/services-crypto/LogUtils.jsm");
|
||||
Cu.import("resource://gre/modules/Log.jsm");
|
||||
|
||||
XPCOMUtils.defineLazyServiceGetter(this,
|
||||
"IdentityCryptoService",
|
||||
@ -23,15 +23,32 @@ XPCOMUtils.defineLazyServiceGetter(this,
|
||||
|
||||
this.EXPORTED_SYMBOLS = ["jwcrypto"];
|
||||
|
||||
const PREF_LOG_LEVEL = "services.crypto.jwcrypto.log.level";
|
||||
|
||||
XPCOMUtils.defineLazyGetter(this, "log", function() {
|
||||
let log = Log.repository.getLogger("Services.Crypto.jwcrypto");
|
||||
// Default log level is "Error", but consumers can change this with the pref
|
||||
// "services.crypto.jwcrypto.log.level".
|
||||
log.level = Log.Level.Error;
|
||||
let appender = new Log.DumpAppender();
|
||||
log.addAppender(appender);
|
||||
try {
|
||||
let level =
|
||||
Services.prefs.getPrefType(PREF_LOG_LEVEL) == Ci.nsIPrefBranch.PREF_STRING
|
||||
&& Services.prefs.getCharPref(PREF_LOG_LEVEL);
|
||||
log.level = Log.Level[level] || Log.Level.Error;
|
||||
} catch (e) {
|
||||
log.error(e);
|
||||
}
|
||||
|
||||
return log;
|
||||
});
|
||||
|
||||
const ALGORITHMS = { RS256: "RS256", DS160: "DS160" };
|
||||
const DURATION_MS = 1000 * 60 * 2; // 2 minutes default assertion lifetime
|
||||
|
||||
function log(...aMessageArgs) {
|
||||
Logger.log.apply(Logger, ["jwcrypto"].concat(aMessageArgs));
|
||||
}
|
||||
|
||||
function generateKeyPair(aAlgorithmName, aCallback) {
|
||||
log("Generate key pair; alg =", aAlgorithmName);
|
||||
log.debug("Generate key pair; alg = " + aAlgorithmName);
|
||||
|
||||
IdentityCryptoService.generateKeyPair(aAlgorithmName, function(rv, aKeyPair) {
|
||||
if (!Components.isSuccessCode(rv)) {
|
||||
@ -75,10 +92,10 @@ function generateKeyPair(aAlgorithmName, aCallback) {
|
||||
function sign(aPayload, aKeypair, aCallback) {
|
||||
aKeypair._kp.sign(aPayload, function(rv, signature) {
|
||||
if (!Components.isSuccessCode(rv)) {
|
||||
log("ERROR: signer.sign failed");
|
||||
log.error("signer.sign failed");
|
||||
return aCallback("Sign failed");
|
||||
}
|
||||
log("signer.sign: success");
|
||||
log.debug("signer.sign: success");
|
||||
return aCallback(null, signature);
|
||||
});
|
||||
}
|
||||
@ -110,7 +127,7 @@ jwcryptoClass.prototype = {
|
||||
},
|
||||
|
||||
generateKeyPair(aAlgorithmName, aCallback) {
|
||||
log("generating");
|
||||
log.debug("generating");
|
||||
generateKeyPair(aAlgorithmName, aCallback);
|
||||
},
|
||||
|
||||
@ -163,7 +180,7 @@ jwcryptoClass.prototype = {
|
||||
var payloadBytes = IdentityCryptoService.base64UrlEncode(
|
||||
JSON.stringify(payload));
|
||||
|
||||
log("payload bytes", payload, payloadBytes);
|
||||
log.debug("payload", { payload, payloadBytes });
|
||||
sign(headerBytes + "." + payloadBytes, aKeyPair, function(err, signature) {
|
||||
if (err)
|
||||
return aCallback(err);
|
||||
|
@ -13,7 +13,6 @@ XPCSHELL_TESTS_MANIFESTS += ['tests/unit/xpcshell.ini']
|
||||
|
||||
EXTRA_JS_MODULES['services-crypto'] += [
|
||||
'modules/jwcrypto.jsm',
|
||||
'modules/LogUtils.jsm',
|
||||
'modules/utils.js',
|
||||
'modules/WeaveCrypto.js',
|
||||
]
|
||||
|
@ -3,7 +3,7 @@
|
||||
|
||||
"use strict";
|
||||
|
||||
Cu.import("resource://gre/modules/services-crypto/LogUtils.jsm");
|
||||
Cu.import("resource://gre/modules/Log.jsm");
|
||||
|
||||
const idService = Cc["@mozilla.org/identity/crypto-service;1"]
|
||||
.getService(Ci.nsIIdentityCryptoService);
|
||||
@ -30,15 +30,19 @@ const BASE64_URL_ENCODINGS = [
|
||||
"z4DPjM67zrsnIM6_4by2zrQnIOG8gM67z47PgM63zr4sIOG8gM67zrsnIOG8kM-H4b-Wzr3Ov8-CIOG8k869IM68zq3Os86x"],
|
||||
];
|
||||
|
||||
let log = Log.repository.getLogger("crypto.service.test");
|
||||
(function() {
|
||||
let appender = new Log.DumpAppender();
|
||||
log.level = Log.Level.Debug;
|
||||
log.addAppender(appender);
|
||||
}
|
||||
)();
|
||||
|
||||
// When the output of an operation is a
|
||||
function do_check_eq_or_slightly_less(x, y) {
|
||||
do_check_true(x >= y - (3 * 8));
|
||||
}
|
||||
|
||||
function log(...aMessageArgs) {
|
||||
Logger.log.apply(Logger, ["test"].concat(aMessageArgs));
|
||||
}
|
||||
|
||||
function test_base64_roundtrip() {
|
||||
let message = "Attack at dawn!";
|
||||
let encoded = idService.base64UrlEncode(message);
|
||||
@ -50,7 +54,7 @@ function test_base64_roundtrip() {
|
||||
|
||||
function test_dsa() {
|
||||
idService.generateKeyPair(ALG_DSA, function(rv, keyPair) {
|
||||
log("DSA generateKeyPair finished ", rv);
|
||||
log.debug("DSA generateKeyPair finished " + rv);
|
||||
do_check_true(Components.isSuccessCode(rv));
|
||||
do_check_eq(typeof keyPair.sign, "function");
|
||||
do_check_eq(keyPair.keyType, ALG_DSA);
|
||||
@ -60,9 +64,9 @@ function test_dsa() {
|
||||
do_check_eq_or_slightly_less(keyPair.hexDSAPublicValue.length, 1024 / 8 * 2);
|
||||
// XXX: test that RSA parameters throw the correct error
|
||||
|
||||
log("about to sign with DSA key");
|
||||
log.debug("about to sign with DSA key");
|
||||
keyPair.sign("foo", function(rv2, signature) {
|
||||
log("DSA sign finished ", rv2, signature);
|
||||
log.debug("DSA sign finished " + rv2 + " " + signature);
|
||||
do_check_true(Components.isSuccessCode(rv2));
|
||||
do_check_true(signature.length > 1);
|
||||
// TODO: verify the signature with the public key
|
||||
@ -73,7 +77,7 @@ function test_dsa() {
|
||||
|
||||
function test_rsa() {
|
||||
idService.generateKeyPair(ALG_RSA, function(rv, keyPair) {
|
||||
log("RSA generateKeyPair finished ", rv);
|
||||
log.debug("RSA generateKeyPair finished " + rv);
|
||||
do_check_true(Components.isSuccessCode(rv));
|
||||
do_check_eq(typeof keyPair.sign, "function");
|
||||
do_check_eq(keyPair.keyType, ALG_RSA);
|
||||
@ -81,9 +85,9 @@ function test_rsa() {
|
||||
2048 / 8);
|
||||
do_check_true(keyPair.hexRSAPublicKeyExponent.length > 1);
|
||||
|
||||
log("about to sign with RSA key");
|
||||
log.debug("about to sign with RSA key");
|
||||
keyPair.sign("foo", function(rv2, signature) {
|
||||
log("RSA sign finished ", rv2, signature);
|
||||
log.debug("RSA sign finished " + rv2 + " " + signature);
|
||||
do_check_true(Components.isSuccessCode(rv2));
|
||||
do_check_true(signature.length > 1);
|
||||
run_next_test();
|
||||
|
@ -18,6 +18,9 @@ const SECOND_MS = 1000;
|
||||
const MINUTE_MS = SECOND_MS * 60;
|
||||
const HOUR_MS = MINUTE_MS * 60;
|
||||
|
||||
// Enable logging from jwcrypto.jsm.
|
||||
Services.prefs.setCharPref("services.crypto.jwcrypto.log.level", "Debug");
|
||||
|
||||
function test_sanity() {
|
||||
do_test_pending();
|
||||
|
||||
|
@ -26,9 +26,10 @@ Cu.importGlobalProperties(["atob"]);
|
||||
var log = Log.repository.getLogger("Services.FxAccounts.test");
|
||||
log.level = Log.Level.Debug;
|
||||
|
||||
// See verbose logging from FxAccounts.jsm
|
||||
// See verbose logging from FxAccounts.jsm and jwcrypto.jsm.
|
||||
Services.prefs.setCharPref("identity.fxaccounts.loglevel", "Trace");
|
||||
Log.repository.getLogger("FirefoxAccounts").level = Log.Level.Trace;
|
||||
Services.prefs.setCharPref("services.crypto.jwcrypto.log.level", "Debug");
|
||||
|
||||
// The oauth server is mocked, but set these prefs to pass param checks
|
||||
Services.prefs.setCharPref("identity.fxaccounts.remote.oauth.uri", "https://example.com/v1");
|
||||
|
@ -126,7 +126,6 @@
|
||||
"LoginManagerContent.jsm": ["LoginManagerContent", "LoginFormFactory", "UserAutoCompleteResult"],
|
||||
"LoginRecipes.jsm": ["LoginRecipesContent", "LoginRecipesParent"],
|
||||
"logmanager.js": ["LogManager"],
|
||||
"LogUtils.jsm": ["Logger"],
|
||||
"lz4.js": ["Lz4"],
|
||||
"lz4_internal.js": ["Primitives"],
|
||||
"main.js": ["Weave"],
|
||||
|
Loading…
Reference in New Issue
Block a user