From f577bf167ce192fa2dc8acb261e742b54b07c038 Mon Sep 17 00:00:00 2001 From: adbenitez Date: Fri, 19 Jul 2024 21:14:52 +0200 Subject: [PATCH 1/6] prevent creating contact without encryption in chatmail account --- .../securesms/ConversationListActivity.java | 6 ++++++ .../securesms/NewConversationActivity.java | 2 ++ .../thoughtcrime/securesms/ShareActivity.java | 20 +++++++++++++------ .../securesms/connect/DcHelper.java | 10 ++++++++++ .../securesms/util/LongClickCopySpan.java | 12 +++++++---- src/main/res/values/strings.xml | 1 + 6 files changed, 41 insertions(+), 10 deletions(-) diff --git a/src/main/java/org/thoughtcrime/securesms/ConversationListActivity.java b/src/main/java/org/thoughtcrime/securesms/ConversationListActivity.java index 807211dcf..9edc74b96 100644 --- a/src/main/java/org/thoughtcrime/securesms/ConversationListActivity.java +++ b/src/main/java/org/thoughtcrime/securesms/ConversationListActivity.java @@ -81,6 +81,7 @@ public class ConversationListActivity extends PassphraseRequiredActionBarActivit public static final String CLEAR_NOTIFICATIONS = "clear_notifications"; public static final String ACCOUNT_ID_EXTRA = "account_id"; public static final String FROM_WELCOME = "from_welcome"; + public static final String WARN_ADDR_EXTRA = "warn_addr"; private ConversationListFragment conversationListFragment; public TextView title; @@ -238,6 +239,11 @@ public class ConversationListActivity extends PassphraseRequiredActionBarActivit AccountManager.getInstance().switchAccountAndStartActivity(this, accountId); } + String warnAddr = getIntent().getStringExtra(WARN_ADDR_EXTRA); + if (!TextUtils.isEmpty(warnAddr)) { + DcHelper.showEncryptionRequiredDialog(this, warnAddr); + } + refreshAvatar(); refreshUnreadIndicator(); refreshTitle(); diff --git a/src/main/java/org/thoughtcrime/securesms/NewConversationActivity.java b/src/main/java/org/thoughtcrime/securesms/NewConversationActivity.java index 3ec60d656..cd3a507eb 100644 --- a/src/main/java/org/thoughtcrime/securesms/NewConversationActivity.java +++ b/src/main/java/org/thoughtcrime/securesms/NewConversationActivity.java @@ -106,6 +106,8 @@ public class NewConversationActivity extends ContactSelectionActivity { int contactId = dcContext.lookupContactIdByAddr(addr); if (contactId!=0 && dcContext.getChatIdByContactId(contactId)!=0) { openConversation(dcContext.getChatIdByContactId(contactId)); + } else if (contactId == 0 && dcContext.isChatmail()) { + DcHelper.showEncryptionRequiredDialog(this, addr); } else { String nameNAddr = contactId == 0 ? addr : dcContext.getContact(contactId).getNameNAddr(); new AlertDialog.Builder(this) diff --git a/src/main/java/org/thoughtcrime/securesms/ShareActivity.java b/src/main/java/org/thoughtcrime/securesms/ShareActivity.java index f798f78ea..c6d5a6c88 100644 --- a/src/main/java/org/thoughtcrime/securesms/ShareActivity.java +++ b/src/main/java/org/thoughtcrime/securesms/ShareActivity.java @@ -251,18 +251,26 @@ public class ShareActivity extends PassphraseRequiredActionBarActivity implement } */ + String addr = null; if(chatId == -1 && extraEmail != null && extraEmail.length > 0) { - final String addr = extraEmail[0]; + addr = extraEmail[0]; int contactId = dcContext.lookupContactIdByAddr(addr); - if(contactId == 0) { - contactId = dcContext.createContact(null, addr); - } + if(contactId != 0 || !dcContext.isChatmail()) { + if(contactId == 0) { + contactId = dcContext.createContact(null, addr); + } - chatId = dcContext.createChatByContactId(contactId); + chatId = dcContext.createChatByContactId(contactId); + addr = null; + } } Intent composeIntent; - if (chatId != -1) { + if (addr != null) { + composeIntent = new Intent(this, ConversationListActivity.class); + composeIntent.putExtra(ConversationListActivity.WARN_ADDR_EXTRA, addr); + startActivity(composeIntent); + } else if (chatId != -1) { composeIntent = getBaseShareIntent(ConversationActivity.class); composeIntent.putExtra(ConversationActivity.CHAT_ID_EXTRA, chatId); RelayUtil.setSharedUris(composeIntent, resolvedExtras); diff --git a/src/main/java/org/thoughtcrime/securesms/connect/DcHelper.java b/src/main/java/org/thoughtcrime/securesms/connect/DcHelper.java index 3e01cbe35..fdd71607d 100644 --- a/src/main/java/org/thoughtcrime/securesms/connect/DcHelper.java +++ b/src/main/java/org/thoughtcrime/securesms/connect/DcHelper.java @@ -486,6 +486,16 @@ public class DcHelper { .show(); } + public static void showEncryptionRequiredDialog(Context context, String addr) { + new AlertDialog.Builder(context) + .setMessage(context.getString(R.string.encryption_required_for_new_contact, addr)) + .setNeutralButton(R.string.learn_more, (d, w) -> openHelp(context, "#howtoe2ee")) + .setNegativeButton(R.string.qrscan_title, (d, w) -> context.startActivity(new Intent(context, QrActivity.class))) + .setPositiveButton(R.string.ok, null) + .setCancelable(true) + .show(); + } + public static void openHelp(Context context, String section) { Intent intent = new Intent(context, LocalHelpActivity.class); if (section != null) { intent.putExtra(LocalHelpActivity.SECTION_EXTRA, section); } diff --git a/src/main/java/org/thoughtcrime/securesms/util/LongClickCopySpan.java b/src/main/java/org/thoughtcrime/securesms/util/LongClickCopySpan.java index 5801ac607..02a1f084e 100644 --- a/src/main/java/org/thoughtcrime/securesms/util/LongClickCopySpan.java +++ b/src/main/java/org/thoughtcrime/securesms/util/LongClickCopySpan.java @@ -58,14 +58,18 @@ public class LongClickCopySpan extends ClickableSpan { String addr = prepareUrl(url); Activity activity = (Activity) widget.getContext(); DcContext dcContext = DcHelper.getContext(activity); - DcContact contact = dcContext.getContact(dcContext.createContact(null, addr)); - if (contact.getId() != 0 && !contact.isBlocked() && dcContext.getChatIdByContactId(contact.getId()) != 0) { + int contactId = dcContext.lookupContactIdByAddr(addr); + DcContact contact = (contactId != 0)? dcContext.getContact(contactId) : null; + if (contact != null && !contact.isBlocked() && dcContext.getChatIdByContactId(contactId) != 0) { openChat(activity, contact); + } else if (contact != null && dcContext.isChatmail()) { + DcHelper.showEncryptionRequiredDialog(activity, addr); } else { + String nameNAddr = contact != null ? addr : contact.getNameNAddr(); new AlertDialog.Builder(activity) - .setMessage(activity.getString(R.string.ask_start_chat_with, contact.getNameNAddr())) + .setMessage(activity.getString(R.string.ask_start_chat_with, nameNAddr)) .setPositiveButton(android.R.string.ok, (dialog, which) -> { - openChat(activity, contact); + openChat(activity, contact == null? dcContext.getContact(dcContext.createContact(null, addr)) : contact); }) .setNegativeButton(R.string.cancel, null) .show(); diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index 5c297b4f7..09d12b200 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -917,6 +917,7 @@ End-to-end encryption cannot be guaranteed anymore, likely because %1$s reinstalled Delta Chat or sent a message from another device.\n\nYou may meet them in person and scan their QR code again to reestablish guaranteed end-to-end encryption. ⚠️ %1$s requires end-to-end encryption which is not setup for this chat yet. Tap to learn more. To establish end-to-end-encryption, you may meet contacts in person and scan their QR Code to introduce them. + End-to-end encryption is required but it is not setup for %1$s yet.\n\nYou may share your invite link with them or meet in person and scan their QR Code. Learn More You deleted the \"Saved messages\" chat.\n\nℹ️ To use the \"Saved messages\" feature again, create a new chat with yourself. From ea7f96c030406e84ec2564ebdeec2fdff18c2bfe Mon Sep 17 00:00:00 2001 From: adbenitez Date: Mon, 22 Jul 2024 19:01:17 +0200 Subject: [PATCH 2/6] warn chatmail accounts when scanning QR code with mailto/address --- .../java/org/thoughtcrime/securesms/qr/QrCodeHandler.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/thoughtcrime/securesms/qr/QrCodeHandler.java b/src/main/java/org/thoughtcrime/securesms/qr/QrCodeHandler.java index 34a0361bc..4adfa2709 100644 --- a/src/main/java/org/thoughtcrime/securesms/qr/QrCodeHandler.java +++ b/src/main/java/org/thoughtcrime/securesms/qr/QrCodeHandler.java @@ -55,8 +55,13 @@ public class QrCodeHandler { showFingerPrintError(builder, nameAndAddress); break; - case DcContext.DC_QR_FPR_OK: case DcContext.DC_QR_ADDR: + if (dcContext.isChatmail()) { + dcContext.deleteContact(qrParsed.getId()); + DcHelper.showEncryptionRequiredDialog(activity, nameAndAddress); + return; + } + case DcContext.DC_QR_FPR_OK: showFingerprintOrQrSuccess(builder, qrParsed, nameAndAddress); break; From a25fd3f688d78512a24293827ae7f41c5eabbad6 Mon Sep 17 00:00:00 2001 From: adbenitez Date: Tue, 23 Jul 2024 18:20:07 +0200 Subject: [PATCH 3/6] fix bug in LongClickCopySpan --- .../java/org/thoughtcrime/securesms/util/LongClickCopySpan.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/thoughtcrime/securesms/util/LongClickCopySpan.java b/src/main/java/org/thoughtcrime/securesms/util/LongClickCopySpan.java index 02a1f084e..1f1966ed0 100644 --- a/src/main/java/org/thoughtcrime/securesms/util/LongClickCopySpan.java +++ b/src/main/java/org/thoughtcrime/securesms/util/LongClickCopySpan.java @@ -65,7 +65,7 @@ public class LongClickCopySpan extends ClickableSpan { } else if (contact != null && dcContext.isChatmail()) { DcHelper.showEncryptionRequiredDialog(activity, addr); } else { - String nameNAddr = contact != null ? addr : contact.getNameNAddr(); + String nameNAddr = contact != null ? contact.getNameNAddr() : addr; new AlertDialog.Builder(activity) .setMessage(activity.getString(R.string.ask_start_chat_with, nameNAddr)) .setPositiveButton(android.R.string.ok, (dialog, which) -> { From 5128d94427020dee1dfc50ae5a3b6875d4d1046d Mon Sep 17 00:00:00 2001 From: adbenitez Date: Tue, 23 Jul 2024 18:24:35 +0200 Subject: [PATCH 4/6] fix onClick() in LongClickCopySpan --- .../java/org/thoughtcrime/securesms/util/LongClickCopySpan.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/thoughtcrime/securesms/util/LongClickCopySpan.java b/src/main/java/org/thoughtcrime/securesms/util/LongClickCopySpan.java index 1f1966ed0..4108b0dbb 100644 --- a/src/main/java/org/thoughtcrime/securesms/util/LongClickCopySpan.java +++ b/src/main/java/org/thoughtcrime/securesms/util/LongClickCopySpan.java @@ -62,7 +62,7 @@ public class LongClickCopySpan extends ClickableSpan { DcContact contact = (contactId != 0)? dcContext.getContact(contactId) : null; if (contact != null && !contact.isBlocked() && dcContext.getChatIdByContactId(contactId) != 0) { openChat(activity, contact); - } else if (contact != null && dcContext.isChatmail()) { + } else if (contact == null && dcContext.isChatmail()) { DcHelper.showEncryptionRequiredDialog(activity, addr); } else { String nameNAddr = contact != null ? contact.getNameNAddr() : addr; From 61ee6574ebc74884bd9f28d416bd2199f6c2ff19 Mon Sep 17 00:00:00 2001 From: adbenitez Date: Tue, 30 Jul 2024 11:20:51 +0200 Subject: [PATCH 5/6] revert change in QrCodeHandler --- .../java/org/thoughtcrime/securesms/qr/QrCodeHandler.java | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/main/java/org/thoughtcrime/securesms/qr/QrCodeHandler.java b/src/main/java/org/thoughtcrime/securesms/qr/QrCodeHandler.java index 4adfa2709..34a0361bc 100644 --- a/src/main/java/org/thoughtcrime/securesms/qr/QrCodeHandler.java +++ b/src/main/java/org/thoughtcrime/securesms/qr/QrCodeHandler.java @@ -55,13 +55,8 @@ public class QrCodeHandler { showFingerPrintError(builder, nameAndAddress); break; - case DcContext.DC_QR_ADDR: - if (dcContext.isChatmail()) { - dcContext.deleteContact(qrParsed.getId()); - DcHelper.showEncryptionRequiredDialog(activity, nameAndAddress); - return; - } case DcContext.DC_QR_FPR_OK: + case DcContext.DC_QR_ADDR: showFingerprintOrQrSuccess(builder, qrParsed, nameAndAddress); break; From 33c4b6223bb09730762d9c26287bd2d31dc4154e Mon Sep 17 00:00:00 2001 From: adbenitez Date: Tue, 30 Jul 2024 14:48:05 +0200 Subject: [PATCH 6/6] rename var --- .../org/thoughtcrime/securesms/ConversationListActivity.java | 4 ++-- src/main/java/org/thoughtcrime/securesms/ShareActivity.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/thoughtcrime/securesms/ConversationListActivity.java b/src/main/java/org/thoughtcrime/securesms/ConversationListActivity.java index 9edc74b96..533c49e47 100644 --- a/src/main/java/org/thoughtcrime/securesms/ConversationListActivity.java +++ b/src/main/java/org/thoughtcrime/securesms/ConversationListActivity.java @@ -81,7 +81,7 @@ public class ConversationListActivity extends PassphraseRequiredActionBarActivit public static final String CLEAR_NOTIFICATIONS = "clear_notifications"; public static final String ACCOUNT_ID_EXTRA = "account_id"; public static final String FROM_WELCOME = "from_welcome"; - public static final String WARN_ADDR_EXTRA = "warn_addr"; + public static final String WARN_CANNOT_ENCRYPT = "warn_cannot_encrypt"; private ConversationListFragment conversationListFragment; public TextView title; @@ -239,7 +239,7 @@ public class ConversationListActivity extends PassphraseRequiredActionBarActivit AccountManager.getInstance().switchAccountAndStartActivity(this, accountId); } - String warnAddr = getIntent().getStringExtra(WARN_ADDR_EXTRA); + String warnAddr = getIntent().getStringExtra(WARN_CANNOT_ENCRYPT); if (!TextUtils.isEmpty(warnAddr)) { DcHelper.showEncryptionRequiredDialog(this, warnAddr); } diff --git a/src/main/java/org/thoughtcrime/securesms/ShareActivity.java b/src/main/java/org/thoughtcrime/securesms/ShareActivity.java index c6d5a6c88..2c706b522 100644 --- a/src/main/java/org/thoughtcrime/securesms/ShareActivity.java +++ b/src/main/java/org/thoughtcrime/securesms/ShareActivity.java @@ -268,7 +268,7 @@ public class ShareActivity extends PassphraseRequiredActionBarActivity implement Intent composeIntent; if (addr != null) { composeIntent = new Intent(this, ConversationListActivity.class); - composeIntent.putExtra(ConversationListActivity.WARN_ADDR_EXTRA, addr); + composeIntent.putExtra(ConversationListActivity.WARN_CANNOT_ENCRYPT, addr); startActivity(composeIntent); } else if (chatId != -1) { composeIntent = getBaseShareIntent(ConversationActivity.class);