Bug 1333485 - Remove LogUtils.jsm from services/crypto/modules/. r=markh.

This commit is contained in:
stefanh@inbox.com 2017-02-01 20:55:09 +01:00
Родитель 19c92ab8c5
Коммит 3e60e56c26
7 изменённых файлов: 47 добавлений и 125 удалений

Просмотреть файл

@ -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"],