js: add with-sec-fprs to getKeysArmored
--
* Reflects the changes made to gpgme-json in commit
6cc842c9aa
.
- getKeysArmored now returns an object with property 'armored' being
the exported armored block, and an (optional) array of fingerprint
strings for those keys that can be used in sign/encrypt operations
as property 'secret_fprs'. With this, extensions such as mailvelope
will be able to bulk fetch all necessary key information in one
request.
This commit is contained in:
parent
4015f5b498
commit
30bb549046
@ -22,7 +22,7 @@
|
|||||||
* Raimund Renkert <rrenkert@intevation.de>
|
* Raimund Renkert <rrenkert@intevation.de>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* global describe, it, expect, Gpgmejs, ImportablePublicKey */
|
/* global describe, it, expect, Gpgmejs, ImportablePublicKey, inputvalues */
|
||||||
|
|
||||||
describe('Key importing', function () {
|
describe('Key importing', function () {
|
||||||
it('Prepare test Key (deleting it from gnupg, if present)', function(done){
|
it('Prepare test Key (deleting it from gnupg, if present)', function(done){
|
||||||
@ -83,5 +83,30 @@ describe('Key importing', function () {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
it('exporting armored Key with getKeysArmored', function (done) {
|
||||||
|
let prm = Gpgmejs.init();
|
||||||
|
const fpr = inputvalues.encrypt.good.fingerprint;
|
||||||
|
prm.then(function (context) {
|
||||||
|
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;
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
it('exporting armored Key (including secret fingerprints) with '
|
||||||
|
+ 'getKeysArmored', function (done) {
|
||||||
|
let prm = Gpgmejs.init();
|
||||||
|
const fpr = inputvalues.encrypt.good.fingerprint;
|
||||||
|
prm.then(function (context) {
|
||||||
|
context.Keyring.getKeysArmored(fpr, 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');
|
||||||
|
expect(result.secret_fprs[0]).to.equal(fpr);
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
@ -107,26 +107,46 @@ export class GPGME_Keyring {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @typedef {Object} exportResult The result of a getKeysArmored operation.
|
||||||
|
* @property {String} armored The public Key(s) as armored block. Note that
|
||||||
|
* the result is one armored block, and not a block per key.
|
||||||
|
* @property {Array<String>} secret_fprs (optional) list of fingerprints
|
||||||
|
* for those Keys that also have a secret Key available in gnupg. The
|
||||||
|
* secret key will not be exported, but the fingerprint can be used in
|
||||||
|
* operations needing a secret key.
|
||||||
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fetches the armored public Key blocks for all Keys matching the pattern
|
* Fetches the armored public Key blocks for all Keys matching the pattern
|
||||||
* (if no pattern is given, fetches all keys known to gnupg). Note that the
|
* (if no pattern is given, fetches all keys known to gnupg).
|
||||||
* result may be one big armored block, instead of several smaller armored
|
|
||||||
* blocks
|
|
||||||
* @param {String|Array<String>} pattern (optional) The Pattern to search
|
* @param {String|Array<String>} pattern (optional) The Pattern to search
|
||||||
* for
|
* for
|
||||||
* @returns {Promise<String|GPGME_Error>} Armored Key blocks
|
* @param {Boolean} with_secret_fpr (optional) also return a list of
|
||||||
|
* fingerprints for the keys that have a secret key available
|
||||||
|
* @returns {Promise<exportResult|GPGME_Error>} Object containing the
|
||||||
|
* armored Key(s) and additional information.
|
||||||
* @static
|
* @static
|
||||||
* @async
|
* @async
|
||||||
*/
|
*/
|
||||||
getKeysArmored(pattern) {
|
getKeysArmored(pattern, with_secret_fpr) {
|
||||||
return new Promise(function(resolve, reject) {
|
return new Promise(function(resolve, reject) {
|
||||||
let msg = createMessage('export');
|
let msg = createMessage('export');
|
||||||
msg.setParameter('armor', true);
|
msg.setParameter('armor', true);
|
||||||
|
if (with_secret_fpr === true) {
|
||||||
|
msg.setParameter('with-sec-fprs', true);
|
||||||
|
}
|
||||||
if (pattern !== undefined){
|
if (pattern !== undefined){
|
||||||
msg.setParameter('keys', pattern);
|
msg.setParameter('keys', pattern);
|
||||||
}
|
}
|
||||||
msg.post().then(function(result){
|
msg.post().then(function(answer){
|
||||||
resolve(result.data);
|
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);
|
reject(error);
|
||||||
});
|
});
|
||||||
|
@ -248,6 +248,9 @@ export const permittedOperations = {
|
|||||||
},
|
},
|
||||||
'pkcs12': {
|
'pkcs12': {
|
||||||
allowed: ['boolean']
|
allowed: ['boolean']
|
||||||
|
},
|
||||||
|
'with-sec-fprs': {
|
||||||
|
allowed: ['boolean']
|
||||||
}
|
}
|
||||||
// secret: not yet implemented
|
// secret: not yet implemented
|
||||||
},
|
},
|
||||||
@ -255,7 +258,8 @@ export const permittedOperations = {
|
|||||||
type: ['keys'],
|
type: ['keys'],
|
||||||
data: {
|
data: {
|
||||||
'data': 'string',
|
'data': 'string',
|
||||||
'base64': 'boolean'
|
'base64': 'boolean',
|
||||||
|
'sec-fprs': 'object'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -295,10 +299,6 @@ export const permittedOperations = {
|
|||||||
allowed: ['string'],
|
allowed: ['string'],
|
||||||
allowed_data: ['cms', 'openpgp']
|
allowed_data: ['cms', 'openpgp']
|
||||||
},
|
},
|
||||||
// 'secret': { not implemented
|
|
||||||
// allowed: ['boolean']
|
|
||||||
// }
|
|
||||||
|
|
||||||
},
|
},
|
||||||
answer: {
|
answer: {
|
||||||
data: {
|
data: {
|
||||||
|
Loading…
Reference in New Issue
Block a user