[git] GPGME - branch, javascript-binding, updated. gpgme-1.11.1-114-g93f674d

[email protected] (by Maximilian Krambach)
Newsgroups gmane.comp.encryption.gpg.cvs
Message-ID <[email protected]>
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GnuPG Made Easy".

The branch, javascript-binding has been updated
       via  93f674d33d4dacb115398196a7218c28323fd708 (commit)
      from  6d720137dd9564931bf313a7e7078e63fb00287c (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 93f674d33d4dacb115398196a7218c28323fd708
Author: Maximilian Krambach <[email protected]>
Date:   Wed Aug 22 12:18:55 2018 +0200

    js: throw errors in sync functions
    
    --
    
    * synchronous functions should throw errors if something goes wrong,
      Promises should reject. This commit changes some error cases that
      returned Error objects instead of throwing them
    
      - src/Key.js: createKey() and sync Key.get() throw errors
      - src/Error.js: Exporting the list of errors to be able to test and
        compare against these strings
      - src/Keyring.js: Setting a null value in pattern is not useful, and
        now caused an error with the new changes.
      - src/Message.js: createMessage and Message.setParameter now throw
        errors

diff --git a/lang/js/src/Errors.js b/lang/js/src/Errors.js
index 53e7bcd..7341802 100644
--- a/lang/js/src/Errors.js
+++ b/lang/js/src/Errors.js
@@ -24,7 +24,7 @@
 /**
  * Listing of all possible error codes and messages of a {@link GPGME_Error}.
  */
-const err_list = {
+export const err_list = {
     // Connection
     'CONN_NO_CONNECT': {
         msg:'Connection with the nativeMessaging host could not be'
diff --git a/lang/js/src/Key.js b/lang/js/src/Key.js
index 2800ae9..d0f87ed 100644
--- a/lang/js/src/Key.js
+++ b/lang/js/src/Key.js
@@ -33,17 +33,17 @@ import { createMessage } from './Message';
  * answers will be Promises, and the performance will likely suffer
  * @param {Object} data additional initial properties this Key will have. Needs
  * a full object as delivered by gpgme-json
- * @returns {Object|GPGME_Error} The verified and updated data
+ * @returns {Object} The verified and updated data
  */
 export function createKey (fingerprint, async = false, data){
     if (!isFingerprint(fingerprint) || typeof (async) !== 'boolean'){
-        return gpgme_error('PARAM_WRONG');
+        throw gpgme_error('PARAM_WRONG');
     }
     if (data !== undefined){
         data = validateKeyData(fingerprint, data);
     }
     if (data instanceof Error){
-        return gpgme_error('KEY_INVALID');
+        throw gpgme_error('KEY_INVALID');
     } else {
         return new GPGME_Key(fingerprint, async, data);
     }
@@ -78,7 +78,7 @@ class GPGME_Key {
     /**
      * Query any property of the Key listed in {@link validKeyProperties}
      * @param {String} property property to be retreived
-     * @returns {Boolean| String | Date | Array | Object |GPGME_Error}
+     * @returns {Boolean| String | Date | Array | Object}
      * the value of the property. If the Key is set to Async, the value
      * will be fetched from gnupg and resolved as a Promise. If Key is not
      * async, the armored property is not available (it can still be
@@ -96,11 +96,11 @@ class GPGME_Key {
             }
         } else {
             if (property === 'armored') {
-                return gpgme_error('KEY_ASYNC_ONLY');
+                throw gpgme_error('KEY_ASYNC_ONLY');
             }
             // eslint-disable-next-line no-use-before-define
             if (!validKeyProperties.hasOwnProperty(property)){
-                return gpgme_error('PARAM_WRONG');
+                throw gpgme_error('PARAM_WRONG');
             } else {
                 return (this._data[property]);
             }
diff --git a/lang/js/src/Keyring.js b/lang/js/src/Keyring.js
index ab0144e..cb053ba 100644
--- a/lang/js/src/Keyring.js
+++ b/lang/js/src/Keyring.js
@@ -67,7 +67,9 @@ export class GPGME_Keyring {
                     if (prepare_sync === true) {
                         secondrequest = function () {
                             let msg2 = createMessage('keylist');
-                            msg2.setParameter('keys', pattern);
+                            if (pattern){
+                                msg2.setParameter('keys', pattern);
+                            }
                             msg2.setParameter('secret', true);
                             return msg2.post();
                         };
diff --git a/lang/js/src/Message.js b/lang/js/src/Message.js
index 1ba2b65..b83caf6 100644
--- a/lang/js/src/Message.js
+++ b/lang/js/src/Message.js
@@ -29,16 +29,16 @@ import { Connection } from './Connection';
  * Initializes a message for gnupg, validating the message's purpose with
  *   {@link permittedOperations} first
  * @param {String} operation
- * @returns {GPGME_Message|GPGME_Error} The Message object
+ * @returns {GPGME_Message} The Message object
  */
 export function createMessage (operation){
     if (typeof (operation) !== 'string'){
-        return gpgme_error('PARAM_WRONG');
+        throw gpgme_error('PARAM_WRONG');
     }
     if (permittedOperations.hasOwnProperty(operation)){
         return new GPGME_Message(operation);
     } else {
-        return gpgme_error('MSG_WRONG_OP');
+        throw gpgme_error('MSG_WRONG_OP');
     }
 }
 
@@ -117,11 +117,11 @@ export class GPGME_Message {
      */
     setParameter ( param,value ){
         if (!param || typeof (param) !== 'string'){
-            return gpgme_error('PARAM_WRONG');
+            throw gpgme_error('PARAM_WRONG');
         }
         let po = permittedOperations[this._msg.op];
         if (!po){
-            return gpgme_error('MSG_WRONG_OP');
+            throw gpgme_error('MSG_WRONG_OP');
         }
         let poparam = null;
         if (po.required.hasOwnProperty(param)){
@@ -129,7 +129,7 @@ export class GPGME_Message {
         } else if (po.optional.hasOwnProperty(param)){
             poparam = po.optional[param];
         } else {
-            return gpgme_error('PARAM_WRONG');
+            throw gpgme_error('PARAM_WRONG');
         }
         // check incoming value for correctness
         let checktype = function (val){
@@ -139,24 +139,24 @@ export class GPGME_Message {
                         && val.length > 0) {
                     return true;
                 }
-                return gpgme_error('PARAM_WRONG');
+                throw gpgme_error('PARAM_WRONG');
             case 'number':
                 if (
                     poparam.allowed.indexOf('number') >= 0
                         && isNaN(value) === false){
                     return true;
                 }
-                return gpgme_error('PARAM_WRONG');
+                throw gpgme_error('PARAM_WRONG');
 
             case 'boolean':
                 if (poparam.allowed.indexOf('boolean') >= 0){
                     return true;
                 }
-                return gpgme_error('PARAM_WRONG');
+                throw gpgme_error('PARAM_WRONG');
             case 'object':
                 if (Array.isArray(val)){
                     if (poparam.array_allowed !== true){
-                        return gpgme_error('PARAM_WRONG');
+                        throw gpgme_error('PARAM_WRONG');
                     }
                     for (let i=0; i < val.length; i++){
                         let res = checktype(val[i]);
@@ -171,13 +171,13 @@ export class GPGME_Message {
                     if (poparam.allowed.indexOf('Uint8Array') >= 0){
                         return true;
                     }
-                    return gpgme_error('PARAM_WRONG');
+                    throw gpgme_error('PARAM_WRONG');
                 } else {
-                    return gpgme_error('PARAM_WRONG');
+                    throw gpgme_error('PARAM_WRONG');
                 }
                 break;
             default:
-                return gpgme_error('PARAM_WRONG');
+                throw gpgme_error('PARAM_WRONG');
             }
         };
         let typechecked = checktype(value);
diff --git a/lang/js/src/gpgmejs.js b/lang/js/src/gpgmejs.js
index 3be5cdd..2886c6f 100644
--- a/lang/js/src/gpgmejs.js
+++ b/lang/js/src/gpgmejs.js
@@ -152,8 +152,13 @@ export class GpgME {
         if (additional){
             let additional_Keys = Object.keys(additional);
             for (let k = 0; k < additional_Keys.length; k++) {
-                msg.setParameter(additional_Keys[k],
-                    additional[additional_Keys[k]]);
+                try {
+                    msg.setParameter(additional_Keys[k],
+                        additional[additional_Keys[k]]);
+                }
+                catch (error){
+                    return Promise.reject(error);
+                }
             }
         }
         if (msg.isComplete() === true){
@@ -185,9 +190,6 @@ export class GpgME {
             msg.setParameter('base64', true);
         }
         putData(msg, data);
-        if (base64 === true){
-            msg.setParameter('base64', true);
-        }
         return new Promise(function (resolve, reject){
             msg.post().then(function (result){
                 let _result = { data: result.data };
@@ -208,7 +210,11 @@ export class GpgME {
                     _result.signatures = collectSignatures(
                         result.info.signatures);
                 }
-                resolve(_result);
+                if (_result.signatures instanceof Error){
+                    reject(_result.signatures);
+                } else {
+                    resolve(_result);
+                }
             }, function (error){
                 reject(error);
             });
@@ -295,14 +301,17 @@ export class GpgME {
                 if (!message.info || !message.info.signatures){
                     reject(gpgme_error('SIG_NO_SIGS'));
                 } else {
-                    let _result = collectSignatures(
-                        message.info.signatures);
-                    _result.is_mime = message.info.is_mime? true: false;
-                    if (message.info.filename){
-                        _result.file_name = message.info.filename;
+                    let _result = collectSignatures(message.info.signatures);
+                    if (_result instanceof Error){
+                        reject(_result.signatures);
+                    } else {
+                        _result.is_mime = message.info.is_mime? true: false;
+                        if (message.info.filename){
+                            _result.file_name = message.info.filename;
+                        }
+                        _result.data = message.data;
+                        resolve(_result);
                     }
-                    _result.data = message.data;
-                    resolve(_result);
                 }
             }, function (error){
                 reject(error);
@@ -363,8 +372,8 @@ function collectSignatures (sigs){
     };
     for (let i=0; i< sigs.length; i++){
         let sigObj = createSignature(sigs[i]);
-        if (sigObj instanceof Error){
-            return gpgme_error(sigObj);
+        if (sigObj instanceof Error) {
+            return gpgme_error('SIG_WRONG');
         }
         if (sigObj.valid !== true){
             summary.failures += 1;
diff --git a/lang/js/unittests.js b/lang/js/unittests.js
index 0abc106..212effd 100644
--- a/lang/js/unittests.js
+++ b/lang/js/unittests.js
@@ -25,7 +25,7 @@ import { message_params as mp } from './unittest_inputvalues';
 import { whatever_params as wp } from './unittest_inputvalues';
 import { key_params as kp } from './unittest_inputvalues';
 import { Connection } from './src/Connection';
-import { gpgme_error } from './src/Errors';
+import { gpgme_error, err_list } from './src/Errors';
 import { toKeyIdArray , isFingerprint } from './src/Helpers';
 import { createKey } from './src/Key';
 import { GPGME_Keyring } from './src/Keyring';
@@ -225,9 +225,12 @@ function unittests (){
 
         it('createKey returns error if parameters are wrong', function (){
             for (let i=0; i< 4; i++){
-                let key0 = createKey(wp.four_invalid_params[i]);
-                expect(key0).to.be.an.instanceof(Error);
-                expect(key0.code).to.equal('PARAM_WRONG');
+                expect(function (){
+                    createKey(wp.four_invalid_params[i]);
+                }).to.throw(
+                    err_list.PARAM_WRONG.msg
+                );
+
             }
         });
 
@@ -312,9 +315,12 @@ function unittests (){
 
         it('Message is not complete after mandatory data is empty', function (){
             let test0 = createMessage('encrypt');
-            test0.setParameter('data', '');
             test0.setParameter('keys', hp.validFingerprints);
             expect(test0.isComplete()).to.be.false;
+            expect(function (){
+                test0.setParameter('data', '');
+            }).to.throw(
+                err_list.PARAM_WRONG.msg);
         });
 
         it('Complete Message contains the data that was set', function (){
@@ -331,28 +337,27 @@ function unittests (){
         });
 
         it ('Not accepting non-allowed operation', function (){
-            let test0 = createMessage(mp.invalid_op_action);
-
-            expect(test0).to.be.an.instanceof(Error);
-            expect(test0.code).to.equal('MSG_WRONG_OP');
+            expect(function () {
+                createMessage(mp.invalid_op_action);
+            }).to.throw(
+                err_list.MSG_WRONG_OP.msg);
         });
         it('Not accepting wrong parameter type', function (){
-            let test0 = createMessage(mp.invalid_op_type);
-
-            expect(test0).to.be.an.instanceof(Error);
-            expect(test0.code).to.equal('PARAM_WRONG');
+            expect(function () {
+                createMessage(mp.invalid_op_type);
+            }).to.throw(
+                err_list.PARAM_WRONG.msg);
         });
 
         it('Not accepting wrong parameter name', function (){
             let test0 = createMessage(mp.invalid_param_test.valid_op);
             for (let i=0;
                 i < mp.invalid_param_test.invalid_param_names.length; i++){
-                let ret = test0.setParameter(
-                    mp.invalid_param_test.invalid_param_names[i],
-                    'Somevalue');
-
-                expect(ret).to.be.an.instanceof(Error);
-                expect(ret.code).to.equal('PARAM_WRONG');
+                expect(function (){
+                    test0.setParameter(
+                        mp.invalid_param_test.invalid_param_names[i],
+                        'Somevalue');}
+                ).to.throw(err_list.PARAM_WRONG.msg);
             }
         });
 
@@ -360,12 +365,11 @@ function unittests (){
             let test0 = createMessage(mp.invalid_param_test.valid_op);
             for (let j=0;
                 j < mp.invalid_param_test.invalid_values_0.length; j++){
-                let ret = test0.setParameter(
-                    mp.invalid_param_test.validparam_name_0,
-                    mp.invalid_param_test.invalid_values_0[j]);
-
-                expect(ret).to.be.an.instanceof(Error);
-                expect(ret.code).to.equal('PARAM_WRONG');
+                expect(function (){
+                    test0.setParameter(
+                        mp.invalid_param_test.validparam_name_0,
+                        mp.invalid_param_test.invalid_values_0[j]);
+                }).to.throw(err_list.PARAM_WRONG.msg);
             }
         });
     });

-----------------------------------------------------------------------

Summary of changes:
 lang/js/src/Errors.js  |  2 +-
 lang/js/src/Key.js     | 12 +++++------
 lang/js/src/Keyring.js |  4 +++-
 lang/js/src/Message.js | 26 ++++++++++++------------
 lang/js/src/gpgmejs.js | 39 ++++++++++++++++++++++--------------
 lang/js/unittests.js   | 54 +++++++++++++++++++++++++++-----------------------
 6 files changed, 76 insertions(+), 61 deletions(-)


hooks/post-receive
-- 
GnuPG Made Easy
http://git.gnupg.org
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.