js: decode arriving gpg message strings
-- * Arriving strings (i.e. user id names, error messages) are not always in javascript encoding. This is an attempt to go through the whole gpgme answer (with the exception of payload data) and to fix the encoding of these
This commit is contained in:
parent
3cbafb97ec
commit
74684f24c6
@ -22,7 +22,7 @@
|
||||
*/
|
||||
|
||||
/* global describe, it, expect, before, Gpgmejs */
|
||||
/* global inputvalues, fixedLengthString */
|
||||
/* global inputvalues*/
|
||||
|
||||
describe('Key information', function () {
|
||||
let context = null;
|
||||
@ -43,4 +43,15 @@ describe('Key information', function () {
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
it('A userId keeps their encoding', function(done){
|
||||
context.Keyring.importKey(inputvalues.publicKeyNonAscii.key, true)
|
||||
.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(
|
||||
inputvalues.publicKeyNonAscii.userid);
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
@ -89,7 +89,40 @@ const inputvalues = {// eslint-disable-line no-unused-vars
|
||||
'-----END PGP SIGNATURE-----\n',
|
||||
},
|
||||
|
||||
someInputParameter: 'bad string'
|
||||
someInputParameter: 'bad string',
|
||||
|
||||
publicKeyNonAscii: {
|
||||
userid: 'Müller €uro',
|
||||
key: '-----BEGIN PGP PUBLIC KEY BLOCK-----\n' + '\n' +
|
||||
'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\n' +
|
||||
'=zZSJ\n' +
|
||||
'-----END PGP PUBLIC KEY BLOCK-----\n'
|
||||
}
|
||||
};
|
||||
|
||||
// (Pseudo-)Random String covering all of utf8.
|
||||
|
@ -26,6 +26,7 @@
|
||||
import { permittedOperations } from './permittedOperations';
|
||||
import { gpgme_error } from './Errors';
|
||||
import { GPGME_Message, createMessage } from './Message';
|
||||
import { decode } from './Helpers';
|
||||
|
||||
/**
|
||||
* A Connection handles the nativeMessaging interaction via a port. As the
|
||||
@ -239,7 +240,7 @@ class Answer{
|
||||
case 'type':
|
||||
if (_decodedResponse.type === 'error'){
|
||||
return (gpgme_error('GNUPG_ERROR',
|
||||
decodeURIComponent(escape(_decodedResponse.msg))));
|
||||
decode(_decodedResponse.msg)));
|
||||
} else if (poa.type.indexOf(_decodedResponse.type) < 0){
|
||||
return gpgme_error('CONN_UNEXPECTED_ANSWER');
|
||||
}
|
||||
@ -270,7 +271,7 @@ class Answer{
|
||||
('00' + c.charCodeAt(0).toString(16)).slice(-2);
|
||||
}).join(''));
|
||||
} else {
|
||||
_response[key] = _decodedResponse[key];
|
||||
_response[key] = decode(_decodedResponse[key]);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@ -108,3 +108,30 @@ export function isFingerprint(value){
|
||||
export function isLongId(value){
|
||||
return hextest(value, 16);
|
||||
}
|
||||
|
||||
/**
|
||||
* Recursively decodes input (utf8) to output (utf-16; javascript) strings
|
||||
* @param {Object | Array | String} property
|
||||
*/
|
||||
export function decode(property){
|
||||
if (typeof property === 'string'){
|
||||
return decodeURIComponent(escape(property));
|
||||
} else if (Array.isArray(property)){
|
||||
let res = [];
|
||||
for (let arr=0; arr < property.length; arr++){
|
||||
res.push(decode(property[arr]));
|
||||
}
|
||||
return res;
|
||||
} else if (typeof property === 'object'){
|
||||
const keys = Object.keys(property);
|
||||
if (keys.length){
|
||||
let res = {};
|
||||
for (let k=0; k < keys.length; k++ ){
|
||||
res[keys[k]] = decode(property[keys[k]]);
|
||||
}
|
||||
return res;
|
||||
}
|
||||
return property;
|
||||
}
|
||||
return property;
|
||||
}
|
Loading…
Reference in New Issue
Block a user