This commit is contained in:
Rehan Dalal 2017-10-11 21:12:31 -04:00
Родитель 76d9ac9565
Коммит 8cf73b6908
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 410D198EEF339E0B
5 изменённых файлов: 65 добавлений и 16 удалений

2
.gitignore поставляемый Normal file
Просмотреть файл

@ -0,0 +1,2 @@
dist/
node_modules/

30
package.json Normal file
Просмотреть файл

@ -0,0 +1,30 @@
{
"name": "pioneer-studies-addon-utils",
"description": "A utility library for Pioneer studies",
"version": "1.0.0",
"maintainers": [
{
"name": "Rehan Dalal",
"email": "rdalal@mozilla.com"
}
],
"repositories": [
{
"type": "git",
"url": "https://github.com/mozilla/pioneer-studies-addon-utils.git"
}
],
"licenses": [
{
"name": "MPL 2.0",
"url": "https://github.com/mozilla/pioneer-studies-addon-utils/blob/master/LICENSE"
}
],
"scripts": {
"build": "webpack"
},
"devDependencies": {
"jose-jwe-jws": "0.1.5",
"webpack": "3.7.1"
}
}

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

@ -1,23 +1,19 @@
"use strict"; 'use strict';
const { utils: Cu } = Components; const { utils: Cu } = Components;
Cu.import("resource://gre/modules/XPCOMUtils.jsm"); Cu.import('resource://gre/modules/XPCOMUtils.jsm');
const { TelemetryController } = Cu.import("resource://gre/modules/TelemetryController.jsm", null); const { TelemetryController } = Cu.import('resource://gre/modules/TelemetryController.jsm', null);
// TODO: fix import path Components.utils.importGlobalProperties(['crypto']); // Crypto is not available by default
XPCOMUtils.defineLazyModuleGetter(this, "Jose", "resource://pioneer-study-nothing/Jose.jsm"); const { Jose, JoseJWE } = require('jose-jwe-jws/dist/jose-commonjs.js');
XPCOMUtils.defineLazyModuleGetter(this, "JoseJWE", "resource://pioneer-study-nothing/Jose.jsm");
// The encryption key ID from the server // The encryption key ID from the server
const ENCRYPTION_KEY_ID = "pioneer-20170905"; const ENCRYPTION_KEY_ID = 'pioneer-20170905';
// The public key used for encryption // The public key used for encryption
const PK = { const PUBLIC_KEY = require('./public_key.json');
"e": "AQAB",
"kty": "RSA",
"n": "3nI-DQ7NoUZCvT348Vi4JfGC1h6R3Qf_yXR0dKM5DmwsuQMxguce6sZ28GWQHJjgbdcs8nTuNQihyVtr9vLsoKUVSmPs_a3QEGXEhTpuTtm7cCb_7HyAlwGtysn2AsdElG8HsDFWlZmiDaHTrTmdLnuk-Z3GRg4nnA4xs4vvUuh0fCVIKoSMFyt3Tkc6IBWJ9X3XrDEbSPrghXV7Cu8LMK3Y4avy6rjEGjWXL-WqIPhiYJcBiFnCcqUCMPvdW7Fs9B36asc_2EQAM5d7BAiBwMjoosSyU6b4JGpI530c3xhqLbX00q1ePCG732cIwp0-bGWV_q0FpQX2M9cNv2Ax4Q"
};
class PioneerUtils { class PioneerUtils {
constructor(config) { constructor(config) {
@ -27,7 +23,7 @@ class PioneerUtils {
setupEncrypter() { setupEncrypter() {
if (this.encrypter === null) { if (this.encrypter === null) {
const rsa_key = Jose.Utils.importRsaPublicKey(PK, "RSA-OAEP"); const rsa_key = Jose.Utils.importRsaPublicKey(PUBLIC_KEY, 'RSA-OAEP');
const cryptographer = new Jose.WebCryptographer(); const cryptographer = new Jose.WebCryptographer();
this.encrypter = new JoseJWE.Encrypter(cryptographer, rsa_key); this.encrypter = new JoseJWE.Encrypter(cryptographer, rsa_key);
} }
@ -38,7 +34,7 @@ class PioneerUtils {
return await this.encrypter.encrypt(data); return await this.encrypter.encrypt(data);
} }
async sendEncryptedPing(data) { async submitEncryptedPing(data) {
const payload = { const payload = {
encryptedData: await this.encryptData(JSON.stringify(data)), encryptedData: await this.encryptData(JSON.stringify(data)),
encryptionKeyId: ENCRYPTION_KEY_ID, encryptionKeyId: ENCRYPTION_KEY_ID,
@ -47,9 +43,12 @@ class PioneerUtils {
studyVersion: this.config.studyVersion, studyVersion: this.config.studyVersion,
}; };
const telOptions = {addClientId: true, addEnvironment: true}; const telOptions = {
addClientId: true,
addEnvironment: true
};
return TelemetryController.submitExternalPing("pioneer-study", payload, telOptions); return TelemetryController.submitExternalPing('pioneer-study', payload, telOptions);
} }
} }

5
src/public_key.json Normal file
Просмотреть файл

@ -0,0 +1,5 @@
{
"e": "AQAB",
"kty": "RSA",
"n": "3nI-DQ7NoUZCvT348Vi4JfGC1h6R3Qf_yXR0dKM5DmwsuQMxguce6sZ28GWQHJjgbdcs8nTuNQihyVtr9vLsoKUVSmPs_a3QEGXEhTpuTtm7cCb_7HyAlwGtysn2AsdElG8HsDFWlZmiDaHTrTmdLnuk-Z3GRg4nnA4xs4vvUuh0fCVIKoSMFyt3Tkc6IBWJ9X3XrDEbSPrghXV7Cu8LMK3Y4avy6rjEGjWXL-WqIPhiYJcBiFnCcqUCMPvdW7Fs9B36asc_2EQAM5d7BAiBwMjoosSyU6b4JGpI530c3xhqLbX00q1ePCG732cIwp0-bGWV_q0FpQX2M9cNv2Ax4Q"
}

13
webpack.config.js Normal file
Просмотреть файл

@ -0,0 +1,13 @@
/* eslint-env node */
var path = require("path");
module.exports = {
context: __dirname,
entry: {
PioneerUtils: "./src/PioneerUtils.jsm",
},
output: {
path: path.resolve(__dirname, "dist/"),
filename: "[name].jsm",
},
};