From 309e33016acc4033e0ed5589a78cc468d72c3d29 Mon Sep 17 00:00:00 2001 From: Cody Henthorne Date: Mon, 4 Oct 2021 13:01:04 -0400 Subject: [PATCH] Prevent GV2 operations after becoming unregistered. --- .../groups/GroupsV2Authorization.java | 4 ++++ .../securesms/util/TextSecurePreferences.java | 21 +++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/GroupsV2Authorization.java b/app/src/main/java/org/thoughtcrime/securesms/groups/GroupsV2Authorization.java index 75a6e8a94..42ecd7540 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/GroupsV2Authorization.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/GroupsV2Authorization.java @@ -57,6 +57,10 @@ public final class GroupsV2Authorization { } } + public void clear() { + cache.clear(); + } + private static int currentTimeDays() { return (int) TimeUnit.MILLISECONDS.toDays(System.currentTimeMillis()); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/TextSecurePreferences.java b/app/src/main/java/org/thoughtcrime/securesms/util/TextSecurePreferences.java index 95a1ad33b..452d32303 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/TextSecurePreferences.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/TextSecurePreferences.java @@ -15,8 +15,11 @@ import androidx.core.app.NotificationCompat; import org.greenrobot.eventbus.EventBus; import org.signal.core.util.logging.Log; +import org.signal.zkgroup.profiles.ProfileKey; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.backup.BackupProtos; +import org.thoughtcrime.securesms.crypto.ProfileKeyUtil; +import org.thoughtcrime.securesms.database.DatabaseFactory; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.jobmanager.impl.SqlCipherMigrationConstraintObserver; import org.thoughtcrime.securesms.keyvalue.SettingsValues; @@ -472,6 +475,10 @@ public class TextSecurePreferences { if (previous != value) { Recipient.self().live().refresh(); } + + if (value) { + clearLocalCredentials(context); + } } public static boolean isUnauthorizedRecieved(Context context) { @@ -927,6 +934,10 @@ public class TextSecurePreferences { if (previous != registered) { Recipient.self().live().refresh(); } + + if (previous && !registered) { + clearLocalCredentials(context); + } } public static boolean isShowInviteReminders(Context context) { @@ -1291,6 +1302,16 @@ public class TextSecurePreferences { } } + private static void clearLocalCredentials(Context context) { + TextSecurePreferences.setPushServerPassword(context, Util.getSecret(18)); + + ProfileKey newProfileKey = ProfileKeyUtil.createNew(); + Recipient self = Recipient.self(); + DatabaseFactory.getRecipientDatabase(context).setProfileKey(self.getId(), newProfileKey); + + ApplicationDependencies.getGroupsV2Authorization().clear(); + } + // NEVER rename these -- they're persisted by name public enum MediaKeyboardMode { EMOJI, STICKER, GIF