aboutsummaryrefslogtreecommitdiffstats
path: root/lang/js/src/Connection.js
diff options
context:
space:
mode:
authorMaximilian Krambach <[email protected]>2018-08-30 10:04:50 +0000
committerMaximilian Krambach <[email protected]>2018-08-30 10:09:26 +0000
commita9863717b1b82b3077edd0db85454ba801eac9bd (patch)
treebbf336d02b309ef401d0539167ffb6207a023ecc /lang/js/src/Connection.js
parentpython bindings: estreams fix (diff)
downloadgpgme-a9863717b1b82b3077edd0db85454ba801eac9bd.tar.gz
gpgme-a9863717b1b82b3077edd0db85454ba801eac9bd.zip
js: separate gpgme answer by type of data
-- * src/Connection.js; src/permittedOperations.js: To avoid further encoding problems, data sent by gpgme is now sorted as either 'payload' or 'info'. Payload data may come in any encoding, and here the 'expected' and 'format' options are used, 'info' data may contain text created by gnupg which may need re-encoding, but this should not be affected by 'expected' and 'format'
Diffstat (limited to 'lang/js/src/Connection.js')
-rw-r--r--lang/js/src/Connection.js63
1 files changed, 42 insertions, 21 deletions
diff --git a/lang/js/src/Connection.js b/lang/js/src/Connection.js
index c4921d53..a421985a 100644
--- a/lang/js/src/Connection.js
+++ b/lang/js/src/Connection.js
@@ -243,7 +243,7 @@ class Answer{
for (let i= 0; i < messageKeys.length; i++){
let key = messageKeys[i];
switch (key) {
- case 'type':
+ case 'type': {
if (_decodedResponse.type === 'error'){
return (gpgme_error('GNUPG_ERROR',
decode(_decodedResponse.msg)));
@@ -251,39 +251,60 @@ class Answer{
return gpgme_error('CONN_UNEXPECTED_ANSWER');
}
break;
- case 'base64':
+ }
+ case 'base64': {
break;
- case 'msg':
+ }
+ case 'msg': {
if (_decodedResponse.type === 'error'){
return (gpgme_error('GNUPG_ERROR', _decodedResponse.msg));
}
break;
- default:
- if (!poa.data.hasOwnProperty(key)){
- return gpgme_error('CONN_UNEXPECTED_ANSWER');
+ }
+ default: {
+ let answerType = null;
+ if (poa.payload && poa.payload.hasOwnProperty(key)){
+ answerType = 'p';
+ } else if (poa.info && poa.info.hasOwnProperty(key)){
+ answerType = 'i';
}
- if ( typeof (_decodedResponse[key]) !== poa.data[key] ){
+ if (answerType !== 'p' && answerType !== 'i'){
return gpgme_error('CONN_UNEXPECTED_ANSWER');
}
- if (_decodedResponse.base64 === true
- && poa.data[key] === 'string'
- ) {
- if (this.expected === 'uint8'){
- _response[key] = atobArray(_decodedResponse[key]);
- _response.format = 'uint8';
- } else if (this.expected === 'base64'){
+
+ if (answerType === 'i') {
+ if ( typeof (_decodedResponse[key]) !== poa.info[key] ){
+ return gpgme_error('CONN_UNEXPECTED_ANSWER');
+ }
+ _response[key] = decode(_decodedResponse[key]);
+
+ } else if (answerType === 'p') {
+ if (_decodedResponse.base64 === true
+ && poa.payload[key] === 'string'
+ ) {
+ if (this.expected === 'uint8'){
+ _response[key] = atobArray(_decodedResponse[key]);
+ _response.format = 'uint8';
+
+ } else if (this.expected === 'base64'){
+ _response[key] = _decodedResponse[key];
+ _response.format = 'base64';
+
+ } else { // no 'expected'
+ _response[key] = Utf8ArrayToStr(
+ atobArray(_decodedResponse[key]));
+ _response.format = 'string';
+ }
+ } else if (poa.payload[key] === 'string') {
_response[key] = _decodedResponse[key];
- _response.format = 'base64';
} else {
- _response[key] = Utf8ArrayToStr(
- atobArray(_decodedResponse[key]));
- _response.format = 'string';
+ // fallthrough, should not be reached
+ // (payload is always string)
+ return gpgme_error('CONN_UNEXPECTED_ANSWER');
}
- } else {
- _response[key] = decode(_decodedResponse[key]);
}
break;
- }
+ } }
}
return _response;
}