diff --git a/src/org/thoughtcrime/securesms/jobs/PushDecryptJob.java b/src/org/thoughtcrime/securesms/jobs/PushDecryptJob.java index 621e21c391..1c259cc95f 100644 --- a/src/org/thoughtcrime/securesms/jobs/PushDecryptJob.java +++ b/src/org/thoughtcrime/securesms/jobs/PushDecryptJob.java @@ -281,6 +281,12 @@ public class PushDecryptJob extends BaseJob implements InjectableType { cipher.validateBackgroundMessage(envelope, envelope.getContent()); } + // Loki - Ignore any friend requests that we got before restoration + if (envelope.isFriendRequest() && envelope.getTimestamp() < TextSecurePreferences.getRestorationTime(context)) { + Log.i(TAG, "Ignoring friend request that was received before restoration"); + return; + } + SignalServiceContent content = cipher.decrypt(envelope); if (shouldIgnore(content)) { diff --git a/src/org/thoughtcrime/securesms/loki/SeedActivity.kt b/src/org/thoughtcrime/securesms/loki/SeedActivity.kt index 2294c0db93..00da3c5fcb 100644 --- a/src/org/thoughtcrime/securesms/loki/SeedActivity.kt +++ b/src/org/thoughtcrime/securesms/loki/SeedActivity.kt @@ -206,6 +206,9 @@ class SeedActivity : BaseActionBarActivity(), DeviceLinkingDelegate, ScanListene DatabaseFactory.getIdentityDatabase(this).saveIdentity(Address.fromSerialized(userHexEncodedPublicKey), keyPair.publicKey, IdentityDatabase.VerifiedStatus.VERIFIED, true, System.currentTimeMillis(), true) TextSecurePreferences.setLocalNumber(this, userHexEncodedPublicKey) + if (mode == Mode.Restore) { + TextSecurePreferences.setRestorationTime(this, System.currentTimeMillis()) + } when (mode) { Mode.Register -> Analytics.shared.track("Seed Created") Mode.Restore -> Analytics.shared.track("Seed Restored") diff --git a/src/org/thoughtcrime/securesms/util/TextSecurePreferences.java b/src/org/thoughtcrime/securesms/util/TextSecurePreferences.java index 00f334bc1a..0868ae8005 100644 --- a/src/org/thoughtcrime/securesms/util/TextSecurePreferences.java +++ b/src/org/thoughtcrime/securesms/util/TextSecurePreferences.java @@ -1220,6 +1220,14 @@ public class TextSecurePreferences { public static boolean needsRevocationCheck(Context context) { return getBooleanPreference(context, "needs_revocation", false); } + + public static void setRestorationTime(Context context, long time) { + setLongPreference(context, "restoration_time", time); + } + + public static long getRestorationTime(Context context) { + return getLongPreference(context, "restoration_time", 0); + } // endregion public static void clearAll(Context context) {