From 4e4c0702282b58da3e3992dcbd1c4d33c27d5b15 Mon Sep 17 00:00:00 2001 From: Constantine Verutin Date: Fri, 30 Nov 2018 10:55:33 +0000 Subject: [PATCH] Make sure auth key selection dialog lists only keys with auth subkey available. Presently the dialog lists all master keys, and keys without auth subkeys are not marked in any way. Sleecting one of those via SSH authentication API will result in cryptic "Could not create description: null" message. --- .../org/sufficientlysecure/keychain/daos/KeyRepository.java | 5 +++++ .../ui/dialog/RemoteSelectAuthenticationKeyActivity.java | 2 +- .../main/sqldelight/org/sufficientlysecure/keychain/Keys.sq | 5 +++++ 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/daos/KeyRepository.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/daos/KeyRepository.java index 57cefe4f1..59d457b5c 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/daos/KeyRepository.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/daos/KeyRepository.java @@ -164,6 +164,11 @@ public class KeyRepository extends AbstractDao { return mapAllRows(query, SubKey.UNIFIED_KEY_INFO_MAPPER); } + public List getAllUnifiedKeyInfoWithAuthKeySecret() { + SqlDelightQuery query = SubKey.FACTORY.selectAllUnifiedKeyInfoWithAuthKeySecret(); + return mapAllRows(query, SubKey.UNIFIED_KEY_INFO_MAPPER); + } + public List getUserIds(long... masterKeyIds) { SqlDelightQuery query = UserPacket.FACTORY.selectUserIdsByMasterKeyId(masterKeyIds); return mapAllRows(query, UserPacket.USER_ID_MAPPER); diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/dialog/RemoteSelectAuthenticationKeyActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/dialog/RemoteSelectAuthenticationKeyActivity.java index 931ddb44a..e320d5e1c 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/dialog/RemoteSelectAuthenticationKeyActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/dialog/RemoteSelectAuthenticationKeyActivity.java @@ -104,7 +104,7 @@ public class RemoteSelectAuthenticationKeyActivity extends FragmentActivity { if (keyInfoLiveData == null) { keyInfoLiveData = new GenericLiveData<>(context, () -> { KeyRepository keyRepository = KeyRepository.create(context); - return keyRepository.getAllUnifiedKeyInfoWithSecret(); + return keyRepository.getAllUnifiedKeyInfoWithAuthKeySecret(); }); } return keyInfoLiveData; diff --git a/OpenKeychain/src/main/sqldelight/org/sufficientlysecure/keychain/Keys.sq b/OpenKeychain/src/main/sqldelight/org/sufficientlysecure/keychain/Keys.sq index 73209f029..db208a4bf 100644 --- a/OpenKeychain/src/main/sqldelight/org/sufficientlysecure/keychain/Keys.sq +++ b/OpenKeychain/src/main/sqldelight/org/sufficientlysecure/keychain/Keys.sq @@ -92,6 +92,11 @@ SELECT * FROM unifiedKeyView WHERE has_any_secret_int = 1 ORDER BY creation DESC; +selectAllUnifiedKeyInfoWithAuthKeySecret: +SELECT * FROM unifiedKeyView + WHERE has_any_secret_int = 1 AND has_auth_key_int IS NOT NULL + ORDER BY creation DESC; + selectMasterKeyIdBySubkey: SELECT master_key_id FROM keys