js: add and apply eslint rules

--

* mainly spacing, see .eslintrc.json for details
This commit is contained in:
Maximilian Krambach 2018-08-20 15:12:01 +02:00
parent 1954d27be8
commit dd32daad0b
25 changed files with 421 additions and 397 deletions

View File

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

View File

@ -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');

View File

@ -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(

View File

@ -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();

View File

@ -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();
});

View File

@ -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:

View File

@ -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;
};

View File

@ -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);

View File

@ -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();
});

View File

@ -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');

View File

@ -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;

View File

@ -23,7 +23,7 @@
/* global chrome */
document.addEventListener('DOMContentLoaded', function() {
document.addEventListener('DOMContentLoaded', function () {
chrome.tabs.create({
url: './mainui.html'
});

View File

@ -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);
});
});

View File

@ -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(''));

View File

@ -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;
}
}

View File

@ -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)){

View File

@ -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));
});
}

View File

@ -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);
});
});

View File

@ -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);
});
}

View File

@ -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'];

View File

@ -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');
}

View File

@ -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;

View File

@ -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
}
}
},

View File

@ -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';}
}
}

View File

@ -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 };