82 lines
2.3 KiB
JavaScript
82 lines
2.3 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
"use strict";
|
|
|
|
var gCertDB = Cc["@mozilla.org/security/x509certdb;1"].getService(
|
|
Ci.nsIX509CertDB
|
|
);
|
|
|
|
/**
|
|
* List of certs imported via readCertificate(). Certs in this list are
|
|
* automatically deleted from the cert DB when a test including this head file
|
|
* finishes.
|
|
*
|
|
* @type {nsIX509Cert[]}
|
|
*/
|
|
var gImportedCerts = [];
|
|
|
|
registerCleanupFunction(() => {
|
|
for (let cert of gImportedCerts) {
|
|
gCertDB.deleteCertificate(cert);
|
|
}
|
|
});
|
|
|
|
// This function serves the same purpose as the one defined in head_psm.js.
|
|
function pemToBase64(pem) {
|
|
return pem
|
|
.replace(/-----BEGIN CERTIFICATE-----/, "")
|
|
.replace(/-----END CERTIFICATE-----/, "")
|
|
.replace(/[\r\n]/g, "");
|
|
}
|
|
|
|
/**
|
|
* Given the filename of a certificate, returns a promise that will resolve with
|
|
* a handle to the certificate when that certificate has been read and imported
|
|
* with the given trust settings.
|
|
*
|
|
* Certs imported via this function will automatically be deleted from the cert
|
|
* DB once the calling test finishes.
|
|
*
|
|
* @param {string} filename
|
|
* The filename of the certificate (assumed to be in the same directory).
|
|
* @param {string} trustString
|
|
* A string describing how the certificate should be trusted (see
|
|
* `certutil -A --help`).
|
|
* @returns {Promise}
|
|
* A promise that will resolve with a handle to the certificate.
|
|
*/
|
|
function readCertificate(filename, trustString) {
|
|
return IOUtils.readUTF8(getTestFilePath(filename)).then(
|
|
pem => {
|
|
let certdb = Cc["@mozilla.org/security/x509certdb;1"].getService(
|
|
Ci.nsIX509CertDB
|
|
);
|
|
let base64 = pemToBase64(pem);
|
|
certdb.addCertFromBase64(base64, trustString);
|
|
let cert = certdb.constructX509FromBase64(base64);
|
|
gImportedCerts.push(cert);
|
|
return cert;
|
|
},
|
|
error => {
|
|
throw error;
|
|
}
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Asynchronously opens the certificate manager.
|
|
*
|
|
* @returns {Window} a handle on the opened certificate manager window
|
|
*/
|
|
async function openCertManager() {
|
|
let win = window.openDialog("chrome://pippki/content/certManager.xhtml");
|
|
return new Promise(resolve => {
|
|
win.addEventListener(
|
|
"load",
|
|
function () {
|
|
executeSoon(() => resolve(win));
|
|
},
|
|
{ once: true }
|
|
);
|
|
});
|
|
}
|