js: typecheck destructured parameters
authorMaximilian Krambach <maximilian.krambach@intevation.de>
Mon, 27 Aug 2018 10:32:28 +0000 (12:32 +0200)
committerMaximilian Krambach <maximilian.krambach@intevation.de>
Mon, 27 Aug 2018 10:38:32 +0000 (12:38 +0200)
--

* destructuring just takes the input argument and treats it as object.
  In cases like in src/Keyring/generateKey, where I forgot to change
  the old syntax, the fingerprint as string was destructured into an
  object without "pattern", which caused all Keys to be retrieved.
  So, methods with a destructuring now check if the first argument is
  an object and get a default empty object if no parameter is
  submitted. This allows the further use of destructured parameters,
  while still ensuring nothing vastly incorrect is used.
* src/Kering.js, unittsets.js: fixed old syntax in method usage

lang/js/src/Keyring.js
lang/js/src/gpgmejs.js
lang/js/unittests.js

index 2b57e63..0c64f33 100644 (file)
@@ -49,7 +49,13 @@ export class GPGME_Keyring {
      * @static
      * @async
      */
-    getKeys ({ pattern, prepare_sync = false, search = false }){
+    getKeys ({ pattern, prepare_sync = false, search = false } = {}){
+        if (typeof arguments[0] !== 'object') {
+            return Promise.reject(gpgme_error('PARAM_WRONG'));
+        }
+        if (arguments.length && typeof arguments[0] !== 'object') {
+            return Promise.reject(gpgme_error('PARAM_WRONG'));
+        }
         return new Promise(function (resolve, reject) {
             let msg = createMessage('keylist');
             if (pattern) {
@@ -387,7 +393,7 @@ export class GPGME_Keyring {
      * @return {Promise<Key|GPGME_Error>}
      * @async
      */
-    generateKey ({ userId, algo = 'default', expires= 0, subkey_algo }){
+    generateKey ({ userId, algo = 'default', expires= 0, subkey_algo } = {}){
         if (typeof userId !== 'string'
             // eslint-disable-next-line no-use-before-define
             || (algo && supportedKeyAlgos.indexOf(algo) < 0 )
@@ -409,13 +415,14 @@ export class GPGME_Keyring {
             }
             msg.setParameter('expires', expires);
             msg.post().then(function (response){
-                me.getKeys(response.fingerprint, true).then(
-                    // TODO prepare_sync?
-                    function (result){
-                        resolve(result);
-                    }, function (error){
-                        reject(error);
-                    });
+                me.getKeys({
+                    pattern: response.fingerprint,
+                    prepare_sync: true
+                }).then(function (result){
+                    resolve(result);
+                }, function (error){
+                    reject(error);
+                });
             }, function (error) {
                 reject(error);
             });
index b86b5f1..592b0a1 100644 (file)
@@ -142,7 +142,10 @@ export class GpgME {
      * @async
      */
     encrypt ({ data, publicKeys, secretKeys, base64 = false, armor = true,
-        wildcard, always_trust = true, additional = {} }){
+        wildcard, always_trust = true, additional = {} } = {}){
+        if (typeof arguments[0] !== 'object') {
+            return Promise.reject(gpgme_error('PARAM_WRONG'));
+        }
         if (!data || !publicKeys){
             return Promise.reject(gpgme_error('MSG_INCOMPLETE'));
         }
@@ -203,7 +206,10 @@ export class GpgME {
     * @returns {Promise<decrypt_result>} Decrypted Message and information
     * @async
     */
-    decrypt ({ data, base64, expect }){
+    decrypt ({ data, base64, expect } = {}){
+        if (typeof arguments[0] !== 'object') {
+            return Promise.reject(gpgme_error('PARAM_WRONG'));
+        }
         if (!data){
             return Promise.reject(gpgme_error('MSG_EMPTY'));
         }
@@ -263,7 +269,10 @@ export class GpgME {
      * @returns {Promise<signResult>}
      * @async
      */
-    sign ({ data, keys, mode = 'clearsign', base64 }){
+    sign ({ data, keys, mode = 'clearsign', base64 } = {}){
+        if (typeof arguments[0] !== 'object') {
+            return Promise.reject(gpgme_error('PARAM_WRONG'));
+        }
         if (!data){
             return Promise.reject(gpgme_error('MSG_EMPTY'));
         }
@@ -310,7 +319,10 @@ export class GpgME {
      * @returns {Promise<verifyResult>}
      *@async
     */
-    verify ({ data, signature, base64 }){
+    verify ({ data, signature, base64 } = {}){
+        if (typeof arguments[0] !== 'object') {
+            return Promise.reject(gpgme_error('PARAM_WRONG'));
+        }
         if (!data){
             return Promise.reject(gpgme_error('PARAM_WRONG'));
         }
index 8f1ffb6..de06320 100644 (file)
@@ -287,13 +287,14 @@ function unittests (){
 
         it('Querying non-existing Key from Keyring', function (done){
             let keyring = new GPGME_Keyring;
-            keyring.getKeys(kp.invalidKeyFingerprint, true).then(
-                function (result){
-                    expect(result).to.be.an('array');
-                    expect(result.length).to.equal(0);
-                    done();
-                }
-            );
+            keyring.getKeys({
+                pattern: kp.invalidKeyFingerprint,
+                prepare_sync: true
+            }).then(function (result){
+                expect(result).to.be.an('array');
+                expect(result.length).to.equal(0);
+                done();
+            });
         });
 
     });