diff options
Diffstat (limited to '')
| -rw-r--r-- | lang/js/BrowserTestExtension/tests/KeyInfos.js | 13 | ||||
| -rw-r--r-- | lang/js/BrowserTestExtension/tests/inputvalues.js | 35 | ||||
| -rw-r--r-- | lang/js/src/Connection.js | 5 | ||||
| -rw-r--r-- | lang/js/src/Helpers.js | 27 | 
4 files changed, 76 insertions, 4 deletions
| diff --git a/lang/js/BrowserTestExtension/tests/KeyInfos.js b/lang/js/BrowserTestExtension/tests/KeyInfos.js index 03773a44..1829f227 100644 --- a/lang/js/BrowserTestExtension/tests/KeyInfos.js +++ b/lang/js/BrowserTestExtension/tests/KeyInfos.js @@ -22,7 +22,7 @@   */  /* global describe, it, expect, before, Gpgmejs */ -/* global inputvalues, fixedLengthString */ +/* global inputvalues*/  describe('Key information', function () {      let context = null; @@ -43,4 +43,15 @@ describe('Key information', function () {              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(); +            }); +    });  });
\ No newline at end of file diff --git a/lang/js/BrowserTestExtension/tests/inputvalues.js b/lang/js/BrowserTestExtension/tests/inputvalues.js index 7dda47cd..b33d985b 100644 --- a/lang/js/BrowserTestExtension/tests/inputvalues.js +++ b/lang/js/BrowserTestExtension/tests/inputvalues.js @@ -89,7 +89,40 @@ const inputvalues = {// eslint-disable-line no-unused-vars          '-----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. 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 | 
