js: Configuration and Error handling
[gpgme.git] / lang / js / src / Helpers.js
index eeb7a3c..841c0ed 100644 (file)
  * License along with this program; if not, see <http://www.gnu.org/licenses/>.
  * SPDX-License-Identifier: LGPL-2.1+
  */
+import { gpgme_error } from "./Errors";
 
 /**
  * Tries to return an array of fingerprints, either from input fingerprints or
  * from Key objects
- * @param {String|Array<String>} input Input value.
+ * @param {Key |Array<Key>| GPGME_Key | Array<GPGME_Key>|String|Array<String>} input
  * @returns {Array<String>} Array of fingerprints.
  */
-export function toKeyIdArray(input){
+
+export function toKeyIdArray(input, nocheck){
     if (!input){
+        gpgme_error('MSG_NO_KEYS');
         return [];
-        // TODO: Warning or error here? Did we expect something or is "nothing" okay?
     }
-    if (input instanceof Array){
-        let result = [];
-        for (let i=0; i < input.length; i++){
+    if (!Array.isArray(input)){
+        input = [input];
+    }
+    let result = [];
+    for (let i=0; i < input.length; i++){
+        if (typeof(input[i]) === 'string'){
             if (isFingerprint(input[i]) === true){
                 result.push(input[i]);
             } else {
-                //TODO error?
-                console.log('gpgmejs/Helpers.js Warning: '+
-                    input[i] +
-                    ' is not a valid key fingerprint and will not be used');
+                gpgme_error('MSG_NOT_A_FPR');
+            }
+        } else if (typeof(input[i]) === 'object'){
+            let fpr = '';
+            if (input[i] instanceof GPGME_Key){
+                fpr = input[i].fingerprint;
+            } else if (input[i].hasOwnProperty(primaryKey) &&
+                input[i].primaryKey.hasOwnProperty(getFingerprint)){
+                    fpr = input[i].primaryKey.getFingerprint();
+            }
+            if (isFingerprint(fpr) === true){
+                result.push(fpr);
+            } else {
+                gpgme_error('MSG_NOT_A_FPR');
             }
+        } else {
+            return gpgme_error('PARAM_WRONG');
         }
+    }
+    if (result.length === 0){
+        gpgme_error('MSG_NO_KEYS');
+        return [];
+    } else {
         return result;
-    } else if (isFingerprint(input) === true) {
-        return [input];
     }
-    console.log('gpgmejs/Helpers.js Warning: ' + input +
-                    ' is not a valid key fingerprint and will not be used');
-    return [];
 };
 
 /**
@@ -72,13 +89,14 @@ function hextest(key, len){
 export function isFingerprint(string){
     return hextest(string, 40);
 };
-
-//TODO needed anywhere?
+/**
+ * check if the input is a valid Hex string with a length of 16
+ */
 function isLongId(string){
     return hextest(string, 16);
 };
 
-//TODO needed anywhere?
+// TODO still not needed anywhere
 function isShortId(string){
     return hextest(string, 8);
 };