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 describe, it, expect, before, Gpgmejs */
|
||||||
/* global inputvalues, fixedLengthString */
|
/* global inputvalues*/
|
||||||
|
|
||||||
describe('Key information', function () {
|
describe('Key information', function () {
|
||||||
let context = null;
|
let context = null;
|
||||||
@ -43,4 +43,15 @@ describe('Key information', function () {
|
|||||||
done();
|
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',
|
'-----END PGP SIGNATURE-----\n',
|
||||||
},
|
},
|
||||||
|
|
||||||
someInputParameter: 'bad string'
|
someInputParameter: 'bad string',
|
||||||
|
|
||||||
|
publicKeyNonAscii: {
|
||||||
|
userid: 'Müller €uro',
|
||||||
|
key: '-----BEGIN PGP PUBLIC KEY BLOCK-----\n' + '\n' +
|
||||||
|
'mQENBFt2/VIBCADIWBIMxExZlHda4XIVnM9nsIfUYLebJSC/krEriyWgzytU8/fQ\n' +
|
||||||
|
'S05cfnYx7RXvOOq4k8aa7mu80ovg3q77idXauLreAUwng4Njw0nMxWq/vtoMiZ60\n' +
|
||||||
|
'9f8EmfthZophhkQF2HIPHyqXMDZzMLWv4oTr2UJ9BKudL1XtbK51y9TbiyfQygBl\n' +
|
||||||
|
'8bl+zrOo70/dN6aunvuo6Hlu5cEzkj2QrzZlqTdfG5qv6KVEMut1eAbxZAmvSnna\n' +
|
||||||
|
'R4wqiRCT3/eRXGJbDL/8GaCEYkwi9FBrimjOTV0MpcLNwAU4aGfDxMUsxML9xJ+/\n' +
|
||||||
|
'/6GFxzYf7Lmk5UhvoewR58uQkHkTVPjZ9hXZABEBAAG0KE3DvGxsZXIg4oKsdXJv\n' +
|
||||||
|
'IDxtdWVsbGVyZXVyb0BleGFtcGxlLm9yZz6JAVQEEwEIAD4WIQQVNixp3XT/DuGT\n' +
|
||||||
|
'F4MFmkL4L5UZdAUCW3b9UgIbAwUJA8JnAAULCQgHAgYVCgkICwIEFgIDAQIeAQIX\n' +
|
||||||
|
'gAAKCRAFmkL4L5UZdAhiCACowW1aC8DYGtJyAaBO2MqWhyw1wVCbQN9uFsQZPydY\n' +
|
||||||
|
'v3BEbCDrRc0HyfV1PVoRQsgkiNMes1S2tz2IMJoEOTMaz3WjPM8yK0dDbo5sfx/o\n' +
|
||||||
|
'/XaXeKhyYNqRkz2dPzorg1sHyHe0ki/HoQiANEJ8mByMtlwnPWlhnINAX+27eL17\n' +
|
||||||
|
'JC8juhBYUchqoIBAl+ajYKSThdLzrUkcL7QfJjZb3pPytJSTTdFc0rD6ERDbfXXc\n' +
|
||||||
|
'/vnE2SDYme+XXn7H5tNe67tPM8M96vbp+uM+n2t/z96C+Pqb6GJFMBa35PM+/qQO\n' +
|
||||||
|
'yr0I2oaQnTecx2AfBXGZvd81wMYikAJ9rAOWyMQZHJWouQENBFt2/VIBCADXCvKD\n' +
|
||||||
|
'3wRWCOzRWtLTs7hpAjCDxp6niPkwxKuUf9r/sUPmn0pWdZHYlbPDev9psN9bnJ+C\n' +
|
||||||
|
'+wzzPZ1zgSYKIAN0IMoh0L7BRAoau7VWQ3Q7hP6HIbdzOTEGyklSoh9pIh6IlwZZ\n' +
|
||||||
|
'XfPlFlnn7FeH1UeA711E174SUpDRKYSfT+mFObQUuQewGi9QC3gBsz5MPLQQLzML\n' +
|
||||||
|
'yimIOT+8i64fHHSKChw5ZDckBffej31/YHPQ7+JsWFV+G/6xDfbwnaFZFAUwo+1L\n' +
|
||||||
|
'4w9UiMyCNkIWCkulzJ2Hbz66xzFMi/8zMYxr08Af+PpsXaWTQHAa5V4GNJSInDEB\n' +
|
||||||
|
'7gy/CGLcY90EozoDABEBAAGJATwEGAEIACYWIQQVNixp3XT/DuGTF4MFmkL4L5UZ\n' +
|
||||||
|
'dAUCW3b9UgIbDAUJA8JnAAAKCRAFmkL4L5UZdPqoB/9kpqxqa82k7JMcq7UiwQY7\n' +
|
||||||
|
'CdqCUPKF88ciOWKBpZmpl8V7zgM7kEXwmM6ocHcznXi8xM7eOfDIJcBeqFVIE4OT\n' +
|
||||||
|
'63OCMuvZICM9Kiu48wLNAw5W/YGAOBH7ySQzZM2XrtvwfFtJ3lR00t5f4FVtriA5\n' +
|
||||||
|
'47BjYYG5tTdJc8HwEHs045S99xKCWqwuDgO9qskIi6iPePUkuhpaVBLuEj2Goku6\n' +
|
||||||
|
'i8aql/vKYQS67L7UHJiEbjLe+wP9k3FvWUFTx39lAubsDzb4Abhe+qRqs2TKD7Go\n' +
|
||||||
|
'k35ZriRIYllmx4c9KyWL7Mvzcp+84Sq9LeMfsN4JstBDJ7jn6g19SjO5dmtxSuP0\n' +
|
||||||
|
'=zZSJ\n' +
|
||||||
|
'-----END PGP PUBLIC KEY BLOCK-----\n'
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// (Pseudo-)Random String covering all of utf8.
|
// (Pseudo-)Random String covering all of utf8.
|
||||||
|
@ -26,6 +26,7 @@
|
|||||||
import { permittedOperations } from './permittedOperations';
|
import { permittedOperations } from './permittedOperations';
|
||||||
import { gpgme_error } from './Errors';
|
import { gpgme_error } from './Errors';
|
||||||
import { GPGME_Message, createMessage } from './Message';
|
import { GPGME_Message, createMessage } from './Message';
|
||||||
|
import { decode } from './Helpers';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A Connection handles the nativeMessaging interaction via a port. As the
|
* A Connection handles the nativeMessaging interaction via a port. As the
|
||||||
@ -239,7 +240,7 @@ class Answer{
|
|||||||
case 'type':
|
case 'type':
|
||||||
if (_decodedResponse.type === 'error'){
|
if (_decodedResponse.type === 'error'){
|
||||||
return (gpgme_error('GNUPG_ERROR',
|
return (gpgme_error('GNUPG_ERROR',
|
||||||
decodeURIComponent(escape(_decodedResponse.msg))));
|
decode(_decodedResponse.msg)));
|
||||||
} else if (poa.type.indexOf(_decodedResponse.type) < 0){
|
} else if (poa.type.indexOf(_decodedResponse.type) < 0){
|
||||||
return gpgme_error('CONN_UNEXPECTED_ANSWER');
|
return gpgme_error('CONN_UNEXPECTED_ANSWER');
|
||||||
}
|
}
|
||||||
@ -270,7 +271,7 @@ class Answer{
|
|||||||
('00' + c.charCodeAt(0).toString(16)).slice(-2);
|
('00' + c.charCodeAt(0).toString(16)).slice(-2);
|
||||||
}).join(''));
|
}).join(''));
|
||||||
} else {
|
} else {
|
||||||
_response[key] = _decodedResponse[key];
|
_response[key] = decode(_decodedResponse[key]);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -108,3 +108,30 @@ export function isFingerprint(value){
|
|||||||
export function isLongId(value){
|
export function isLongId(value){
|
||||||
return hextest(value, 16);
|
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