js: add and apply eslint rules
-- * mainly spacing, see .eslintrc.json for details
This commit is contained in:
parent
1954d27be8
commit
dd32daad0b
@ -27,6 +27,23 @@
|
||||
"no-var": [
|
||||
"warn"
|
||||
],
|
||||
"max-len": 1
|
||||
"max-len": 1,
|
||||
"default-case": 2,
|
||||
"no-invalid-this": 2,
|
||||
"no-lone-blocks": 1,
|
||||
"no-self-compare": 2,
|
||||
"radix": 2,
|
||||
"no-use-before-define": ["error", {
|
||||
"functions": false,
|
||||
"classes": false,
|
||||
"variables": true
|
||||
}],
|
||||
"no-useless-constructor": 1,
|
||||
"space-before-function-paren": ["error", "always"],
|
||||
"keyword-spacing": 2,
|
||||
"spaced-comment": 1,
|
||||
"space-unary-ops": 2,
|
||||
"object-curly-spacing": ["error", "always"],
|
||||
"array-bracket-spacing": ["error", "never"]
|
||||
}
|
||||
}
|
@ -31,16 +31,16 @@ describe('Key importing', function () {
|
||||
const changedKey = ImportablePublicKey.keyChangedUserId;
|
||||
|
||||
let context = null;
|
||||
before(function(done){
|
||||
before(function (done){
|
||||
const prm = Gpgmejs.init();
|
||||
prm.then(function(gpgmejs){
|
||||
prm.then(function (gpgmejs){
|
||||
context = gpgmejs;
|
||||
context.Keyring.getKeys(fpr).then(
|
||||
function(result){
|
||||
function (result){
|
||||
if (result.length === 1) {
|
||||
result[0].delete().then(function(){
|
||||
result[0].delete().then(function (){
|
||||
done();
|
||||
},function(){
|
||||
},function (){
|
||||
done();
|
||||
});
|
||||
} else {
|
||||
@ -50,14 +50,14 @@ describe('Key importing', function () {
|
||||
});
|
||||
});
|
||||
|
||||
afterEach(function(done){
|
||||
afterEach(function (done){
|
||||
// delete the test key if still present
|
||||
context.Keyring.getKeys(fpr).then(
|
||||
function(result){
|
||||
function (result){
|
||||
if (result.length === 1) {
|
||||
result[0].delete().then(function(){
|
||||
result[0].delete().then(function (){
|
||||
done();
|
||||
},function(){
|
||||
},function (){
|
||||
done();
|
||||
});
|
||||
} else {
|
||||
@ -67,10 +67,10 @@ describe('Key importing', function () {
|
||||
});
|
||||
|
||||
it('Importing Key', function (done) {
|
||||
context.Keyring.getKeys(fpr).then(function(result){
|
||||
context.Keyring.getKeys(fpr).then(function (result){
|
||||
expect(result).to.be.an('array');
|
||||
expect(result.length).to.equal(0);
|
||||
context.Keyring.importKey(pubKey).then(function(result){
|
||||
context.Keyring.importKey(pubKey).then(function (result){
|
||||
expect(result.Keys).to.be.an('array');
|
||||
expect(result.Keys[0]).to.not.be.undefined;
|
||||
expect(result.Keys[0].key).to.be.an('object');
|
||||
@ -83,12 +83,12 @@ describe('Key importing', function () {
|
||||
});
|
||||
});
|
||||
|
||||
it('Updating Key', function(done){
|
||||
it('Updating Key', function (done){
|
||||
context.Keyring.importKey(pubKey)
|
||||
.then(function(result){
|
||||
.then(function (result){
|
||||
expect(result.Keys[0].key).to.not.be.undefined;
|
||||
expect(result.Keys[0].status).to.equal('newkey');
|
||||
context.Keyring.importKey(changedKey).then(function(res){
|
||||
context.Keyring.importKey(changedKey).then(function (res){
|
||||
expect(res.Keys[0].key).to.be.an('object');
|
||||
expect(res.Keys[0].key.fingerprint).to.equal(fpr);
|
||||
expect(res.Keys[0].status).to.equal('change');
|
||||
@ -101,24 +101,24 @@ describe('Key importing', function () {
|
||||
});
|
||||
});
|
||||
|
||||
it('Deleting Key', function(done) {
|
||||
context.Keyring.importKey(pubKey).then(function(result){
|
||||
it('Deleting Key', function (done) {
|
||||
context.Keyring.importKey(pubKey).then(function (result){
|
||||
expect(result.Keys[0].key).to.be.an('object');
|
||||
expect(result.Keys[0].key.fingerprint).to.equal(fpr);
|
||||
result.Keys[0].key.delete().then(function(result){
|
||||
result.Keys[0].key.delete().then(function (result){
|
||||
expect(result).to.be.true;
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
it('Import result feedback', function(done){
|
||||
context.Keyring.importKey(pubKey, true).then(function(result){
|
||||
it('Import result feedback', function (done){
|
||||
context.Keyring.importKey(pubKey, true).then(function (result){
|
||||
expect(result).to.be.an('object');
|
||||
expect(result.Keys[0]).to.be.an('object');
|
||||
expect(result.Keys[0].key.fingerprint).to.equal(fpr);
|
||||
expect(result.Keys[0].status).to.equal('newkey');
|
||||
result.Keys[0].key.getArmor().then(function(armor){
|
||||
result.Keys[0].key.getArmor().then(function (armor){
|
||||
expect(armor).to.be.a('string');
|
||||
done();
|
||||
});
|
||||
@ -126,8 +126,8 @@ describe('Key importing', function () {
|
||||
});
|
||||
|
||||
it('exporting armored Key with getKeysArmored', function (done) {
|
||||
context.Keyring.importKey(pubKey).then(function(){
|
||||
context.Keyring.getKeysArmored(fpr).then(function(result){
|
||||
context.Keyring.importKey(pubKey).then(function (){
|
||||
context.Keyring.getKeysArmored(fpr).then(function (result){
|
||||
expect(result).to.be.an('object');
|
||||
expect(result.armored).to.be.a('string');
|
||||
expect(result.secret_fprs).to.be.undefined;
|
||||
@ -138,7 +138,7 @@ describe('Key importing', function () {
|
||||
|
||||
it('Exporting Key (including secret fingerprints)', function (done) {
|
||||
const key_secret = inputvalues.encrypt.good.fingerprint;
|
||||
context.Keyring.getKeysArmored(key_secret, true).then(function(result){
|
||||
context.Keyring.getKeysArmored(key_secret, true).then(function (result){
|
||||
expect(result).to.be.an('object');
|
||||
expect(result.armored).to.be.a('string');
|
||||
expect(result.secret_fprs).to.be.an('array');
|
||||
|
@ -26,17 +26,17 @@
|
||||
|
||||
describe('Key information', function () {
|
||||
let context = null;
|
||||
before(function(done){
|
||||
before(function (done){
|
||||
const prm = Gpgmejs.init();
|
||||
prm.then(function(gpgmejs){
|
||||
prm.then(function (gpgmejs){
|
||||
context = gpgmejs;
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
it('A fingerprint is consistently returned upper case hex', function(done){
|
||||
it('A fingerprint is consistently returned upper case hex', function (done){
|
||||
const mixedCase = inputvalues.encrypt.good.fingerprint_mixedcase;
|
||||
context.Keyring.getKeys(mixedCase).then(function(result){
|
||||
context.Keyring.getKeys(mixedCase).then(function (result){
|
||||
expect(result).to.be.an('array');
|
||||
expect(result.length).to.equal(1);
|
||||
expect(result[0].fingerprint).to.equal(mixedCase.toUpperCase());
|
||||
@ -44,9 +44,9 @@ describe('Key information', function () {
|
||||
});
|
||||
});
|
||||
|
||||
it('A userId keeps their encoding', function(done){
|
||||
it('A userId keeps their encoding', function (done){
|
||||
context.Keyring.importKey(inputvalues.publicKeyNonAscii.key, true)
|
||||
.then(function(result){
|
||||
.then(function (result){
|
||||
expect(result.Keys[0]).to.be.an('object');
|
||||
const user = result.Keys[0].key.get('userids')[0];
|
||||
expect(user.get('name')).to.equal(
|
||||
|
@ -28,9 +28,9 @@ describe('Decryption', function () {
|
||||
let context = null;
|
||||
const good_fpr = inputvalues.encrypt.good.fingerprint;
|
||||
|
||||
before(function(done){
|
||||
before(function (done){
|
||||
const prm = Gpgmejs.init();
|
||||
prm.then(function(gpgmejs){
|
||||
prm.then(function (gpgmejs){
|
||||
context = gpgmejs;
|
||||
done();
|
||||
});
|
||||
@ -39,8 +39,8 @@ describe('Decryption', function () {
|
||||
it('Decryption of random string fails', function (done) {
|
||||
let data = bigString(20 * 1024);
|
||||
context.decrypt(data).then(
|
||||
function(){},
|
||||
function(error){
|
||||
function (){},
|
||||
function (error){
|
||||
expect(error).to.be.an('error');
|
||||
expect(error.code).to.equal('GNUPG_ERROR');
|
||||
done();
|
||||
@ -49,10 +49,10 @@ describe('Decryption', function () {
|
||||
|
||||
it('Decryption of slightly corrupted message fails', function (done) {
|
||||
const data = bigString(10000);
|
||||
context.encrypt(data, good_fpr).then(function(enc){
|
||||
context.encrypt(data, good_fpr).then(function (enc){
|
||||
context.decrypt(sabotageMsg(enc.data)).then(
|
||||
function(){},
|
||||
function(error){
|
||||
function (){},
|
||||
function (error){
|
||||
expect(error).to.be.an('error');
|
||||
expect(error.code).to.equal('GNUPG_ERROR');
|
||||
done();
|
||||
|
@ -24,13 +24,13 @@
|
||||
/* global describe, it, expect, before, Gpgmejs */
|
||||
/* global inputvalues, encryptedData, bigString, bigBoringString */
|
||||
|
||||
describe('Encryption and Decryption', function () {
|
||||
describe('Encryption and Decryption', function (){
|
||||
let context = null;
|
||||
let good_fpr = inputvalues.encrypt.good.fingerprint;
|
||||
|
||||
before(function(done){
|
||||
before(function (done){
|
||||
const prm = Gpgmejs.init();
|
||||
prm.then(function(gpgmejs){
|
||||
prm.then(function (gpgmejs){
|
||||
context = gpgmejs;
|
||||
done();
|
||||
});
|
||||
|
@ -27,9 +27,9 @@
|
||||
describe('Encryption', function () {
|
||||
let context = null;
|
||||
const good_fpr = inputvalues.encrypt.good.fingerprint;
|
||||
before(function(done){
|
||||
before(function (done){
|
||||
const prm = Gpgmejs.init();
|
||||
prm.then(function(gpgmejs){
|
||||
prm.then(function (gpgmejs){
|
||||
context = gpgmejs;
|
||||
done();
|
||||
});
|
||||
@ -64,7 +64,7 @@ describe('Encryption', function () {
|
||||
const data = inputvalues.encrypt.good.data;
|
||||
context.encrypt(data,null).then(function (answer) {
|
||||
expect(answer).to.be.undefined;
|
||||
}, function(error){
|
||||
}, function (error){
|
||||
expect(error).to.be.an('Error');
|
||||
expect(error.code).to.equal('MSG_INCOMPLETE');
|
||||
done();
|
||||
@ -86,7 +86,7 @@ describe('Encryption', function () {
|
||||
const bad_fpr = inputvalues.encrypt.bad.fingerprint;
|
||||
context.encrypt(data, bad_fpr).then(function (answer) {
|
||||
expect(answer).to.be.undefined;
|
||||
}, function(error){
|
||||
}, function (error){
|
||||
expect(error).to.be.an('Error');
|
||||
expect(error.code).to.not.be.undefined;
|
||||
expect(error.code).to.equal('GNUPG_ERROR');
|
||||
@ -98,7 +98,7 @@ describe('Encryption', function () {
|
||||
const data = fixedLengthString(65);
|
||||
context.encrypt(data, good_fpr).then(function (answer) {
|
||||
expect(answer).to.be.undefined;
|
||||
}, function(error){
|
||||
}, function (error){
|
||||
expect(error).to.be.an.instanceof(Error);
|
||||
// TODO: there is a 64 MB hard limit at least in chrome at:
|
||||
// chromium//extensions/renderer/messaging_util.cc:
|
||||
|
@ -126,7 +126,7 @@ const inputvalues = {// eslint-disable-line no-unused-vars
|
||||
};
|
||||
|
||||
// (Pseudo-)Random String covering all of utf8.
|
||||
function bigString(length){// eslint-disable-line no-unused-vars
|
||||
function bigString (length){// eslint-disable-line no-unused-vars
|
||||
let arr = [];
|
||||
for (let i= 0; i < length; i++){
|
||||
arr.push(String.fromCharCode(
|
||||
@ -136,7 +136,7 @@ function bigString(length){// eslint-disable-line no-unused-vars
|
||||
return arr.join('');
|
||||
}
|
||||
|
||||
function fixedLengthString(megabytes){// eslint-disable-line no-unused-vars
|
||||
function fixedLengthString (megabytes){// eslint-disable-line no-unused-vars
|
||||
let maxlength = 1024 * 1024 * megabytes / 2;
|
||||
let uint = new Uint8Array(maxlength);
|
||||
for (let i = 0; i < maxlength; i++){
|
||||
@ -148,7 +148,7 @@ function fixedLengthString(megabytes){// eslint-disable-line no-unused-vars
|
||||
}
|
||||
|
||||
// (Pseudo-)Random Uint8Array, given size in Megabytes
|
||||
function bigUint8(megabytes){// eslint-disable-line no-unused-vars
|
||||
function bigUint8 (megabytes){// eslint-disable-line no-unused-vars
|
||||
let maxlength = 1024 * 1024 * megabytes;
|
||||
let uint = new Uint8Array(maxlength);
|
||||
for (let i= 0; i < maxlength; i++){
|
||||
@ -159,7 +159,7 @@ function bigUint8(megabytes){// eslint-disable-line no-unused-vars
|
||||
|
||||
// (Pseudo-)Random string with very limited charset
|
||||
// (ascii only, no control chars)
|
||||
function bigBoringString(megabytes){// eslint-disable-line no-unused-vars
|
||||
function bigBoringString (megabytes){// eslint-disable-line no-unused-vars
|
||||
let maxlength = 1024 * 1024 * megabytes;
|
||||
let string = [];
|
||||
let chars =
|
||||
@ -173,7 +173,7 @@ function bigBoringString(megabytes){// eslint-disable-line no-unused-vars
|
||||
// Some String with simple chars, with different characteristics, but still
|
||||
// expected to occur in an averag message
|
||||
// eslint-disable-next-line no-unused-vars
|
||||
function slightlyLessBoringString(megabytes, set){
|
||||
function slightlyLessBoringString (megabytes, set){
|
||||
let maxlength = 1024 * 1024 * megabytes;
|
||||
let string = [];
|
||||
let chars = '';
|
||||
@ -291,13 +291,13 @@ const ImportablePublicKey = {// eslint-disable-line no-unused-vars
|
||||
* preserve) header/footer
|
||||
*/
|
||||
// eslint-disable-next-line no-unused-vars
|
||||
function sabotageMsg(msg, rate = 0.01, p= [35,35]){
|
||||
function sabotageMsg (msg, rate = 0.01, p= [35,35]){
|
||||
const iterations = Math.floor(Math.random() * msg.length * rate) + 1;
|
||||
const base64_set =
|
||||
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/';
|
||||
for (let i=0; i < iterations; i++){
|
||||
let str0, str1, str2;
|
||||
const chosePosition = function(){
|
||||
const chosePosition = function (){
|
||||
let position =
|
||||
Math.floor( Math.random() * (msg.length - p[0] + p[1]))
|
||||
+ p[0];
|
||||
@ -310,7 +310,7 @@ function sabotageMsg(msg, rate = 0.01, p= [35,35]){
|
||||
}
|
||||
};
|
||||
chosePosition();
|
||||
let new1 = function(){
|
||||
let new1 = function (){
|
||||
let n = base64_set[Math.floor(Math.random() * 64)];
|
||||
return (n === str1) ? new1() : n;
|
||||
};
|
||||
|
@ -26,9 +26,9 @@
|
||||
describe('Long running Encryption/Decryption', function () {
|
||||
let context = null;
|
||||
const good_fpr = inputvalues.encrypt.good.fingerprint;
|
||||
before(function(done){
|
||||
before(function (done){
|
||||
const prm = Gpgmejs.init();
|
||||
prm.then(function(gpgmejs){
|
||||
prm.then(function (gpgmejs){
|
||||
context = gpgmejs;
|
||||
done();
|
||||
});
|
||||
@ -43,7 +43,7 @@ describe('Long running Encryption/Decryption', function () {
|
||||
expect(answer.data).to.be.a('string');
|
||||
expect(answer.data).to.include('BEGIN PGP MESSAGE');
|
||||
expect(answer.data).to.include('END PGP MESSAGE');
|
||||
context.decrypt(answer.data).then(function(result){
|
||||
context.decrypt(answer.data).then(function (result){
|
||||
expect(result).to.not.be.empty;
|
||||
expect(result.data).to.be.a('string');
|
||||
expect(result.data).to.equal(data);
|
||||
|
@ -28,9 +28,9 @@ describe('Signing', function () {
|
||||
let context = null;
|
||||
const good_fpr = inputvalues.encrypt.good.fingerprint;
|
||||
|
||||
before(function(done){
|
||||
before(function (done){
|
||||
const prm = Gpgmejs.init();
|
||||
prm.then(function(gpgmejs){
|
||||
prm.then(function (gpgmejs){
|
||||
context = gpgmejs;
|
||||
done();
|
||||
});
|
||||
|
@ -23,12 +23,12 @@
|
||||
|
||||
/* global describe, it, expect, Gpgmejs, inputvalues */
|
||||
|
||||
describe('GPGME context', function(){
|
||||
it('Starting a GpgME instance', function(done){
|
||||
describe('GPGME context', function (){
|
||||
it('Starting a GpgME instance', function (done){
|
||||
let prm = Gpgmejs.init();
|
||||
const input = inputvalues.someInputParameter;
|
||||
prm.then(
|
||||
function(context){
|
||||
function (context){
|
||||
expect(context).to.be.an('object');
|
||||
expect(context.encrypt).to.be.a('function');
|
||||
expect(context.decrypt).to.be.a('function');
|
||||
|
@ -27,16 +27,16 @@
|
||||
|
||||
describe('Verifying data', function () {
|
||||
let context = null;
|
||||
before(function(done){
|
||||
before(function (done){
|
||||
const prm = Gpgmejs.init();
|
||||
prm.then(function(gpgmejs){
|
||||
prm.then(function (gpgmejs){
|
||||
context = gpgmejs;
|
||||
done();
|
||||
});
|
||||
});
|
||||
it('Successful verify message', function (done) {
|
||||
const message = inputvalues.signedMessage.good;
|
||||
context.verify(message).then(function(result){
|
||||
context.verify(message).then(function (result){
|
||||
expect(result.data).to.be.a('string');
|
||||
expect(result.all_valid).to.be.true;
|
||||
expect(result.count).to.equal(1);
|
||||
@ -50,7 +50,7 @@ describe('Verifying data', function () {
|
||||
|
||||
it('Successfully recognize changed cleartext', function (done) {
|
||||
const message = inputvalues.signedMessage.bad;
|
||||
context.verify(message).then(function(result){
|
||||
context.verify(message).then(function (result){
|
||||
expect(result.data).to.be.a('string');
|
||||
expect(result.all_valid).to.be.false;
|
||||
expect(result.count).to.equal(1);
|
||||
@ -65,9 +65,9 @@ describe('Verifying data', function () {
|
||||
it('Encrypt-Sign-Verify random message', function (done) {
|
||||
const message = bigString(2000);
|
||||
let fpr = inputvalues.encrypt.good.fingerprint;
|
||||
context.encrypt(message, fpr).then(function(message_enc){
|
||||
context.sign(message_enc.data, fpr).then(function(message_encsign){
|
||||
context.verify(message_encsign.data).then(function(result){
|
||||
context.encrypt(message, fpr).then(function (message_enc){
|
||||
context.sign(message_enc.data, fpr).then(function (message_encsign){
|
||||
context.verify(message_encsign.data).then(function (result){
|
||||
expect(result.data).to.equal(message_enc.data);
|
||||
expect(result.data).to.be.a('string');
|
||||
expect(result.all_valid).to.be.true;
|
||||
|
@ -23,7 +23,7 @@
|
||||
|
||||
/* global chrome */
|
||||
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
document.addEventListener('DOMContentLoaded', function () {
|
||||
chrome.tabs.create({
|
||||
url: './mainui.html'
|
||||
});
|
||||
|
@ -23,67 +23,67 @@
|
||||
|
||||
/* global document, Gpgmejs */
|
||||
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
Gpgmejs.init().then(function(gpgmejs){
|
||||
document.addEventListener('DOMContentLoaded', function () {
|
||||
Gpgmejs.init().then(function (gpgmejs){
|
||||
document.getElementById('buttonencrypt').addEventListener('click',
|
||||
function(){
|
||||
function (){
|
||||
let data = document.getElementById('inputtext').value;
|
||||
let keyId = document.getElementById('pubkey').value;
|
||||
gpgmejs.encrypt(data, keyId).then(
|
||||
function(answer){
|
||||
function (answer){
|
||||
if (answer.data){
|
||||
document.getElementById(
|
||||
'answer').value = answer.data;
|
||||
}
|
||||
}, function(errormsg){
|
||||
}, function (errormsg){
|
||||
alert( errormsg.message);
|
||||
});
|
||||
});
|
||||
|
||||
document.getElementById('buttondecrypt').addEventListener('click',
|
||||
function(){
|
||||
function (){
|
||||
let data = document.getElementById('inputtext').value;
|
||||
gpgmejs.decrypt(data).then(
|
||||
function(answer){
|
||||
function (answer){
|
||||
if (answer.data){
|
||||
document.getElementById(
|
||||
'answer').value = answer.data;
|
||||
}
|
||||
}, function(errormsg){
|
||||
}, function (errormsg){
|
||||
alert(errormsg.message);
|
||||
});
|
||||
});
|
||||
|
||||
document.getElementById('getdefaultkey').addEventListener('click',
|
||||
function(){
|
||||
gpgmejs.Keyring.getDefaultKey().then(function(answer){
|
||||
function (){
|
||||
gpgmejs.Keyring.getDefaultKey().then(function (answer){
|
||||
document.getElementById('pubkey').value =
|
||||
answer.fingerprint;
|
||||
}, function(errormsg){
|
||||
}, function (errormsg){
|
||||
alert(errormsg.message);
|
||||
});
|
||||
});
|
||||
|
||||
document.getElementById('signtext').addEventListener('click',
|
||||
function(){
|
||||
function (){
|
||||
let data = document.getElementById('inputtext').value;
|
||||
let keyId = document.getElementById('pubkey').value;
|
||||
gpgmejs.sign(data, keyId).then(
|
||||
function(answer){
|
||||
function (answer){
|
||||
if (answer.data){
|
||||
document.getElementById(
|
||||
'answer').value = answer.data;
|
||||
}
|
||||
}, function(errormsg){
|
||||
}, function (errormsg){
|
||||
alert( errormsg.message);
|
||||
});
|
||||
});
|
||||
|
||||
document.getElementById('verifytext').addEventListener('click',
|
||||
function(){
|
||||
function (){
|
||||
let data = document.getElementById('inputtext').value;
|
||||
gpgmejs.verify(data).then(
|
||||
function(answer){
|
||||
function (answer){
|
||||
let vals = '';
|
||||
if (answer.all_valid === true){
|
||||
vals = 'Success! ';
|
||||
@ -94,14 +94,14 @@ document.addEventListener('DOMContentLoaded', function() {
|
||||
+ answer.count + ' signature(s) were successfully '
|
||||
+ 'verified.\n\n' + answer.data;
|
||||
document.getElementById('answer').value = vals;
|
||||
}, function(errormsg){
|
||||
}, function (errormsg){
|
||||
alert( errormsg.message);
|
||||
});
|
||||
});
|
||||
document.getElementById('searchkey').addEventListener('click',
|
||||
function(){
|
||||
function (){
|
||||
let data = document.getElementById('inputtext').value;
|
||||
gpgmejs.Keyring.getKeys(data, true, true).then(function(keys){
|
||||
gpgmejs.Keyring.getKeys(data, true, true).then(function (keys){
|
||||
if (keys.length === 1){
|
||||
document.getElementById(
|
||||
'pubkey').value = keys[0].fingerprint;
|
||||
@ -111,7 +111,7 @@ document.addEventListener('DOMContentLoaded', function() {
|
||||
} else {
|
||||
alert('No keys found');
|
||||
}
|
||||
}, function(errormsg){
|
||||
}, function (errormsg){
|
||||
alert( errormsg.message);
|
||||
});
|
||||
});
|
||||
|
@ -38,14 +38,14 @@ import { decode } from './Helpers';
|
||||
*/
|
||||
export class Connection{
|
||||
|
||||
constructor(){
|
||||
constructor (){
|
||||
this._connection = chrome.runtime.connectNative('gpgmejson');
|
||||
}
|
||||
|
||||
/**
|
||||
* Immediately closes an open port.
|
||||
*/
|
||||
disconnect() {
|
||||
disconnect () {
|
||||
if (this._connection){
|
||||
this._connection.disconnect();
|
||||
this._connection = null;
|
||||
@ -81,17 +81,17 @@ export class Connection{
|
||||
return this.post(msg);
|
||||
} else {
|
||||
let me = this;
|
||||
return new Promise(function(resolve) {
|
||||
return new Promise(function (resolve) {
|
||||
Promise.race([
|
||||
me.post(msg),
|
||||
new Promise(function(resolve, reject){
|
||||
setTimeout(function(){
|
||||
new Promise(function (resolve, reject){
|
||||
setTimeout(function (){
|
||||
reject(gpgme_error('CONN_TIMEOUT'));
|
||||
}, 500);
|
||||
})
|
||||
]).then(function(){ // success
|
||||
]).then(function (){ // success
|
||||
resolve(true);
|
||||
}, function(){ // failure
|
||||
}, function (){ // failure
|
||||
resolve(false);
|
||||
});
|
||||
});
|
||||
@ -107,7 +107,7 @@ export class Connection{
|
||||
* @returns {Promise<Object>} The collected answer
|
||||
* @async
|
||||
*/
|
||||
post(message){
|
||||
post (message){
|
||||
if (!message || !(message instanceof GPGME_Message)){
|
||||
this.disconnect();
|
||||
return Promise.reject(gpgme_error(
|
||||
@ -119,9 +119,9 @@ export class Connection{
|
||||
}
|
||||
let chunksize = message.chunksize;
|
||||
const me = this;
|
||||
return new Promise(function(resolve, reject){
|
||||
return new Promise(function (resolve, reject){
|
||||
let answer = new Answer(message);
|
||||
let listener = function(msg) {
|
||||
let listener = function (msg) {
|
||||
if (!msg){
|
||||
me._connection.onMessage.removeListener(listener);
|
||||
me._connection.disconnect();
|
||||
@ -157,16 +157,16 @@ export class Connection{
|
||||
} else {
|
||||
return Promise.race([
|
||||
me._connection.postMessage(message.message),
|
||||
function(resolve, reject){
|
||||
setTimeout(function(){
|
||||
function (resolve, reject){
|
||||
setTimeout(function (){
|
||||
me._connection.disconnect();
|
||||
reject(gpgme_error('CONN_TIMEOUT'));
|
||||
}, 5000);
|
||||
}
|
||||
]).then(function(result){
|
||||
]).then(function (result){
|
||||
return result;
|
||||
}, function(reject){
|
||||
if(!(reject instanceof Error)) {
|
||||
}, function (reject){
|
||||
if (!(reject instanceof Error)) {
|
||||
me._connection.disconnect();
|
||||
return gpgme_error('GNUPG_ERROR', reject);
|
||||
} else {
|
||||
@ -189,7 +189,7 @@ class Answer{
|
||||
/**
|
||||
* @param {GPGME_Message} message
|
||||
*/
|
||||
constructor(message){
|
||||
constructor (message){
|
||||
this._operation = message.operation;
|
||||
this._expected = message.expected;
|
||||
this._response_b64 = null;
|
||||
@ -211,7 +211,7 @@ class Answer{
|
||||
* @private
|
||||
*/
|
||||
collect (msg){
|
||||
if (typeof(msg) !== 'object' || !msg.hasOwnProperty('response')) {
|
||||
if (typeof (msg) !== 'object' || !msg.hasOwnProperty('response')) {
|
||||
return gpgme_error('CONN_UNEXPECTED_ANSWER');
|
||||
}
|
||||
if (!this._response_b64){
|
||||
@ -226,7 +226,7 @@ class Answer{
|
||||
* Returns the base64 encoded answer data with the content verified
|
||||
* against {@link permittedOperations}.
|
||||
*/
|
||||
getMessage(){
|
||||
getMessage (){
|
||||
if (this._response_b64 === null){
|
||||
return gpgme_error('CONN_UNEXPECTED_ANSWER');
|
||||
}
|
||||
@ -259,7 +259,7 @@ class Answer{
|
||||
if (!poa.data.hasOwnProperty(key)){
|
||||
return gpgme_error('CONN_UNEXPECTED_ANSWER');
|
||||
}
|
||||
if( typeof(_decodedResponse[key]) !== poa.data[key] ){
|
||||
if ( typeof (_decodedResponse[key]) !== poa.data[key] ){
|
||||
return gpgme_error('CONN_UNEXPECTED_ANSWER');
|
||||
}
|
||||
if (_decodedResponse.base64 === true
|
||||
@ -268,7 +268,7 @@ class Answer{
|
||||
){
|
||||
_response[key] = decodeURIComponent(
|
||||
atob(_decodedResponse[key]).split('').map(
|
||||
function(c) {
|
||||
function (c) {
|
||||
return '%' +
|
||||
('00' + c.charCodeAt(0).toString(16)).slice(-2);
|
||||
}).join(''));
|
||||
|
@ -120,7 +120,7 @@ const err_list = {
|
||||
* @param {*} info Error message passed through if code is 'GNUPG_ERROR'
|
||||
* @returns {GPGME_Error}
|
||||
*/
|
||||
export function gpgme_error(code = 'GENERIC_ERROR', info){
|
||||
export function gpgme_error (code = 'GENERIC_ERROR', info){
|
||||
if (err_list.hasOwnProperty(code)){
|
||||
if (err_list[code].type === 'error'){
|
||||
return new GPGME_Error(code);
|
||||
@ -147,9 +147,9 @@ export function gpgme_error(code = 'GENERIC_ERROR', info){
|
||||
* @extends Error
|
||||
*/
|
||||
class GPGME_Error extends Error{
|
||||
constructor(code = 'GENERIC_ERROR', msg=''){
|
||||
constructor (code = 'GENERIC_ERROR', msg=''){
|
||||
|
||||
if (code === 'GNUPG_ERROR' && typeof(msg) === 'string'){
|
||||
if (code === 'GNUPG_ERROR' && typeof (msg) === 'string'){
|
||||
super(msg);
|
||||
} else if (err_list.hasOwnProperty(code)){
|
||||
if (msg){
|
||||
@ -163,7 +163,7 @@ class GPGME_Error extends Error{
|
||||
this._code = code;
|
||||
}
|
||||
|
||||
get code(){
|
||||
get code (){
|
||||
return this._code;
|
||||
}
|
||||
}
|
@ -30,7 +30,7 @@ import { gpgme_error } from './Errors';
|
||||
* @param {Object | Array<Object> | String | Array<String>} input
|
||||
* @returns {Array<String>} Array of fingerprints, or an empty array
|
||||
*/
|
||||
export function toKeyIdArray(input){
|
||||
export function toKeyIdArray (input){
|
||||
if (!input){
|
||||
return [];
|
||||
}
|
||||
@ -39,7 +39,7 @@ export function toKeyIdArray(input){
|
||||
}
|
||||
let result = [];
|
||||
for (let i=0; i < input.length; i++){
|
||||
if (typeof(input[i]) === 'string'){
|
||||
if (typeof (input[i]) === 'string'){
|
||||
if (isFingerprint(input[i]) === true){
|
||||
result.push(input[i]);
|
||||
} else {
|
||||
@ -47,7 +47,7 @@ export function toKeyIdArray(input){
|
||||
// in src/Errors.js
|
||||
gpgme_error('MSG_NOT_A_FPR');
|
||||
}
|
||||
} else if (typeof(input[i]) === 'object'){
|
||||
} else if (typeof (input[i]) === 'object'){
|
||||
let fpr = '';
|
||||
if (input[i].hasOwnProperty('fingerprint')){
|
||||
fpr = input[i].fingerprint;
|
||||
@ -78,8 +78,8 @@ export function toKeyIdArray(input){
|
||||
* @returns {Boolean} true if value passes test
|
||||
* @private
|
||||
*/
|
||||
function hextest(key, len){
|
||||
if (!key || typeof(key) !== 'string'){
|
||||
function hextest (key, len){
|
||||
if (!key || typeof (key) !== 'string'){
|
||||
return false;
|
||||
}
|
||||
if (key.length !== len){
|
||||
@ -95,7 +95,7 @@ function hextest(key, len){
|
||||
* @param {String} value to check
|
||||
* @returns {Boolean} true if value passes test
|
||||
*/
|
||||
export function isFingerprint(value){
|
||||
export function isFingerprint (value){
|
||||
return hextest(value, 40);
|
||||
}
|
||||
|
||||
@ -105,7 +105,7 @@ export function isFingerprint(value){
|
||||
* @param {String} value to check
|
||||
* @returns {Boolean} true if value passes test
|
||||
*/
|
||||
export function isLongId(value){
|
||||
export function isLongId (value){
|
||||
return hextest(value, 16);
|
||||
}
|
||||
|
||||
@ -113,7 +113,7 @@ export function isLongId(value){
|
||||
* Recursively decodes input (utf8) to output (utf-16; javascript) strings
|
||||
* @param {Object | Array | String} property
|
||||
*/
|
||||
export function decode(property){
|
||||
export function decode (property){
|
||||
if (typeof property === 'string'){
|
||||
return decodeURIComponent(escape(property));
|
||||
} else if (Array.isArray(property)){
|
||||
|
@ -35,8 +35,8 @@ import { createMessage } from './Message';
|
||||
* a full object as delivered by gpgme-json
|
||||
* @returns {Object|GPGME_Error} The verified and updated data
|
||||
*/
|
||||
export function createKey(fingerprint, async = false, data){
|
||||
if (!isFingerprint(fingerprint) || typeof(async) !== 'boolean'){
|
||||
export function createKey (fingerprint, async = false, data){
|
||||
if (!isFingerprint(fingerprint) || typeof (async) !== 'boolean'){
|
||||
return gpgme_error('PARAM_WRONG');
|
||||
}
|
||||
if (data !== undefined){
|
||||
@ -60,14 +60,14 @@ export function createKey(fingerprint, async = false, data){
|
||||
*/
|
||||
class GPGME_Key {
|
||||
|
||||
constructor(fingerprint, async, data){
|
||||
constructor (fingerprint, async, data){
|
||||
|
||||
/**
|
||||
* @property {Boolean} If true, most answers will be asynchronous
|
||||
*/
|
||||
this._async = async;
|
||||
|
||||
this._data = {fingerprint: fingerprint.toUpperCase()};
|
||||
this._data = { fingerprint: fingerprint.toUpperCase() };
|
||||
if (data !== undefined
|
||||
&& data.fingerprint.toUpperCase() === this._data.fingerprint
|
||||
) {
|
||||
@ -84,7 +84,7 @@ class GPGME_Key {
|
||||
* async, the armored property is not available (it can still be
|
||||
* retrieved asynchronously by {@link Key.getArmor})
|
||||
*/
|
||||
get(property) {
|
||||
get (property) {
|
||||
if (this._async === true) {
|
||||
switch (property){
|
||||
case 'armored':
|
||||
@ -98,6 +98,7 @@ class GPGME_Key {
|
||||
if (property === 'armored') {
|
||||
return gpgme_error('KEY_ASYNC_ONLY');
|
||||
}
|
||||
// eslint-disable-next-line no-use-before-define
|
||||
if (!validKeyProperties.hasOwnProperty(property)){
|
||||
return gpgme_error('PARAM_WRONG');
|
||||
} else {
|
||||
@ -114,16 +115,16 @@ class GPGME_Key {
|
||||
* @returns {Promise<GPGME_Key|GPGME_Error>}
|
||||
* @async
|
||||
*/
|
||||
refreshKey() {
|
||||
refreshKey () {
|
||||
let me = this;
|
||||
return new Promise(function(resolve, reject) {
|
||||
return new Promise(function (resolve, reject) {
|
||||
if (!me._data.fingerprint){
|
||||
reject(gpgme_error('KEY_INVALID'));
|
||||
}
|
||||
let msg = createMessage('keylist');
|
||||
msg.setParameter('sigs', true);
|
||||
msg.setParameter('keys', me._data.fingerprint);
|
||||
msg.post().then(function(result){
|
||||
msg.post().then(function (result){
|
||||
if (result.keys.length === 1){
|
||||
const newdata = validateKeyData(
|
||||
me._data.fingerprint, result.keys[0]);
|
||||
@ -131,13 +132,13 @@ class GPGME_Key {
|
||||
reject(gpgme_error('KEY_INVALID'));
|
||||
} else {
|
||||
me._data = newdata;
|
||||
me.getGnupgSecretState().then(function(){
|
||||
me.getArmor().then(function(){
|
||||
me.getGnupgSecretState().then(function (){
|
||||
me.getArmor().then(function (){
|
||||
resolve(me);
|
||||
}, function(error){
|
||||
}, function (error){
|
||||
reject(error);
|
||||
});
|
||||
}, function(error){
|
||||
}, function (error){
|
||||
reject(error);
|
||||
});
|
||||
}
|
||||
@ -157,18 +158,18 @@ class GPGME_Key {
|
||||
* @returns {Promise<String|GPGME_Error>}
|
||||
* @async
|
||||
*/
|
||||
getArmor() {
|
||||
getArmor () {
|
||||
const me = this;
|
||||
return new Promise(function(resolve, reject) {
|
||||
return new Promise(function (resolve, reject) {
|
||||
if (!me._data.fingerprint){
|
||||
reject(gpgme_error('KEY_INVALID'));
|
||||
}
|
||||
let msg = createMessage('export');
|
||||
msg.setParameter('armor', true);
|
||||
msg.setParameter('keys', me._data.fingerprint);
|
||||
msg.post().then(function(result){
|
||||
msg.post().then(function (result){
|
||||
resolve(result.data);
|
||||
}, function(error){
|
||||
}, function (error){
|
||||
reject(error);
|
||||
});
|
||||
});
|
||||
@ -186,14 +187,14 @@ class GPGME_Key {
|
||||
*/
|
||||
getGnupgSecretState (){
|
||||
const me = this;
|
||||
return new Promise(function(resolve, reject) {
|
||||
return new Promise(function (resolve, reject) {
|
||||
if (!me._data.fingerprint){
|
||||
reject(gpgme_error('KEY_INVALID'));
|
||||
} else {
|
||||
let msg = createMessage('keylist');
|
||||
msg.setParameter('keys', me._data.fingerprint);
|
||||
msg.setParameter('secret', true);
|
||||
msg.post().then(function(result){
|
||||
msg.post().then(function (result){
|
||||
me._data.hasSecret = null;
|
||||
if (
|
||||
result.keys &&
|
||||
@ -206,7 +207,7 @@ class GPGME_Key {
|
||||
me._data.hasSecret = false;
|
||||
resolve(false);
|
||||
}
|
||||
}, function(error){
|
||||
}, function (error){
|
||||
reject(error);
|
||||
});
|
||||
}
|
||||
@ -219,17 +220,17 @@ class GPGME_Key {
|
||||
* @returns {Promise<Boolean|GPGME_Error>} Success if key was deleted,
|
||||
* rejects with a GPG error otherwise.
|
||||
*/
|
||||
delete(){
|
||||
delete (){
|
||||
const me = this;
|
||||
return new Promise(function(resolve, reject){
|
||||
return new Promise(function (resolve, reject){
|
||||
if (!me._data.fingerprint){
|
||||
reject(gpgme_error('KEY_INVALID'));
|
||||
}
|
||||
let msg = createMessage('delete');
|
||||
msg.setParameter('key', me._data.fingerprint);
|
||||
msg.post().then(function(result){
|
||||
msg.post().then(function (result){
|
||||
resolve(result.success);
|
||||
}, function(error){
|
||||
}, function (error){
|
||||
reject(error);
|
||||
});
|
||||
});
|
||||
@ -238,7 +239,7 @@ class GPGME_Key {
|
||||
/**
|
||||
* @returns {String} The fingerprint defining this Key. Convenience getter
|
||||
*/
|
||||
get fingerprint(){
|
||||
get fingerprint (){
|
||||
return this._data.fingerprint;
|
||||
}
|
||||
}
|
||||
@ -255,7 +256,7 @@ class GPGME_Subkey {
|
||||
* @param {Object} data
|
||||
* @private
|
||||
*/
|
||||
constructor(data){
|
||||
constructor (data){
|
||||
this._data = {};
|
||||
let keys = Object.keys(data);
|
||||
const me = this;
|
||||
@ -268,7 +269,9 @@ class GPGME_Subkey {
|
||||
* @param private
|
||||
*/
|
||||
const setProperty = function (property, value){
|
||||
// eslint-disable-next-line no-use-before-define
|
||||
if (validSubKeyProperties.hasOwnProperty(property)){
|
||||
// eslint-disable-next-line no-use-before-define
|
||||
if (validSubKeyProperties[property](value) === true) {
|
||||
if (property === 'timestamp' || property === 'expires'){
|
||||
me._data[property] = new Date(value * 1000);
|
||||
@ -288,7 +291,7 @@ class GPGME_Subkey {
|
||||
* @param {String} property Information to request
|
||||
* @returns {String | Number | Date}
|
||||
*/
|
||||
get(property) {
|
||||
get (property) {
|
||||
if (this._data.hasOwnProperty(property)){
|
||||
return (this._data[property]);
|
||||
}
|
||||
@ -308,12 +311,14 @@ class GPGME_UserId {
|
||||
* @param {Object} data
|
||||
* @private
|
||||
*/
|
||||
constructor(data){
|
||||
constructor (data){
|
||||
this._data = {};
|
||||
const me = this;
|
||||
let keys = Object.keys(data);
|
||||
const setProperty = function(property, value){
|
||||
const setProperty = function (property, value){
|
||||
// eslint-disable-next-line no-use-before-define
|
||||
if (validUserIdProperties.hasOwnProperty(property)){
|
||||
// eslint-disable-next-line no-use-before-define
|
||||
if (validUserIdProperties[property](value) === true) {
|
||||
if (property === 'last_update'){
|
||||
me._data[property] = new Date(value*1000);
|
||||
@ -333,7 +338,7 @@ class GPGME_UserId {
|
||||
* @param {String} property Information to request
|
||||
* @returns {String | Number}
|
||||
*/
|
||||
get(property) {
|
||||
get (property) {
|
||||
if (this._data.hasOwnProperty(property)){
|
||||
return (this._data[property]);
|
||||
}
|
||||
@ -349,52 +354,52 @@ class GPGME_UserId {
|
||||
* @const
|
||||
*/
|
||||
const validUserIdProperties = {
|
||||
'revoked': function(value){
|
||||
return typeof(value) === 'boolean';
|
||||
'revoked': function (value){
|
||||
return typeof (value) === 'boolean';
|
||||
},
|
||||
'invalid': function(value){
|
||||
return typeof(value) === 'boolean';
|
||||
'invalid': function (value){
|
||||
return typeof (value) === 'boolean';
|
||||
},
|
||||
'uid': function(value){
|
||||
if (typeof(value) === 'string' || value === ''){
|
||||
'uid': function (value){
|
||||
if (typeof (value) === 'string' || value === ''){
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
},
|
||||
'validity': function(value){
|
||||
if (typeof(value) === 'string'){
|
||||
'validity': function (value){
|
||||
if (typeof (value) === 'string'){
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
},
|
||||
'name': function(value){
|
||||
if (typeof(value) === 'string' || value === ''){
|
||||
'name': function (value){
|
||||
if (typeof (value) === 'string' || value === ''){
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
},
|
||||
'email': function(value){
|
||||
if (typeof(value) === 'string' || value === ''){
|
||||
'email': function (value){
|
||||
if (typeof (value) === 'string' || value === ''){
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
},
|
||||
'address': function(value){
|
||||
if (typeof(value) === 'string' || value === ''){
|
||||
'address': function (value){
|
||||
if (typeof (value) === 'string' || value === ''){
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
},
|
||||
'comment': function(value){
|
||||
if (typeof(value) === 'string' || value === ''){
|
||||
'comment': function (value){
|
||||
if (typeof (value) === 'string' || value === ''){
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
},
|
||||
'origin': function(value){
|
||||
'origin': function (value){
|
||||
return Number.isInteger(value);
|
||||
},
|
||||
'last_update': function(value){
|
||||
'last_update': function (value){
|
||||
return Number.isInteger(value);
|
||||
}
|
||||
};
|
||||
@ -406,54 +411,54 @@ const validUserIdProperties = {
|
||||
* @const
|
||||
*/
|
||||
const validSubKeyProperties = {
|
||||
'invalid': function(value){
|
||||
return typeof(value) === 'boolean';
|
||||
'invalid': function (value){
|
||||
return typeof (value) === 'boolean';
|
||||
},
|
||||
'can_encrypt': function(value){
|
||||
return typeof(value) === 'boolean';
|
||||
'can_encrypt': function (value){
|
||||
return typeof (value) === 'boolean';
|
||||
},
|
||||
'can_sign': function(value){
|
||||
return typeof(value) === 'boolean';
|
||||
'can_sign': function (value){
|
||||
return typeof (value) === 'boolean';
|
||||
},
|
||||
'can_certify': function(value){
|
||||
return typeof(value) === 'boolean';
|
||||
'can_certify': function (value){
|
||||
return typeof (value) === 'boolean';
|
||||
},
|
||||
'can_authenticate': function(value){
|
||||
return typeof(value) === 'boolean';
|
||||
'can_authenticate': function (value){
|
||||
return typeof (value) === 'boolean';
|
||||
},
|
||||
'secret': function(value){
|
||||
return typeof(value) === 'boolean';
|
||||
'secret': function (value){
|
||||
return typeof (value) === 'boolean';
|
||||
},
|
||||
'is_qualified': function(value){
|
||||
return typeof(value) === 'boolean';
|
||||
'is_qualified': function (value){
|
||||
return typeof (value) === 'boolean';
|
||||
},
|
||||
'is_cardkey': function(value){
|
||||
return typeof(value) === 'boolean';
|
||||
'is_cardkey': function (value){
|
||||
return typeof (value) === 'boolean';
|
||||
},
|
||||
'is_de_vs': function(value){
|
||||
return typeof(value) === 'boolean';
|
||||
'is_de_vs': function (value){
|
||||
return typeof (value) === 'boolean';
|
||||
},
|
||||
'pubkey_algo_name': function(value){
|
||||
return typeof(value) === 'string';
|
||||
'pubkey_algo_name': function (value){
|
||||
return typeof (value) === 'string';
|
||||
// TODO: check against list of known?['']
|
||||
},
|
||||
'pubkey_algo_string': function(value){
|
||||
return typeof(value) === 'string';
|
||||
'pubkey_algo_string': function (value){
|
||||
return typeof (value) === 'string';
|
||||
// TODO: check against list of known?['']
|
||||
},
|
||||
'keyid': function(value){
|
||||
'keyid': function (value){
|
||||
return isLongId(value);
|
||||
},
|
||||
'pubkey_algo': function(value) {
|
||||
'pubkey_algo': function (value) {
|
||||
return (Number.isInteger(value) && value >= 0);
|
||||
},
|
||||
'length': function(value){
|
||||
'length': function (value){
|
||||
return (Number.isInteger(value) && value > 0);
|
||||
},
|
||||
'timestamp': function(value){
|
||||
'timestamp': function (value){
|
||||
return (Number.isInteger(value) && value > 0);
|
||||
},
|
||||
'expires': function(value){
|
||||
'expires': function (value){
|
||||
return (Number.isInteger(value) && value > 0);
|
||||
}
|
||||
};
|
||||
@ -489,73 +494,73 @@ const validSubKeyProperties = {
|
||||
* @const
|
||||
*/
|
||||
const validKeyProperties = {
|
||||
'fingerprint': function(value){
|
||||
'fingerprint': function (value){
|
||||
return isFingerprint(value);
|
||||
},
|
||||
'revoked': function(value){
|
||||
return typeof(value) === 'boolean';
|
||||
'revoked': function (value){
|
||||
return typeof (value) === 'boolean';
|
||||
},
|
||||
'expired': function(value){
|
||||
return typeof(value) === 'boolean';
|
||||
'expired': function (value){
|
||||
return typeof (value) === 'boolean';
|
||||
},
|
||||
'disabled': function(value){
|
||||
return typeof(value) === 'boolean';
|
||||
'disabled': function (value){
|
||||
return typeof (value) === 'boolean';
|
||||
},
|
||||
'invalid': function(value){
|
||||
return typeof(value) === 'boolean';
|
||||
'invalid': function (value){
|
||||
return typeof (value) === 'boolean';
|
||||
},
|
||||
'can_encrypt': function(value){
|
||||
return typeof(value) === 'boolean';
|
||||
'can_encrypt': function (value){
|
||||
return typeof (value) === 'boolean';
|
||||
},
|
||||
'can_sign': function(value){
|
||||
return typeof(value) === 'boolean';
|
||||
'can_sign': function (value){
|
||||
return typeof (value) === 'boolean';
|
||||
},
|
||||
'can_certify': function(value){
|
||||
return typeof(value) === 'boolean';
|
||||
'can_certify': function (value){
|
||||
return typeof (value) === 'boolean';
|
||||
},
|
||||
'can_authenticate': function(value){
|
||||
return typeof(value) === 'boolean';
|
||||
'can_authenticate': function (value){
|
||||
return typeof (value) === 'boolean';
|
||||
},
|
||||
'secret': function(value){
|
||||
return typeof(value) === 'boolean';
|
||||
'secret': function (value){
|
||||
return typeof (value) === 'boolean';
|
||||
},
|
||||
'is_qualified': function(value){
|
||||
return typeof(value) === 'boolean';
|
||||
'is_qualified': function (value){
|
||||
return typeof (value) === 'boolean';
|
||||
},
|
||||
'protocol': function(value){
|
||||
return typeof(value) === 'string';
|
||||
//TODO check for implemented ones
|
||||
'protocol': function (value){
|
||||
return typeof (value) === 'string';
|
||||
// TODO check for implemented ones
|
||||
},
|
||||
'issuer_serial': function(value){
|
||||
return typeof(value) === 'string';
|
||||
'issuer_serial': function (value){
|
||||
return typeof (value) === 'string';
|
||||
},
|
||||
'issuer_name': function(value){
|
||||
return typeof(value) === 'string';
|
||||
'issuer_name': function (value){
|
||||
return typeof (value) === 'string';
|
||||
},
|
||||
'chain_id': function(value){
|
||||
return typeof(value) === 'string';
|
||||
'chain_id': function (value){
|
||||
return typeof (value) === 'string';
|
||||
},
|
||||
'owner_trust': function(value){
|
||||
return typeof(value) === 'string';
|
||||
'owner_trust': function (value){
|
||||
return typeof (value) === 'string';
|
||||
},
|
||||
'last_update': function(value){
|
||||
'last_update': function (value){
|
||||
return (Number.isInteger(value));
|
||||
//TODO undefined/null possible?
|
||||
// TODO undefined/null possible?
|
||||
},
|
||||
'origin': function(value){
|
||||
'origin': function (value){
|
||||
return (Number.isInteger(value));
|
||||
},
|
||||
'subkeys': function(value){
|
||||
'subkeys': function (value){
|
||||
return (Array.isArray(value));
|
||||
},
|
||||
'userids': function(value){
|
||||
'userids': function (value){
|
||||
return (Array.isArray(value));
|
||||
},
|
||||
'tofu': function(value){
|
||||
'tofu': function (value){
|
||||
return (Array.isArray(value));
|
||||
},
|
||||
'hasSecret': function(value){
|
||||
return typeof(value) === 'boolean';
|
||||
'hasSecret': function (value){
|
||||
return typeof (value) === 'boolean';
|
||||
}
|
||||
|
||||
};
|
||||
@ -570,9 +575,9 @@ const validKeyProperties = {
|
||||
* an error if something went wrong.
|
||||
* @private
|
||||
*/
|
||||
function validateKeyData(fingerprint, data){
|
||||
function validateKeyData (fingerprint, data){
|
||||
const key = {};
|
||||
if (!fingerprint || typeof(data) !== 'object' || !data.fingerprint
|
||||
if (!fingerprint || typeof (data) !== 'object' || !data.fingerprint
|
||||
|| fingerprint !== data.fingerprint.toUpperCase()
|
||||
){
|
||||
return gpgme_error('KEY_INVALID');
|
||||
@ -619,13 +624,13 @@ function validateKeyData(fingerprint, data){
|
||||
* @async
|
||||
*/
|
||||
function getGnupgState (fingerprint, property){
|
||||
return new Promise(function(resolve, reject) {
|
||||
return new Promise(function (resolve, reject) {
|
||||
if (!isFingerprint(fingerprint)) {
|
||||
reject(gpgme_error('KEY_INVALID'));
|
||||
} else {
|
||||
let msg = createMessage('keylist');
|
||||
msg.setParameter('keys', fingerprint);
|
||||
msg.post().then(function(res){
|
||||
msg.post().then(function (res){
|
||||
if (!res.keys || res.keys.length !== 1){
|
||||
reject(gpgme_error('KEY_INVALID'));
|
||||
} else {
|
||||
@ -675,7 +680,7 @@ function getGnupgState (fingerprint, property){
|
||||
break;
|
||||
}
|
||||
}
|
||||
}, function(error){
|
||||
}, function (error){
|
||||
reject(gpgme_error(error));
|
||||
});
|
||||
}
|
||||
|
@ -22,8 +22,8 @@
|
||||
*/
|
||||
|
||||
|
||||
import {createMessage} from './Message';
|
||||
import {createKey} from './Key';
|
||||
import { createMessage } from './Message';
|
||||
import { createKey } from './Key';
|
||||
import { isFingerprint } from './Helpers';
|
||||
import { gpgme_error } from './Errors';
|
||||
|
||||
@ -31,8 +31,6 @@ import { gpgme_error } from './Errors';
|
||||
* This class offers access to the gnupg keyring
|
||||
*/
|
||||
export class GPGME_Keyring {
|
||||
constructor(){
|
||||
}
|
||||
|
||||
/**
|
||||
* Queries Keys (all Keys or a subset) from gnupg.
|
||||
@ -51,7 +49,7 @@ export class GPGME_Keyring {
|
||||
* @async
|
||||
*/
|
||||
getKeys (pattern, prepare_sync=false, search=false){
|
||||
return new Promise(function(resolve, reject) {
|
||||
return new Promise(function (resolve, reject) {
|
||||
let msg = createMessage('keylist');
|
||||
if (pattern !== undefined && pattern !== null){
|
||||
msg.setParameter('keys', pattern);
|
||||
@ -60,25 +58,25 @@ export class GPGME_Keyring {
|
||||
if (search === true){
|
||||
msg.setParameter('locate', true);
|
||||
}
|
||||
msg.post().then(function(result){
|
||||
msg.post().then(function (result){
|
||||
let resultset = [];
|
||||
if (result.keys.length === 0){
|
||||
resolve([]);
|
||||
} else {
|
||||
let secondrequest;
|
||||
if (prepare_sync === true) {
|
||||
secondrequest = function() {
|
||||
secondrequest = function () {
|
||||
let msg2 = createMessage('keylist');
|
||||
msg2.setParameter('keys', pattern);
|
||||
msg2.setParameter('secret', true);
|
||||
return msg2.post();
|
||||
};
|
||||
} else {
|
||||
secondrequest = function() {
|
||||
secondrequest = function () {
|
||||
return Promise.resolve(true);
|
||||
};
|
||||
}
|
||||
secondrequest().then(function(answer) {
|
||||
secondrequest().then(function (answer) {
|
||||
for (let i=0; i < result.keys.length; i++){
|
||||
if (prepare_sync === true){
|
||||
if (answer && answer.keys) {
|
||||
@ -104,7 +102,7 @@ export class GPGME_Keyring {
|
||||
resultset.push(k);
|
||||
}
|
||||
resolve(resultset);
|
||||
}, function(error){
|
||||
}, function (error){
|
||||
reject(error);
|
||||
});
|
||||
}
|
||||
@ -136,7 +134,7 @@ export class GPGME_Keyring {
|
||||
* @async
|
||||
*/
|
||||
getKeysArmored (pattern, with_secret_fpr) {
|
||||
return new Promise(function(resolve, reject) {
|
||||
return new Promise(function (resolve, reject) {
|
||||
let msg = createMessage('export');
|
||||
msg.setParameter('armor', true);
|
||||
if (with_secret_fpr === true) {
|
||||
@ -145,15 +143,15 @@ export class GPGME_Keyring {
|
||||
if (pattern !== undefined && pattern !== null){
|
||||
msg.setParameter('keys', pattern);
|
||||
}
|
||||
msg.post().then(function(answer){
|
||||
const result = {armored: answer.data};
|
||||
msg.post().then(function (answer){
|
||||
const result = { armored: answer.data };
|
||||
if (with_secret_fpr === true
|
||||
&& answer.hasOwnProperty('sec-fprs')
|
||||
) {
|
||||
result.secret_fprs = answer['sec-fprs'];
|
||||
}
|
||||
resolve(result);
|
||||
}, function(error){
|
||||
}, function (error){
|
||||
reject(error);
|
||||
});
|
||||
});
|
||||
@ -169,32 +167,32 @@ export class GPGME_Keyring {
|
||||
* @async
|
||||
* @static
|
||||
*/
|
||||
getDefaultKey(prepare_sync = false) {
|
||||
getDefaultKey (prepare_sync = false) {
|
||||
let me = this;
|
||||
return new Promise(function(resolve, reject){
|
||||
return new Promise(function (resolve, reject){
|
||||
let msg = createMessage('config_opt');
|
||||
msg.setParameter('component', 'gpg');
|
||||
msg.setParameter('option', 'default-key');
|
||||
msg.post().then(function(resp){
|
||||
msg.post().then(function (resp){
|
||||
if (resp.option !== undefined
|
||||
&& resp.option.hasOwnProperty('value')
|
||||
&& resp.option.value.length === 1
|
||||
&& resp.option.value[0].hasOwnProperty('string')
|
||||
&& typeof(resp.option.value[0].string) === 'string'){
|
||||
&& typeof (resp.option.value[0].string) === 'string'){
|
||||
me.getKeys(resp.option.value[0].string, true).then(
|
||||
function(keys){
|
||||
if(keys.length === 1){
|
||||
function (keys){
|
||||
if (keys.length === 1){
|
||||
resolve(keys[0]);
|
||||
} else {
|
||||
reject(gpgme_error('KEY_NO_DEFAULT'));
|
||||
}
|
||||
}, function(error){
|
||||
}, function (error){
|
||||
reject(error);
|
||||
});
|
||||
} else {
|
||||
let msg = createMessage('keylist');
|
||||
msg.setParameter('secret', true);
|
||||
msg.post().then(function(result){
|
||||
msg.post().then(function (result){
|
||||
if (result.keys.length === 0){
|
||||
reject(gpgme_error('KEY_NO_DEFAULT'));
|
||||
} else {
|
||||
@ -211,11 +209,11 @@ export class GPGME_Keyring {
|
||||
}
|
||||
}
|
||||
}
|
||||
}, function(error){
|
||||
}, function (error){
|
||||
reject(error);
|
||||
});
|
||||
}
|
||||
}, function(error){
|
||||
}, function (error){
|
||||
reject(error);
|
||||
});
|
||||
});
|
||||
@ -264,14 +262,14 @@ export class GPGME_Keyring {
|
||||
'new_signatures', 'new_revocations', 'secret_read',
|
||||
'secret_imported', 'secret_unchanged', 'skipped_new_keys',
|
||||
'not_imported', 'skipped_v3_keys'];
|
||||
if (!armored || typeof(armored) !== 'string'){
|
||||
if (!armored || typeof (armored) !== 'string'){
|
||||
return Promise.reject(gpgme_error('PARAM_WRONG'));
|
||||
}
|
||||
let me = this;
|
||||
return new Promise(function(resolve, reject){
|
||||
return new Promise(function (resolve, reject){
|
||||
let msg = createMessage('import');
|
||||
msg.setParameter('data', armored);
|
||||
msg.post().then(function(response){
|
||||
msg.post().then(function (response){
|
||||
let infos = {};
|
||||
let fprs = [];
|
||||
let summary = {};
|
||||
@ -282,7 +280,7 @@ export class GPGME_Keyring {
|
||||
if (!response.result.hasOwnProperty('imports') ||
|
||||
response.result.imports.length === 0
|
||||
){
|
||||
resolve({Keys:[],summary: summary});
|
||||
resolve({ Keys:[],summary: summary });
|
||||
return;
|
||||
}
|
||||
for (let res=0; res<response.result.imports.length; res++){
|
||||
@ -299,7 +297,7 @@ export class GPGME_Keyring {
|
||||
changes.userId = (result.status & 2) === 2;
|
||||
changes.signature = (result.status & 4) === 4;
|
||||
changes.subkey = (result.status & 8) === 8;
|
||||
//16 new secret key: not implemented
|
||||
// 16 new secret key: not implemented
|
||||
|
||||
fprs.push(result.fingerprint);
|
||||
infos[result.fingerprint] = {
|
||||
@ -309,7 +307,7 @@ export class GPGME_Keyring {
|
||||
}
|
||||
let resultset = [];
|
||||
if (prepare_sync === true){
|
||||
me.getKeys(fprs, true).then(function(result){
|
||||
me.getKeys(fprs, true).then(function (result){
|
||||
for (let i=0; i < result.length; i++) {
|
||||
resultset.push({
|
||||
key: result[i],
|
||||
@ -318,8 +316,8 @@ export class GPGME_Keyring {
|
||||
status: infos[result[i].fingerprint].status
|
||||
});
|
||||
}
|
||||
resolve({Keys:resultset,summary: summary});
|
||||
}, function(error){
|
||||
resolve({ Keys:resultset,summary: summary });
|
||||
}, function (error){
|
||||
reject(error);
|
||||
});
|
||||
} else {
|
||||
@ -330,10 +328,10 @@ export class GPGME_Keyring {
|
||||
status: infos[fprs[i]].status
|
||||
});
|
||||
}
|
||||
resolve({Keys:resultset,summary:summary});
|
||||
resolve({ Keys:resultset,summary:summary });
|
||||
}
|
||||
|
||||
}, function(error){
|
||||
}, function (error){
|
||||
reject(error);
|
||||
});
|
||||
|
||||
@ -351,7 +349,7 @@ export class GPGME_Keyring {
|
||||
* @async
|
||||
* @static
|
||||
*/
|
||||
deleteKey(fingerprint){
|
||||
deleteKey (fingerprint){
|
||||
if (isFingerprint(fingerprint) === true) {
|
||||
let key = createKey(fingerprint);
|
||||
return key.delete();
|
||||
@ -375,16 +373,17 @@ export class GPGME_Keyring {
|
||||
* @return {Promise<Key|GPGME_Error>}
|
||||
* @async
|
||||
*/
|
||||
generateKey(userId, algo = 'default', expires){
|
||||
generateKey (userId, algo = 'default', expires){
|
||||
if (
|
||||
typeof(userId) !== 'string' ||
|
||||
typeof (userId) !== 'string' ||
|
||||
// eslint-disable-next-line no-use-before-define
|
||||
supportedKeyAlgos.indexOf(algo) < 0 ||
|
||||
(expires && !(expires instanceof Date))
|
||||
){
|
||||
return Promise.reject(gpgme_error('PARAM_WRONG'));
|
||||
}
|
||||
let me = this;
|
||||
return new Promise(function(resolve, reject){
|
||||
return new Promise(function (resolve, reject){
|
||||
let msg = createMessage('createkey');
|
||||
msg.setParameter('userid', userId);
|
||||
msg.setParameter('algo', algo );
|
||||
@ -394,15 +393,15 @@ export class GPGME_Keyring {
|
||||
} else {
|
||||
msg.setParameter('expires', 0);
|
||||
}
|
||||
msg.post().then(function(response){
|
||||
msg.post().then(function (response){
|
||||
me.getKeys(response.fingerprint, true).then(
|
||||
// TODO prepare_sync?
|
||||
function(result){
|
||||
function (result){
|
||||
resolve(result);
|
||||
}, function(error){
|
||||
}, function (error){
|
||||
reject(error);
|
||||
});
|
||||
}, function(error) {
|
||||
}, function (error) {
|
||||
reject(error);
|
||||
});
|
||||
});
|
||||
|
@ -31,8 +31,8 @@ import { Connection } from './Connection';
|
||||
* @param {String} operation
|
||||
* @returns {GPGME_Message|GPGME_Error} The Message object
|
||||
*/
|
||||
export function createMessage(operation){
|
||||
if (typeof(operation) !== 'string'){
|
||||
export function createMessage (operation){
|
||||
if (typeof (operation) !== 'string'){
|
||||
return gpgme_error('PARAM_WRONG');
|
||||
}
|
||||
if (permittedOperations.hasOwnProperty(operation)){
|
||||
@ -51,7 +51,7 @@ export function createMessage(operation){
|
||||
*/
|
||||
export class GPGME_Message {
|
||||
|
||||
constructor(operation){
|
||||
constructor (operation){
|
||||
this._msg = {
|
||||
op: operation,
|
||||
chunksize: 1023* 1024
|
||||
@ -59,7 +59,7 @@ export class GPGME_Message {
|
||||
this._expected = null;
|
||||
}
|
||||
|
||||
get operation(){
|
||||
get operation (){
|
||||
return this._msg.op;
|
||||
}
|
||||
|
||||
@ -69,7 +69,7 @@ export class GPGME_Message {
|
||||
}
|
||||
}
|
||||
|
||||
get expected() {
|
||||
get expected () {
|
||||
return this._expected;
|
||||
}
|
||||
/**
|
||||
@ -81,7 +81,7 @@ export class GPGME_Message {
|
||||
* will not encounter problems, larger messages will be received in
|
||||
* chunks. If the value is not explicitly specified, 1023 KB is used.
|
||||
*/
|
||||
set chunksize(value){
|
||||
set chunksize (value){
|
||||
if (
|
||||
Number.isInteger(value) &&
|
||||
value > 10 * 1024 &&
|
||||
@ -91,7 +91,7 @@ export class GPGME_Message {
|
||||
}
|
||||
}
|
||||
|
||||
get chunksize(){
|
||||
get chunksize (){
|
||||
return this._msg.chunksize;
|
||||
}
|
||||
|
||||
@ -100,7 +100,7 @@ export class GPGME_Message {
|
||||
* @returns {Object|null} Object to be posted to gnupg, or null if
|
||||
* incomplete
|
||||
*/
|
||||
get message() {
|
||||
get message () {
|
||||
if (this.isComplete() === true){
|
||||
return this._msg;
|
||||
} else {
|
||||
@ -116,7 +116,7 @@ export class GPGME_Message {
|
||||
* @returns {Boolean} If the parameter was set successfully
|
||||
*/
|
||||
setParameter ( param,value ){
|
||||
if (!param || typeof(param) !== 'string'){
|
||||
if (!param || typeof (param) !== 'string'){
|
||||
return gpgme_error('PARAM_WRONG');
|
||||
}
|
||||
let po = permittedOperations[this._msg.op];
|
||||
@ -132,10 +132,10 @@ export class GPGME_Message {
|
||||
return gpgme_error('PARAM_WRONG');
|
||||
}
|
||||
// check incoming value for correctness
|
||||
let checktype = function(val){
|
||||
switch(typeof(val)){
|
||||
let checktype = function (val){
|
||||
switch (typeof (val)){
|
||||
case 'string':
|
||||
if (poparam.allowed.indexOf(typeof(val)) >= 0
|
||||
if (poparam.allowed.indexOf(typeof (val)) >= 0
|
||||
&& val.length > 0) {
|
||||
return true;
|
||||
}
|
||||
@ -199,7 +199,7 @@ export class GPGME_Message {
|
||||
* all 'required' parameters according to {@link permittedOperations}.
|
||||
* @returns {Boolean} true if message is complete.
|
||||
*/
|
||||
isComplete(){
|
||||
isComplete (){
|
||||
if (!this._msg.op){
|
||||
return false;
|
||||
}
|
||||
@ -220,13 +220,13 @@ export class GPGME_Message {
|
||||
*/
|
||||
post (){
|
||||
let me = this;
|
||||
return new Promise(function(resolve, reject) {
|
||||
return new Promise(function (resolve, reject) {
|
||||
if (me.isComplete() === true) {
|
||||
|
||||
let conn = new Connection;
|
||||
conn.post(me).then(function(response) {
|
||||
conn.post(me).then(function (response) {
|
||||
resolve(response);
|
||||
}, function(reason) {
|
||||
}, function (reason) {
|
||||
reject(reason);
|
||||
});
|
||||
}
|
||||
|
@ -30,25 +30,27 @@ import { gpgme_error } from './Errors';
|
||||
* {@link expNote}.
|
||||
* @returns {GPGME_Signature|GPGME_Error} Signature Object
|
||||
*/
|
||||
export function createSignature(sigObject){
|
||||
export function createSignature (sigObject){
|
||||
if (
|
||||
typeof(sigObject) !=='object' ||
|
||||
typeof (sigObject) !=='object' ||
|
||||
!sigObject.hasOwnProperty('summary') ||
|
||||
!sigObject.hasOwnProperty('fingerprint') ||
|
||||
!sigObject.hasOwnProperty('timestamp')
|
||||
//TODO check if timestamp is mandatory in specification
|
||||
// TODO check if timestamp is mandatory in specification
|
||||
){
|
||||
return gpgme_error('SIG_WRONG');
|
||||
}
|
||||
let keys = Object.keys(sigObject);
|
||||
for (let i=0; i< keys.length; i++){
|
||||
if ( typeof(sigObject[keys[i]]) !== expKeys[keys[i]] ){
|
||||
// eslint-disable-next-line no-use-before-define
|
||||
if ( typeof (sigObject[keys[i]]) !== expKeys[keys[i]] ){
|
||||
return gpgme_error('SIG_WRONG');
|
||||
}
|
||||
}
|
||||
let sumkeys = Object.keys(sigObject.summary);
|
||||
for (let i=0; i< sumkeys.length; i++){
|
||||
if ( typeof(sigObject.summary[sumkeys[i]]) !== expSum[sumkeys[i]] ){
|
||||
// eslint-disable-next-line no-use-before-define
|
||||
if ( typeof (sigObject.summary[sumkeys[i]]) !== expSum[sumkeys[i]] ){
|
||||
return gpgme_error('SIG_WRONG');
|
||||
}
|
||||
}
|
||||
@ -60,7 +62,8 @@ export function createSignature(sigObject){
|
||||
let notation = sigObject.notations[i];
|
||||
let notekeys = Object.keys(notation);
|
||||
for (let j=0; j < notekeys.length; j++){
|
||||
if ( typeof(notation[notekeys[j]]) !== expNote[notekeys[j]] ){
|
||||
// eslint-disable-next-line no-use-before-define
|
||||
if ( typeof (notation[notekeys[j]]) !== expNote[notekeys[j]] ){
|
||||
return gpgme_error('SIG_WRONG');
|
||||
}
|
||||
}
|
||||
@ -81,10 +84,10 @@ export function createSignature(sigObject){
|
||||
*/
|
||||
class GPGME_Signature {
|
||||
|
||||
constructor(sigObject){
|
||||
constructor (sigObject){
|
||||
this._rawSigObject = sigObject;
|
||||
}
|
||||
get fingerprint(){
|
||||
get fingerprint (){
|
||||
if (!this._rawSigObject.fingerprint){
|
||||
return gpgme_error('SIG_WRONG');
|
||||
} else {
|
||||
@ -97,7 +100,7 @@ class GPGME_Signature {
|
||||
* signature does not expire
|
||||
* @returns {Date | null}
|
||||
*/
|
||||
get expiration(){
|
||||
get expiration (){
|
||||
if (!this._rawSigObject.exp_timestamp){
|
||||
return null;
|
||||
}
|
||||
@ -130,7 +133,7 @@ class GPGME_Signature {
|
||||
* for details on the values.
|
||||
* @returns {Object} Object with boolean properties
|
||||
*/
|
||||
get errorDetails(){
|
||||
get errorDetails (){
|
||||
let properties = ['revoked', 'key-expired', 'sig-expired',
|
||||
'key-missing', 'crl-missing', 'crl-too-old', 'bad-policy',
|
||||
'sys-error'];
|
||||
|
@ -84,7 +84,7 @@ import { createSignature } from './Signature';
|
||||
*/
|
||||
export class GpgME {
|
||||
|
||||
constructor(){
|
||||
constructor (){
|
||||
this._Keyring = null;
|
||||
}
|
||||
|
||||
@ -92,7 +92,7 @@ export class GpgME {
|
||||
* setter for {@link setKeyring}.
|
||||
* @param {GPGME_Keyring} keyring A Keyring to use
|
||||
*/
|
||||
set Keyring(keyring){
|
||||
set Keyring (keyring){
|
||||
if (keyring && keyring instanceof GPGME_Keyring){
|
||||
this._Keyring = keyring;
|
||||
}
|
||||
@ -100,7 +100,7 @@ export class GpgME {
|
||||
/**
|
||||
* Accesses the {@link GPGME_Keyring}.
|
||||
*/
|
||||
get Keyring(){
|
||||
get Keyring (){
|
||||
if (!this._Keyring){
|
||||
this._Keyring = new GPGME_Keyring;
|
||||
}
|
||||
@ -188,9 +188,9 @@ export class GpgME {
|
||||
if (base64 === true){
|
||||
msg.setParameter('base64', true);
|
||||
}
|
||||
return new Promise(function(resolve, reject){
|
||||
msg.post().then(function(result){
|
||||
let _result = {data: result.data};
|
||||
return new Promise(function (resolve, reject){
|
||||
msg.post().then(function (result){
|
||||
let _result = { data: result.data };
|
||||
_result.base64 = result.base64 ? true: false;
|
||||
_result.is_mime = result.is_mime ? true: false;
|
||||
if (result.file_name){
|
||||
@ -206,7 +206,7 @@ export class GpgME {
|
||||
result.signatures);
|
||||
}
|
||||
resolve(_result);
|
||||
}, function(error){
|
||||
}, function (error){
|
||||
reject(error);
|
||||
});
|
||||
});
|
||||
@ -240,14 +240,14 @@ export class GpgME {
|
||||
}
|
||||
msg.setParameter('mode', mode);
|
||||
putData(msg, data);
|
||||
return new Promise(function(resolve,reject) {
|
||||
return new Promise(function (resolve,reject) {
|
||||
if (mode ==='detached'){
|
||||
msg.expected ='base64';
|
||||
}
|
||||
msg.post().then( function(message) {
|
||||
msg.post().then( function (message) {
|
||||
if (mode === 'clearsign'){
|
||||
resolve({
|
||||
data: message.data}
|
||||
data: message.data }
|
||||
);
|
||||
} else if (mode === 'detached') {
|
||||
resolve({
|
||||
@ -255,7 +255,7 @@ export class GpgME {
|
||||
signature: message.data
|
||||
});
|
||||
}
|
||||
}, function(error){
|
||||
}, function (error){
|
||||
reject(error);
|
||||
});
|
||||
});
|
||||
@ -278,7 +278,7 @@ export class GpgME {
|
||||
return Promise.reject(dt);
|
||||
}
|
||||
if (signature){
|
||||
if (typeof(signature)!== 'string'){
|
||||
if (typeof (signature)!== 'string'){
|
||||
return Promise.reject(gpgme_error('PARAM_WRONG'));
|
||||
} else {
|
||||
msg.setParameter('signature', signature);
|
||||
@ -287,7 +287,7 @@ export class GpgME {
|
||||
if (base64 === true){
|
||||
msg.setParameter('base64', true);
|
||||
}
|
||||
return new Promise(function(resolve, reject){
|
||||
return new Promise(function (resolve, reject){
|
||||
msg.post().then(function (message){
|
||||
if (!message.info || !message.info.signatures){
|
||||
reject(gpgme_error('SIG_NO_SIGS'));
|
||||
@ -301,7 +301,7 @@ export class GpgME {
|
||||
_result.data = message.data;
|
||||
resolve(_result);
|
||||
}
|
||||
}, function(error){
|
||||
}, function (error){
|
||||
reject(error);
|
||||
});
|
||||
});
|
||||
@ -316,20 +316,20 @@ export class GpgME {
|
||||
* @returns {undefined| GPGME_Error} Error if not successful, nothing otherwise
|
||||
* @private
|
||||
*/
|
||||
function putData(message, data){
|
||||
function putData (message, data){
|
||||
if (!message || !(message instanceof GPGME_Message)) {
|
||||
return gpgme_error('PARAM_WRONG');
|
||||
}
|
||||
if (!data){
|
||||
return gpgme_error('PARAM_WRONG');
|
||||
} else if (typeof(data) === 'string') {
|
||||
} else if (typeof (data) === 'string') {
|
||||
message.setParameter('data', data);
|
||||
} else if (
|
||||
typeof(data) === 'object' &&
|
||||
typeof(data.getText) === 'function'
|
||||
typeof (data) === 'object' &&
|
||||
typeof (data.getText) === 'function'
|
||||
){
|
||||
let txt = data.getText();
|
||||
if (typeof(txt) === 'string'){
|
||||
if (typeof (txt) === 'string'){
|
||||
message.setParameter('data', txt);
|
||||
} else {
|
||||
return gpgme_error('PARAM_WRONG');
|
||||
@ -345,7 +345,7 @@ function putData(message, data){
|
||||
* @param {Array<Object>} sigs
|
||||
* @returns {signatureDetails} Details about the signatures
|
||||
*/
|
||||
function collectSignatures(sigs){
|
||||
function collectSignatures (sigs){
|
||||
if (!Array.isArray(sigs)){
|
||||
return gpgme_error('SIG_NO_SIGS');
|
||||
}
|
||||
|
@ -32,21 +32,21 @@ import { Connection } from './Connection';
|
||||
*
|
||||
* @async
|
||||
*/
|
||||
function init(){
|
||||
return new Promise(function(resolve, reject){
|
||||
function init (){
|
||||
return new Promise(function (resolve, reject){
|
||||
const connection = new Connection;
|
||||
connection.checkConnection(false).then(
|
||||
function(result){
|
||||
function (result){
|
||||
if (result === true) {
|
||||
resolve(new GpgME());
|
||||
} else {
|
||||
reject(gpgme_error('CONN_NO_CONNECT'));
|
||||
}
|
||||
}, function(){ //unspecific connection error. Should not happen
|
||||
}, function (){ // unspecific connection error. Should not happen
|
||||
reject(gpgme_error('CONN_NO_CONNECT'));
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
const exportvalue = {init:init};
|
||||
const exportvalue = { init:init };
|
||||
export default exportvalue;
|
@ -48,7 +48,7 @@
|
||||
*/
|
||||
export const permittedOperations = {
|
||||
encrypt: {
|
||||
pinentry: true, //TODO only with signing_keys
|
||||
pinentry: true, // TODO only with signing_keys
|
||||
required: {
|
||||
'keys': {
|
||||
allowed: ['string'],
|
||||
@ -137,7 +137,7 @@ export const permittedOperations = {
|
||||
pinentry: true,
|
||||
required: {
|
||||
'data': {
|
||||
allowed: ['string']},
|
||||
allowed: ['string'] },
|
||||
'keys': {
|
||||
allowed: ['string'],
|
||||
array_allowed: true
|
||||
@ -337,7 +337,7 @@ export const permittedOperations = {
|
||||
},
|
||||
answer: {
|
||||
type: [''],
|
||||
data: {'fingerprint': 'string'}
|
||||
data: { 'fingerprint': 'string' }
|
||||
}
|
||||
},
|
||||
|
||||
@ -365,9 +365,9 @@ export const permittedOperations = {
|
||||
data: 'string',
|
||||
base64:'boolean',
|
||||
info: 'object'
|
||||
// file_name: Optional string of the plaintext file name.
|
||||
// is_mime: Boolean if the messages claims it is MIME.
|
||||
// signatures: Array of signatures
|
||||
// info.file_name: Optional string of the plaintext file name.
|
||||
// info.is_mime: Boolean if the messages claims it is MIME.
|
||||
// info.signatures: Array of signatures
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@ -1,4 +1,4 @@
|
||||
import {createKey} from './src/Key';
|
||||
import { createKey } from './src/Key';
|
||||
|
||||
export const helper_params = {
|
||||
validLongId: '0A0A0A0A0A0A0A0A',
|
||||
@ -9,8 +9,8 @@ export const helper_params = {
|
||||
validFingerprints: ['9A9A7A7A8A9A9A7A7A8A9A9A7A7A8A9A9A7A7A8A',
|
||||
'9AAE7A338A9A9A7A7A8A9A9A7A7A8A9A9A7A7DDA'],
|
||||
invalidLongId: '9A9A7A7A8A9A9A7A7A8A',
|
||||
invalidFingerprints: [{hello:'World'}, ['kekekeke'], new Uint32Array(40)],
|
||||
invalidKeyArray: {curiosity:'uncat'},
|
||||
invalidFingerprints: [{ hello:'World' }, ['kekekeke'], new Uint32Array(40)],
|
||||
invalidKeyArray: { curiosity:'uncat' },
|
||||
invalidKeyArray_OneBad: [
|
||||
createKey('D41735B91236FDB882048C5A2301635EEFF0CB05'),
|
||||
'E1D18E6E994FA9FE9360Bx0E687B940FEFEB095A',
|
||||
@ -18,7 +18,7 @@ export const helper_params = {
|
||||
invalidErrorCode: 'Please type in all your passwords.',
|
||||
validGPGME_Key: createKey('D41735B91236FDB882048C5A2301635EEFF0CB05', true),
|
||||
valid_openpgplike: { primaryKey: {
|
||||
getFingerprint: function(){
|
||||
getFingerprint: function (){
|
||||
return '85DE2A8BA5A5AB3A8A7BE2000B8AED24D7534BC2';}
|
||||
}
|
||||
}
|
||||
|
@ -18,8 +18,8 @@
|
||||
* SPDX-License-Identifier: LGPL-2.1+
|
||||
*/
|
||||
|
||||
import './node_modules/mocha/mocha'; /*global mocha, it, describe*/
|
||||
import './node_modules/chai/chai';/*global chai*/
|
||||
import './node_modules/mocha/mocha'; /* global mocha, it, describe*/
|
||||
import './node_modules/chai/chai';/* global chai*/
|
||||
import { helper_params as hp } from './unittest_inputvalues';
|
||||
import { message_params as mp } from './unittest_inputvalues';
|
||||
import { whatever_params as wp } from './unittest_inputvalues';
|
||||
@ -29,18 +29,18 @@ import { gpgme_error } from './src/Errors';
|
||||
import { toKeyIdArray , isFingerprint } from './src/Helpers';
|
||||
import { createKey } from './src/Key';
|
||||
import { GPGME_Keyring } from './src/Keyring';
|
||||
import {GPGME_Message, createMessage} from './src/Message';
|
||||
import { GPGME_Message, createMessage } from './src/Message';
|
||||
|
||||
mocha.setup('bdd');
|
||||
const expect = chai.expect;
|
||||
chai.config.includeStack = true;
|
||||
|
||||
function unittests (){
|
||||
describe('Connection testing', function(){
|
||||
describe('Connection testing', function (){
|
||||
|
||||
it('Connecting', function(done) {
|
||||
it('Connecting', function (done) {
|
||||
let conn0 = new Connection;
|
||||
conn0.checkConnection().then(function(answer) {
|
||||
conn0.checkConnection().then(function (answer) {
|
||||
expect(answer).to.not.be.empty;
|
||||
expect(answer.gpgme).to.not.be.undefined;
|
||||
expect(answer.gpgme).to.be.a('string');
|
||||
@ -52,12 +52,12 @@ function unittests (){
|
||||
|
||||
});
|
||||
|
||||
it('Disconnecting', function(done) {
|
||||
it('Disconnecting', function (done) {
|
||||
let conn0 = new Connection;
|
||||
conn0.checkConnection(false).then(function(answer) {
|
||||
conn0.checkConnection(false).then(function (answer) {
|
||||
expect(answer).to.be.true;
|
||||
conn0.disconnect();
|
||||
conn0.checkConnection(false).then(function(result) {
|
||||
conn0.checkConnection(false).then(function (result) {
|
||||
expect(result).to.be.false;
|
||||
done();
|
||||
});
|
||||
@ -65,9 +65,9 @@ function unittests (){
|
||||
});
|
||||
});
|
||||
|
||||
describe('Error Object handling', function(){
|
||||
describe('Error Object handling', function (){
|
||||
// TODO: new GPGME_Error codes
|
||||
it('check the Timeout error', function(){
|
||||
it('check the Timeout error', function (){
|
||||
let test0 = gpgme_error('CONN_TIMEOUT');
|
||||
|
||||
expect(test0).to.be.an.instanceof(Error);
|
||||
@ -75,7 +75,7 @@ function unittests (){
|
||||
});
|
||||
|
||||
it('Error Object returns generic code if code is not listed',
|
||||
function(){
|
||||
function (){
|
||||
let test0 = gpgme_error(hp.invalidErrorCode);
|
||||
|
||||
expect(test0).to.be.an.instanceof(Error);
|
||||
@ -83,22 +83,22 @@ function unittests (){
|
||||
}
|
||||
);
|
||||
|
||||
it('Warnings like PARAM_IGNORED should not return errors', function(){
|
||||
it('Warnings like PARAM_IGNORED should not return errors', function (){
|
||||
let test0 = gpgme_error('PARAM_IGNORED');
|
||||
|
||||
expect(test0).to.be.null;
|
||||
});
|
||||
});
|
||||
|
||||
describe('Fingerprint checking', function(){
|
||||
describe('Fingerprint checking', function (){
|
||||
|
||||
it('isFingerprint(): valid Fingerprint', function(){
|
||||
it('isFingerprint(): valid Fingerprint', function (){
|
||||
let test0 = isFingerprint(hp.validFingerprint);
|
||||
|
||||
expect(test0).to.be.true;
|
||||
});
|
||||
|
||||
it('isFingerprint(): invalid Fingerprints', function(){
|
||||
it('isFingerprint(): invalid Fingerprints', function (){
|
||||
for (let i=0; i < hp.invalidFingerprints.length; i++){
|
||||
let test0 = isFingerprint(hp.invalidFingerprints[i]);
|
||||
|
||||
@ -107,16 +107,16 @@ function unittests (){
|
||||
});
|
||||
});
|
||||
|
||||
describe('toKeyIdArray() (converting input to fingerprint)', function(){
|
||||
describe('toKeyIdArray() (converting input to fingerprint)', function (){
|
||||
|
||||
it('Correct fingerprint string', function(){
|
||||
it('Correct fingerprint string', function (){
|
||||
let test0 = toKeyIdArray(hp.validFingerprint);
|
||||
|
||||
expect(test0).to.be.an('array');
|
||||
expect(test0).to.include(hp.validFingerprint);
|
||||
});
|
||||
|
||||
it('openpgpjs-like object', function(){
|
||||
it('openpgpjs-like object', function (){
|
||||
let test0 = toKeyIdArray(hp.valid_openpgplike);
|
||||
|
||||
expect(test0).to.be.an('array').with.lengthOf(1);
|
||||
@ -124,33 +124,33 @@ function unittests (){
|
||||
hp.valid_openpgplike.primaryKey.getFingerprint());
|
||||
});
|
||||
|
||||
it('Array of valid inputs', function(){
|
||||
it('Array of valid inputs', function (){
|
||||
let test0 = toKeyIdArray(hp.validKeys);
|
||||
expect(test0).to.be.an('array');
|
||||
expect(test0).to.have.lengthOf(hp.validKeys.length);
|
||||
});
|
||||
|
||||
it('Incorrect inputs', function(){
|
||||
it('Incorrect inputs', function (){
|
||||
|
||||
it('valid Long ID', function(){
|
||||
it('valid Long ID', function (){
|
||||
let test0 = toKeyIdArray(hp.validLongId);
|
||||
|
||||
expect(test0).to.be.empty;
|
||||
});
|
||||
|
||||
it('invalidFingerprint', function(){
|
||||
it('invalidFingerprint', function (){
|
||||
let test0 = toKeyIdArray(hp.invalidFingerprint);
|
||||
|
||||
expect(test0).to.be.empty;
|
||||
});
|
||||
|
||||
it('invalidKeyArray', function(){
|
||||
it('invalidKeyArray', function (){
|
||||
let test0 = toKeyIdArray(hp.invalidKeyArray);
|
||||
|
||||
expect(test0).to.be.empty;
|
||||
});
|
||||
|
||||
it('Partially invalid array', function(){
|
||||
it('Partially invalid array', function (){
|
||||
let test0 = toKeyIdArray(hp.invalidKeyArray_OneBad);
|
||||
|
||||
expect(test0).to.be.an('array');
|
||||
@ -160,10 +160,10 @@ function unittests (){
|
||||
});
|
||||
});
|
||||
|
||||
describe('GPGME_Key', function(){
|
||||
it('Key has data after a first refresh', function(done) {
|
||||
describe('GPGME_Key', function (){
|
||||
it('Key has data after a first refresh', function (done) {
|
||||
let key = createKey(kp.validKeyFingerprint);
|
||||
key.refreshKey().then(function(key2){
|
||||
key.refreshKey().then(function (key2){
|
||||
expect(key2.get).to.be.a('function');
|
||||
for (let i=0; i < kp.validKeyProperties.length; i++) {
|
||||
let prop = key2.get(kp.validKeyProperties[i]);
|
||||
@ -181,7 +181,7 @@ function unittests (){
|
||||
|
||||
it('Non-cached key async data retrieval', function (done){
|
||||
let key = createKey(kp.validKeyFingerprint, true);
|
||||
key.get('can_authenticate').then(function(result){
|
||||
key.get('can_authenticate').then(function (result){
|
||||
expect(result).to.be.a('boolean');
|
||||
done();
|
||||
});
|
||||
@ -189,7 +189,7 @@ function unittests (){
|
||||
|
||||
it('Non-cached key async armored Key', function (done){
|
||||
let key = createKey(kp.validKeyFingerprint, true);
|
||||
key.get('armored').then(function(result){
|
||||
key.get('armored').then(function (result){
|
||||
expect(result).to.be.a('string');
|
||||
expect(result).to.include('KEY BLOCK-----');
|
||||
done();
|
||||
@ -198,7 +198,7 @@ function unittests (){
|
||||
|
||||
it('Non-cached key async hasSecret', function (done){
|
||||
let key = createKey(kp.validKeyFingerprint, true);
|
||||
key.get('hasSecret').then(function(result){
|
||||
key.get('hasSecret').then(function (result){
|
||||
expect(result).to.be.a('boolean');
|
||||
done();
|
||||
});
|
||||
@ -206,24 +206,24 @@ function unittests (){
|
||||
|
||||
it('Non-cached key async hasSecret (no secret in Key)', function (done){
|
||||
let key = createKey(kp.validFingerprintNoSecret, true);
|
||||
key.get('hasSecret').then(function(result){
|
||||
key.get('hasSecret').then(function (result){
|
||||
expect(result).to.be.a('boolean');
|
||||
expect(result).to.equal(false);
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
it('Querying non-existing Key returns an error', function(done) {
|
||||
it('Querying non-existing Key returns an error', function (done) {
|
||||
let key = createKey(kp.invalidKeyFingerprint);
|
||||
key.refreshKey().then(function(){},
|
||||
function(error){
|
||||
key.refreshKey().then(function (){},
|
||||
function (error){
|
||||
expect(error).to.be.an.instanceof(Error);
|
||||
expect(error.code).to.equal('KEY_NOKEY');
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
it('createKey returns error if parameters are wrong', function(){
|
||||
it('createKey returns error if parameters are wrong', function (){
|
||||
for (let i=0; i< 4; i++){
|
||||
let key0 = createKey(wp.four_invalid_params[i]);
|
||||
expect(key0).to.be.an.instanceof(Error);
|
||||
@ -248,18 +248,18 @@ function unittests (){
|
||||
// });
|
||||
});
|
||||
|
||||
describe('GPGME_Keyring', function(){
|
||||
describe('GPGME_Keyring', function (){
|
||||
|
||||
it('correct Keyring initialization', function(){
|
||||
it('correct Keyring initialization', function (){
|
||||
let keyring = new GPGME_Keyring;
|
||||
expect(keyring).to.be.an.instanceof(GPGME_Keyring);
|
||||
expect(keyring.getKeys).to.be.a('function');
|
||||
});
|
||||
|
||||
it('Loading Keys from Keyring, to be used synchronously',
|
||||
function(done){
|
||||
function (done){
|
||||
let keyring = new GPGME_Keyring;
|
||||
keyring.getKeys(null, true).then(function(result){
|
||||
keyring.getKeys(null, true).then(function (result){
|
||||
expect(result).to.be.an('array');
|
||||
expect(result[0].get('hasSecret')).to.be.a('boolean');
|
||||
done();
|
||||
@ -268,10 +268,10 @@ function unittests (){
|
||||
);
|
||||
|
||||
it('Loading specific Key from Keyring, to be used synchronously',
|
||||
function(done){
|
||||
function (done){
|
||||
let keyring = new GPGME_Keyring;
|
||||
keyring.getKeys(kp.validKeyFingerprint, true).then(
|
||||
function(result){
|
||||
function (result){
|
||||
expect(result).to.be.an('array');
|
||||
expect(result[0].get('hasSecret')).to.be.a('boolean');
|
||||
done();
|
||||
@ -280,10 +280,10 @@ function unittests (){
|
||||
}
|
||||
);
|
||||
|
||||
it('Querying non-existing Key from Keyring', function(done){
|
||||
it('Querying non-existing Key from Keyring', function (done){
|
||||
let keyring = new GPGME_Keyring;
|
||||
keyring.getKeys(kp.invalidKeyFingerprint, true).then(
|
||||
function(result){
|
||||
function (result){
|
||||
expect(result).to.be.an('array');
|
||||
expect(result.length).to.equal(0);
|
||||
done();
|
||||
@ -293,16 +293,16 @@ function unittests (){
|
||||
|
||||
});
|
||||
|
||||
describe('GPGME_Message', function(){
|
||||
describe('GPGME_Message', function (){
|
||||
|
||||
it('creating encrypt Message', function(){
|
||||
it('creating encrypt Message', function (){
|
||||
let test0 = createMessage('encrypt');
|
||||
|
||||
expect(test0).to.be.an.instanceof(GPGME_Message);
|
||||
expect(test0.isComplete()).to.be.false;
|
||||
});
|
||||
|
||||
it('Message is complete after setting mandatory data', function(){
|
||||
it('Message is complete after setting mandatory data', function (){
|
||||
let test0 = createMessage('encrypt');
|
||||
test0.setParameter('data', mp.valid_encrypt_data);
|
||||
test0.setParameter('keys', hp.validFingerprints);
|
||||
@ -310,14 +310,14 @@ function unittests (){
|
||||
expect(test0.isComplete()).to.be.true;
|
||||
});
|
||||
|
||||
it('Message is not complete after mandatory data is empty', function(){
|
||||
it('Message is not complete after mandatory data is empty', function (){
|
||||
let test0 = createMessage('encrypt');
|
||||
test0.setParameter('data', '');
|
||||
test0.setParameter('keys', hp.validFingerprints);
|
||||
expect(test0.isComplete()).to.be.false;
|
||||
});
|
||||
|
||||
it('Complete Message contains the data that was set', function(){
|
||||
it('Complete Message contains the data that was set', function (){
|
||||
let test0 = createMessage('encrypt');
|
||||
test0.setParameter('data', mp.valid_encrypt_data);
|
||||
test0.setParameter('keys', hp.validFingerprints);
|
||||
@ -330,20 +330,20 @@ function unittests (){
|
||||
mp.valid_encrypt_data);
|
||||
});
|
||||
|
||||
it ('Not accepting non-allowed operation', function(){
|
||||
it ('Not accepting non-allowed operation', function (){
|
||||
let test0 = createMessage(mp.invalid_op_action);
|
||||
|
||||
expect(test0).to.be.an.instanceof(Error);
|
||||
expect(test0.code).to.equal('MSG_WRONG_OP');
|
||||
});
|
||||
it('Not accepting wrong parameter type', function(){
|
||||
it('Not accepting wrong parameter type', function (){
|
||||
let test0 = createMessage(mp.invalid_op_type);
|
||||
|
||||
expect(test0).to.be.an.instanceof(Error);
|
||||
expect(test0.code).to.equal('PARAM_WRONG');
|
||||
});
|
||||
|
||||
it('Not accepting wrong parameter name', function(){
|
||||
it('Not accepting wrong parameter name', function (){
|
||||
let test0 = createMessage(mp.invalid_param_test.valid_op);
|
||||
for (let i=0;
|
||||
i < mp.invalid_param_test.invalid_param_names.length; i++){
|
||||
@ -356,7 +356,7 @@ function unittests (){
|
||||
}
|
||||
});
|
||||
|
||||
it('Not accepting wrong parameter value', function(){
|
||||
it('Not accepting wrong parameter value', function (){
|
||||
let test0 = createMessage(mp.invalid_param_test.valid_op);
|
||||
for (let j=0;
|
||||
j < mp.invalid_param_test.invalid_values_0.length; j++){
|
||||
@ -372,4 +372,4 @@ function unittests (){
|
||||
|
||||
}
|
||||
|
||||
export default {unittests};
|
||||
export default { unittests };
|
Loading…
Reference in New Issue
Block a user