From 715cdc0d7d5bc8d39ff3cc49774c59e5db01c1b6 Mon Sep 17 00:00:00 2001
From: Maximilian Krambach <maximilian.krambach@intevation.de>
Date: Thu, 16 Aug 2018 12:03:30 +0200
Subject: [PATCH] js: get default key fixes

--

* src/Keyring.js: The answer was not parsed correctly, so a config was
  being ignored.

* If no config is set, we return the first non-invalid key with a
  secret, instead of the first key (which may be e.g. an expired one)
---
 lang/js/src/Keyring.js | 22 +++++++++++++++-------
 1 file changed, 15 insertions(+), 7 deletions(-)

diff --git a/lang/js/src/Keyring.js b/lang/js/src/Keyring.js
index c4b89b2e..9fdd53b9 100644
--- a/lang/js/src/Keyring.js
+++ b/lang/js/src/Keyring.js
@@ -176,12 +176,13 @@ export class GPGME_Keyring {
                 let msg = createMessage('config_opt');
                 msg.setParameter('component', 'gpg');
                 msg.setParameter('option', 'default-key');
-                msg.post().then(function(response){
-                    if (response.value !== undefined
-                        && response.value.hasOwnProperty('string')
-                        && typeof(response.value.string) === 'string'
-                    ){
-                        me.getKeys(response.value.string,true).then(
+                msg.post().then(function(resp){
+                    if (resp.option !== undefined
+                        && resp.option.hasOwnProperty('value')
+                        && resp.option.value.length === 1
+                        && resp.option.value[0].hasOwnProperty('string')
+                        && typeof(resp.option.value[0].string) === 'string'){
+                        me.getKeys(resp.option.value[0].string, true).then(
                             function(keys){
                                 if(keys.length === 1){
                                     resolve(keys[0]);
@@ -198,7 +199,14 @@ export class GPGME_Keyring {
                             if (result.keys.length === 0){
                                 reject(gpgme_error('KEY_NO_DEFAULT'));
                             } else {
-                                resolve(result.keys[0]);
+                                for (let i=0; i< result.keys.length; i++ ) {
+                                    if (result.keys[i].get('invalid') === false) {
+                                        resolve(result.keys[i]);
+                                        break;
+                                    } else if (i === result.keys.length - 1){
+                                        reject(gpgme_error('KEY_NO_DEFAULT'));
+                                    }
+                                }
                             }
                         }, function(error){
                             reject(error);