diff options
Diffstat (limited to 'lang/js/src')
| -rw-r--r-- | lang/js/src/Connection.js | 5 | ||||
| -rw-r--r-- | lang/js/src/Helpers.js | 27 | 
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 | 
