From 8299d490429799b889182f1545cba6fc67351e7f Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Tue, 6 Jul 2021 11:09:16 -0400 Subject: [PATCH] Show an error for internal users for decryption failures. --- .../securesms/jobs/PushDecryptMessageJob.java | 3 ++- .../messages/MessageDecryptionUtil.java | 22 +++++++++++++++++++ .../notifications/NotificationIds.java | 2 ++ app/src/main/res/values/strings.xml | 4 ++++ 4 files changed, 30 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushDecryptMessageJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushDecryptMessageJob.java index 1b2f3fa026..babfd0a56a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushDecryptMessageJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushDecryptMessageJob.java @@ -18,6 +18,7 @@ import org.thoughtcrime.securesms.messages.MessageContentProcessor.MessageState; import org.thoughtcrime.securesms.messages.MessageDecryptionUtil; import org.thoughtcrime.securesms.messages.MessageDecryptionUtil.DecryptionResult; import org.thoughtcrime.securesms.notifications.NotificationChannels; +import org.thoughtcrime.securesms.notifications.NotificationIds; import org.thoughtcrime.securesms.transport.RetryLaterException; import org.thoughtcrime.securesms.util.TextSecurePreferences; import org.whispersystems.signalservice.api.messages.SignalServiceEnvelope; @@ -118,7 +119,7 @@ public final class PushDecryptMessageJob extends BaseJob { } private void postMigrationNotification() { - NotificationManagerCompat.from(context).notify(494949, + NotificationManagerCompat.from(context).notify(NotificationIds.LEGACY_SQLCIPHER_MIGRATION, new NotificationCompat.Builder(context, NotificationChannels.getMessagesChannel(context)) .setSmallIcon(R.drawable.ic_notification) .setPriority(NotificationCompat.PRIORITY_HIGH) diff --git a/app/src/main/java/org/thoughtcrime/securesms/messages/MessageDecryptionUtil.java b/app/src/main/java/org/thoughtcrime/securesms/messages/MessageDecryptionUtil.java index b440de59d1..225644e00f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messages/MessageDecryptionUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/messages/MessageDecryptionUtil.java @@ -1,9 +1,13 @@ package org.thoughtcrime.securesms.messages; +import android.app.PendingIntent; import android.content.Context; +import android.content.Intent; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.core.app.NotificationCompat; +import androidx.core.app.NotificationManagerCompat; import org.signal.core.util.logging.Log; import org.signal.libsignal.metadata.InvalidMetadataMessageException; @@ -18,6 +22,7 @@ import org.signal.libsignal.metadata.ProtocolLegacyMessageException; import org.signal.libsignal.metadata.ProtocolNoSessionException; import org.signal.libsignal.metadata.ProtocolUntrustedIdentityException; import org.signal.libsignal.metadata.SelfSendException; +import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.crypto.ReentrantSessionLock; import org.thoughtcrime.securesms.crypto.UnidentifiedAccessUtil; import org.thoughtcrime.securesms.crypto.storage.SignalProtocolStoreImpl; @@ -29,8 +34,11 @@ import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobs.AutomaticSessionResetJob; import org.thoughtcrime.securesms.jobs.RefreshPreKeysJob; import org.thoughtcrime.securesms.jobs.SendRetryReceiptJob; +import org.thoughtcrime.securesms.logsubmit.SubmitDebugLogActivity; import org.thoughtcrime.securesms.messages.MessageContentProcessor.ExceptionMetadata; import org.thoughtcrime.securesms.messages.MessageContentProcessor.MessageState; +import org.thoughtcrime.securesms.notifications.NotificationChannels; +import org.thoughtcrime.securesms.notifications.NotificationIds; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.util.FeatureFlags; import org.thoughtcrime.securesms.util.GroupUtil; @@ -88,6 +96,7 @@ public final class MessageDecryptionUtil { if (sender.supportsMessageRetries() && Recipient.self().supportsMessageRetries() && FeatureFlags.senderKey()) { jobs.add(handleRetry(context, sender, envelope, e)); + postInternalErrorNotification(context); } else { jobs.add(new AutomaticSessionResetJob(sender.getId(), e.getSenderDevice(), envelope.getTimestamp())); } @@ -199,6 +208,19 @@ public final class MessageDecryptionUtil { return new ExceptionMetadata(sender, e.getSenderDevice()); } + private static void postInternalErrorNotification(@NonNull Context context) { + if (!FeatureFlags.internalUser()) return; + + NotificationManagerCompat.from(context).notify(NotificationIds.INTERNAL_ERROR, + new NotificationCompat.Builder(context, NotificationChannels.FAILURES) + .setSmallIcon(R.drawable.ic_notification) + .setContentTitle(context.getString(R.string.MessageDecryptionUtil_failed_to_decrypt_message)) + .setContentText(context.getString(R.string.MessageDecryptionUtil_tap_to_send_a_debug_log)) + .setContentIntent(PendingIntent.getActivity(context, 0, new Intent(context, SubmitDebugLogActivity.class), 0)) + .build()); + } + + private static class NoSenderException extends Exception {} public static class DecryptionResult { diff --git a/app/src/main/java/org/thoughtcrime/securesms/notifications/NotificationIds.java b/app/src/main/java/org/thoughtcrime/securesms/notifications/NotificationIds.java index 7aa5a89ed8..b822ca22a6 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/notifications/NotificationIds.java +++ b/app/src/main/java/org/thoughtcrime/securesms/notifications/NotificationIds.java @@ -9,6 +9,8 @@ public final class NotificationIds { public static final int SMS_IMPORT_COMPLETE = 31337; public static final int PRE_REGISTRATION_SMS = 5050; public static final int THREAD = 50000; + public static final int INTERNAL_ERROR = 258069; + public static final int LEGACY_SQLCIPHER_MIGRATION = 494949; public static final int USER_NOTIFICATION_MIGRATION = 525600; public static final int DEVICE_TRANSFER = 625420; diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 040a32efa2..ac0c9c2cc5 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1008,6 +1008,10 @@ All media Camera + + Failed to decrypt message + Tap to send a debug log + Unknown Received a message encrypted using an old version of Signal that is no longer supported. Please ask the sender to update to the most recent version and resend the message.