aboutsummaryrefslogtreecommitdiffstats
path: root/lang/js/src
diff options
context:
space:
mode:
authorMaximilian Krambach <[email protected]>2018-08-17 17:20:35 +0000
committerMaximilian Krambach <[email protected]>2018-08-17 17:20:35 +0000
commit74684f24c663af12c88b196fecd5f44863b893e4 (patch)
tree59647232f7ea09a7fc7b22f3e3bde4cdc74e78a5 /lang/js/src
parentjs: correct decrypt result info (2) (diff)
downloadgpgme-74684f24c663af12c88b196fecd5f44863b893e4.tar.gz
gpgme-74684f24c663af12c88b196fecd5f44863b893e4.zip
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
Diffstat (limited to 'lang/js/src')
-rw-r--r--lang/js/src/Connection.js5
-rw-r--r--lang/js/src/Helpers.js27
2 files changed, 30 insertions, 2 deletions
diff --git a/lang/js/src/Connection.js b/lang/js/src/Connection.js
index b0105757..8d381f15 100644
--- a/lang/js/src/Connection.js
+++ b/lang/js/src/Connection.js
@@ -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;
}
diff --git a/lang/js/src/Helpers.js b/lang/js/src/Helpers.js
index accc2af5..379015f2 100644
--- a/lang/js/src/Helpers.js
+++ b/lang/js/src/Helpers.js
@@ -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;
+} \ No newline at end of file