From 388be88d0f5557b7087247be6f74f992a5d275e6 Mon Sep 17 00:00:00 2001 From: M66B Date: Sun, 30 Oct 2022 07:39:56 +0100 Subject: [PATCH] Check for any/all PGP or S/MIME keys --- .../java/eu/faircode/email/EditTextMultiAutoComplete.java | 4 ++-- app/src/main/java/eu/faircode/email/FragmentCompose.java | 8 ++++---- app/src/main/java/eu/faircode/email/PgpHelper.java | 8 ++++---- app/src/main/java/eu/faircode/email/SmimeHelper.java | 7 ++++--- 4 files changed, 14 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/EditTextMultiAutoComplete.java b/app/src/main/java/eu/faircode/email/EditTextMultiAutoComplete.java index 7f289a9a3d..cbe49d18a9 100644 --- a/app/src/main/java/eu/faircode/email/EditTextMultiAutoComplete.java +++ b/app/src/main/java/eu/faircode/email/EditTextMultiAutoComplete.java @@ -344,9 +344,9 @@ public class EditTextMultiAutoComplete extends AppCompatMultiAutoCompleteTextVie public void run() { try { int has = 0; - if (PgpHelper.hasPgpKey(context, recipient)) + if (PgpHelper.hasPgpKey(context, recipient, true)) has |= 1; - if (SmimeHelper.hasSmimeKey(context, recipient)) + if (SmimeHelper.hasSmimeKey(context, recipient, true)) has |= 2; encryption.put(email, has); diff --git a/app/src/main/java/eu/faircode/email/FragmentCompose.java b/app/src/main/java/eu/faircode/email/FragmentCompose.java index f798372b3b..8ed77a6011 100644 --- a/app/src/main/java/eu/faircode/email/FragmentCompose.java +++ b/app/src/main/java/eu/faircode/email/FragmentCompose.java @@ -5137,13 +5137,13 @@ public class FragmentCompose extends FragmentBase { EntityMessage.PGP_SIGNENCRYPT.equals(ref.ui_encrypt)) { if (Helper.isOpenKeychainInstalled(context) && selected.sign_key != null && - PgpHelper.hasPgpKey(context, recipients)) + PgpHelper.hasPgpKey(context, recipients, true)) data.draft.ui_encrypt = ref.ui_encrypt; } else if (EntityMessage.SMIME_SIGNONLY.equals(ref.ui_encrypt) || EntityMessage.SMIME_SIGNENCRYPT.equals(ref.ui_encrypt)) { if (ActivityBilling.isPro(context) && selected.sign_key_alias != null && - SmimeHelper.hasSmimeKey(context, recipients)) + SmimeHelper.hasSmimeKey(context, recipients, true)) data.draft.ui_encrypt = ref.ui_encrypt; } } @@ -6400,8 +6400,8 @@ public class FragmentCompose extends FragmentBase { EntityMessage.DSN_NONE.equals(draft.dsn)) && (draft.ui_encrypt == null || EntityMessage.ENCRYPT_NONE.equals(draft.ui_encrypt))) { - args.putBoolean("remind_pgp", PgpHelper.hasPgpKey(context, recipients)); - args.putBoolean("remind_smime", SmimeHelper.hasSmimeKey(context, recipients)); + args.putBoolean("remind_pgp", PgpHelper.hasPgpKey(context, recipients, false)); + args.putBoolean("remind_smime", SmimeHelper.hasSmimeKey(context, recipients, false)); } if (TextUtils.isEmpty(draft.subject)) diff --git a/app/src/main/java/eu/faircode/email/PgpHelper.java b/app/src/main/java/eu/faircode/email/PgpHelper.java index d7f4fc48f9..38df8afc83 100644 --- a/app/src/main/java/eu/faircode/email/PgpHelper.java +++ b/app/src/main/java/eu/faircode/email/PgpHelper.java @@ -68,11 +68,11 @@ public class PgpHelper { } } - static boolean hasPgpKey(Context context, List
recipients) { - return hasPgpKey(context, recipients, KEY_TIMEOUT); // milliseconds + static boolean hasPgpKey(Context context, List
recipients, boolean all) { + return hasPgpKey(context, recipients, all, KEY_TIMEOUT); // milliseconds } - private static boolean hasPgpKey(Context context, List
recipients, long timeout) { + private static boolean hasPgpKey(Context context, List
recipients, boolean all, long timeout) { if (recipients == null || recipients.size() == 0) return false; @@ -90,7 +90,7 @@ public class PgpHelper { int resultCode = result.getIntExtra(OpenPgpApi.RESULT_CODE, OpenPgpApi.RESULT_CODE_ERROR); if (resultCode == OpenPgpApi.RESULT_CODE_SUCCESS) { long[] keyIds = result.getLongArrayExtra(OpenPgpApi.EXTRA_KEY_IDS); - return (keyIds.length > 0); + return (all ? keyIds.length == recipients.size() : keyIds.length > 0); } } catch (OperationCanceledException ignored) { // Do nothing diff --git a/app/src/main/java/eu/faircode/email/SmimeHelper.java b/app/src/main/java/eu/faircode/email/SmimeHelper.java index bf5a094dd2..a3973f8a2b 100644 --- a/app/src/main/java/eu/faircode/email/SmimeHelper.java +++ b/app/src/main/java/eu/faircode/email/SmimeHelper.java @@ -27,18 +27,19 @@ import javax.mail.Address; import javax.mail.internet.InternetAddress; public class SmimeHelper { - static boolean hasSmimeKey(Context context, List
recipients) { + static boolean hasSmimeKey(Context context, List
recipients, boolean all) { if (recipients == null || recipients.size() == 0) return false; + int count = 0; DB db = DB.getInstance(context); for (Address address : recipients) { String email = ((InternetAddress) address).getAddress(); List certs = db.certificate().getCertificateByEmail(email); if (certs != null && certs.size() > 0) - return true; + count++; } - return false; + return (all ? count == recipients.size() : count > 0); } }