aboutsummaryrefslogtreecommitdiffstats
path: root/lang/js/src
diff options
context:
space:
mode:
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