From 4dedb2746dede961423b25dd9d2c14cc900e1636 Mon Sep 17 00:00:00 2001 From: DenBond7 Date: Tue, 25 May 2021 16:58:29 +0300 Subject: [PATCH] Added some logic to KeysStorageImpl.| #372 --- .../com/flowcrypt/email/model/KeysStorage.kt | 2 +- .../email/security/KeysStorageImpl.kt | 34 ++++++++++++++++--- 2 files changed, 31 insertions(+), 5 deletions(-) diff --git a/FlowCrypt/src/main/java/com/flowcrypt/email/model/KeysStorage.kt b/FlowCrypt/src/main/java/com/flowcrypt/email/model/KeysStorage.kt index a24ac842fc..69b766438a 100644 --- a/FlowCrypt/src/main/java/com/flowcrypt/email/model/KeysStorage.kt +++ b/FlowCrypt/src/main/java/com/flowcrypt/email/model/KeysStorage.kt @@ -23,7 +23,7 @@ interface KeysStorage { fun getPGPSecretKeyRingByFingerprint(fingerprint: String): PGPSecretKeyRing? - fun getPGPSecretKeyRingsByFingerprints(fingerprints: Iterable): List + fun getPGPSecretKeyRingsByFingerprints(fingerprints: Collection): List fun getPGPSecretKeyRingsByUserId(user: String): List diff --git a/FlowCrypt/src/main/java/com/flowcrypt/email/security/KeysStorageImpl.kt b/FlowCrypt/src/main/java/com/flowcrypt/email/security/KeysStorageImpl.kt index e48c6c39b0..a87bed4ab3 100644 --- a/FlowCrypt/src/main/java/com/flowcrypt/email/security/KeysStorageImpl.kt +++ b/FlowCrypt/src/main/java/com/flowcrypt/email/security/KeysStorageImpl.kt @@ -27,6 +27,7 @@ import org.pgpainless.util.Passphrase import java.time.Instant import java.util.* import java.util.concurrent.TimeUnit +import javax.mail.internet.InternetAddress /** * This class implements [KeysStorage]. Here we collect information about imported private keys @@ -89,7 +90,7 @@ class KeysStorageImpl private constructor(context: Context) : KeysStorage { override fun getPgpKeyDetailsList(): List { val list = mutableListOf() - for (secretKey in secretKeyRingsLiveData.value ?: emptyList()) { + for (secretKey in getPGPSecretKeyRings()) { val pgpKeyDetails = secretKey.toPgpKeyDetails() val passphrase = getPassphraseByFingerprint(pgpKeyDetails.fingerprint) list.add(pgpKeyDetails.copy(tempPassphrase = passphrase?.chars)) @@ -104,12 +105,37 @@ class KeysStorageImpl private constructor(context: Context) : KeysStorage { } } - override fun getPGPSecretKeyRingsByFingerprints(fingerprints: Iterable): List { - TODO("Not yet implemented") + override fun getPGPSecretKeyRingsByFingerprints(fingerprints: Collection): + List { + val list = mutableListOf() + val set = fingerprints.map { it.toUpperCase(Locale.US) }.toSet() + for (secretKey in getPGPSecretKeyRings()) { + val openPgpV4Fingerprint = OpenPgpV4Fingerprint(secretKey) + if (openPgpV4Fingerprint.toString() in set) { + list.add(secretKey) + } + } + return list } override fun getPGPSecretKeyRingsByUserId(user: String): List { - TODO("Not yet implemented") + val list = mutableListOf() + for (secretKey in getPGPSecretKeyRings()) { + for (userId in secretKey.publicKey.userIDs) { + try { + val internetAddresses = InternetAddress.parse(userId) + for (internetAddress in internetAddresses) { + if (user.equals(internetAddress.address, true)) { + list.add(secretKey) + continue + } + } + } catch (e: Exception) { + e.printStackTrace() + } + } + } + return list } override fun getPassphraseByFingerprint(fingerprint: String): Passphrase? {