From 0c2afa9438564f5651f59e4cda1fdc1034686493 Mon Sep 17 00:00:00 2001 From: Alan Evans Date: Thu, 30 Apr 2020 17:30:58 -0300 Subject: [PATCH] Fix FCM token via phone call registration. Fixes #8992 --- .../fragments/EnterPhoneNumberFragment.java | 9 ++--- .../service/RegistrationCodeRequest.java | 33 ++++--------------- .../LocalCodeRequestRateLimiterTest.java | 32 +++++++++--------- 3 files changed, 28 insertions(+), 46 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/registration/fragments/EnterPhoneNumberFragment.java b/app/src/main/java/org/thoughtcrime/securesms/registration/fragments/EnterPhoneNumberFragment.java index 2d74238a7..20a61e7a4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/registration/fragments/EnterPhoneNumberFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/registration/fragments/EnterPhoneNumberFragment.java @@ -164,19 +164,20 @@ public final class EnterPhoneNumberFragment extends BaseRegistrationFragment { if (fcmSupported) { SmsRetrieverClient client = SmsRetriever.getClient(context); - Task task = client.startSmsRetriever(); + Task task = client.startSmsRetriever(); task.addOnSuccessListener(none -> { Log.i(TAG, "Successfully registered SMS listener."); - requestVerificationCode(e164number, RegistrationCodeRequest.Mode.SMS_FCM_WITH_LISTENER); + requestVerificationCode(e164number, RegistrationCodeRequest.Mode.SMS_WITH_LISTENER); }); task.addOnFailureListener(e -> { Log.w(TAG, "Failed to register SMS listener.", e); - requestVerificationCode(e164number, RegistrationCodeRequest.Mode.SMS_FCM_NO_LISTENER); + requestVerificationCode(e164number, RegistrationCodeRequest.Mode.SMS_WITHOUT_LISTENER); }); } else { - requestVerificationCode(e164number, RegistrationCodeRequest.Mode.SMS_NO_FCM); + Log.i(TAG, "FCM is not supported, using no SMS listener"); + requestVerificationCode(e164number, RegistrationCodeRequest.Mode.SMS_WITHOUT_LISTENER); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/registration/service/RegistrationCodeRequest.java b/app/src/main/java/org/thoughtcrime/securesms/registration/service/RegistrationCodeRequest.java index 85743754d..053d56fd8 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/registration/service/RegistrationCodeRequest.java +++ b/app/src/main/java/org/thoughtcrime/securesms/registration/service/RegistrationCodeRequest.java @@ -42,13 +42,7 @@ public final class RegistrationCodeRequest { try { markAsVerifying(context); - Optional fcmToken; - - if (mode.isFcm()) { - fcmToken = FcmUtil.getToken(); - } else { - fcmToken = Optional.absent(); - } + Optional fcmToken = FcmUtil.getToken(); SignalServiceAccountManager accountManager = AccountManagerFactory.createUnauthenticated(context, credentials.getE164number(), credentials.getPassword()); @@ -101,43 +95,30 @@ public final class RegistrationCodeRequest { public enum Mode { /** - * Device supports FCM and SMS retrieval. + * Device is requesting an SMS and supports SMS retrieval. * * The SMS sent will be formatted for automatic SMS retrieval. */ - SMS_FCM_WITH_LISTENER(true, true), + SMS_WITH_LISTENER(true), /** - * Device supports FCM but not SMS retrieval. + * Device is requesting an SMS and does not support SMS retrieval. * * The SMS sent will be not be specially formatted for automatic SMS retrieval. */ - SMS_FCM_NO_LISTENER(true, false), - - /** - * Device does not support FCM and so also not SMS retrieval. - */ - SMS_NO_FCM(false, false), + SMS_WITHOUT_LISTENER(false), /** * Device is requesting a phone call. - * - * Neither FCM or SMS retrieval is relevant in this mode. */ - PHONE_CALL(false, false); + PHONE_CALL(false); - private final boolean fcm; private final boolean smsRetrieverSupported; - Mode(boolean fcm, boolean smsRetrieverSupported) { - this.fcm = fcm; + Mode(boolean smsRetrieverSupported) { this.smsRetrieverSupported = smsRetrieverSupported; } - public boolean isFcm() { - return fcm; - } - public boolean isSmsRetrieverSupported() { return smsRetrieverSupported; } diff --git a/app/src/test/java/org/thoughtcrime/securesms/registration/viewmodel/LocalCodeRequestRateLimiterTest.java b/app/src/test/java/org/thoughtcrime/securesms/registration/viewmodel/LocalCodeRequestRateLimiterTest.java index 5c29e5f4b..9377d7771 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/registration/viewmodel/LocalCodeRequestRateLimiterTest.java +++ b/app/src/test/java/org/thoughtcrime/securesms/registration/viewmodel/LocalCodeRequestRateLimiterTest.java @@ -12,63 +12,63 @@ public final class LocalCodeRequestRateLimiterTest { public void initially_can_request() { LocalCodeRequestRateLimiter limiter = new LocalCodeRequestRateLimiter(60_000); - assertTrue(limiter.canRequest(RegistrationCodeRequest.Mode.SMS_NO_FCM, "+155512345678", 1000)); + assertTrue(limiter.canRequest(RegistrationCodeRequest.Mode.SMS_WITHOUT_LISTENER, "+155512345678", 1000)); } @Test public void cant_request_within_same_time_period() { LocalCodeRequestRateLimiter limiter = new LocalCodeRequestRateLimiter(60_000); - assertTrue(limiter.canRequest(RegistrationCodeRequest.Mode.SMS_NO_FCM, "+155512345678", 1000)); + assertTrue(limiter.canRequest(RegistrationCodeRequest.Mode.SMS_WITHOUT_LISTENER, "+155512345678", 1000)); - limiter.onSuccessfulRequest(RegistrationCodeRequest.Mode.SMS_NO_FCM, "+155512345678", 1000); + limiter.onSuccessfulRequest(RegistrationCodeRequest.Mode.SMS_WITHOUT_LISTENER, "+155512345678", 1000); - assertFalse(limiter.canRequest(RegistrationCodeRequest.Mode.SMS_NO_FCM, "+155512345678", 1000 + 59_000)); + assertFalse(limiter.canRequest(RegistrationCodeRequest.Mode.SMS_WITHOUT_LISTENER, "+155512345678", 1000 + 59_000)); } @Test public void can_request_within_same_time_period_if_different_number() { LocalCodeRequestRateLimiter limiter = new LocalCodeRequestRateLimiter(60_000); - assertTrue(limiter.canRequest(RegistrationCodeRequest.Mode.SMS_NO_FCM, "+155512345678", 1000)); + assertTrue(limiter.canRequest(RegistrationCodeRequest.Mode.SMS_WITHOUT_LISTENER, "+155512345678", 1000)); - limiter.onSuccessfulRequest(RegistrationCodeRequest.Mode.SMS_NO_FCM, "+155512345678", 1000); + limiter.onSuccessfulRequest(RegistrationCodeRequest.Mode.SMS_WITHOUT_LISTENER, "+155512345678", 1000); - assertTrue(limiter.canRequest(RegistrationCodeRequest.Mode.SMS_NO_FCM, "+15559874566", 1000 + 59_000)); + assertTrue(limiter.canRequest(RegistrationCodeRequest.Mode.SMS_WITHOUT_LISTENER, "+15559874566", 1000 + 59_000)); } @Test public void can_request_within_same_time_period_if_different_mode() { LocalCodeRequestRateLimiter limiter = new LocalCodeRequestRateLimiter(60_000); - assertTrue(limiter.canRequest(RegistrationCodeRequest.Mode.SMS_NO_FCM, "+155512345678", 1000)); + assertTrue(limiter.canRequest(RegistrationCodeRequest.Mode.SMS_WITH_LISTENER, "+155512345678", 1000)); - limiter.onSuccessfulRequest(RegistrationCodeRequest.Mode.SMS_NO_FCM, "+155512345678", 1000); + limiter.onSuccessfulRequest(RegistrationCodeRequest.Mode.SMS_WITH_LISTENER, "+155512345678", 1000); - assertTrue(limiter.canRequest(RegistrationCodeRequest.Mode.SMS_FCM_NO_LISTENER, "+155512345678", 1000 + 59_000)); + assertTrue(limiter.canRequest(RegistrationCodeRequest.Mode.SMS_WITHOUT_LISTENER, "+155512345678", 1000 + 59_000)); } @Test public void can_request_after_time_period() { LocalCodeRequestRateLimiter limiter = new LocalCodeRequestRateLimiter(60_000); - assertTrue(limiter.canRequest(RegistrationCodeRequest.Mode.SMS_NO_FCM, "+155512345678", 1000)); + assertTrue(limiter.canRequest(RegistrationCodeRequest.Mode.SMS_WITH_LISTENER, "+155512345678", 1000)); - limiter.onSuccessfulRequest(RegistrationCodeRequest.Mode.SMS_NO_FCM, "+155512345678", 1000); + limiter.onSuccessfulRequest(RegistrationCodeRequest.Mode.SMS_WITH_LISTENER, "+155512345678", 1000); - assertTrue(limiter.canRequest(RegistrationCodeRequest.Mode.SMS_NO_FCM, "+155512345678", 1000 + 60_001)); + assertTrue(limiter.canRequest(RegistrationCodeRequest.Mode.SMS_WITH_LISTENER, "+155512345678", 1000 + 60_001)); } @Test public void can_request_within_same_time_period_if_an_unsuccessful_request_is_seen() { LocalCodeRequestRateLimiter limiter = new LocalCodeRequestRateLimiter(60_000); - assertTrue(limiter.canRequest(RegistrationCodeRequest.Mode.SMS_NO_FCM, "+155512345678", 1000)); + assertTrue(limiter.canRequest(RegistrationCodeRequest.Mode.SMS_WITH_LISTENER, "+155512345678", 1000)); - limiter.onSuccessfulRequest(RegistrationCodeRequest.Mode.SMS_NO_FCM, "+155512345678", 1000); + limiter.onSuccessfulRequest(RegistrationCodeRequest.Mode.SMS_WITH_LISTENER, "+155512345678", 1000); limiter.onUnsuccessfulRequest(); - assertTrue(limiter.canRequest(RegistrationCodeRequest.Mode.SMS_NO_FCM, "+155512345678", 1000 + 59_000)); + assertTrue(limiter.canRequest(RegistrationCodeRequest.Mode.SMS_WITH_LISTENER, "+155512345678", 1000 + 59_000)); } } \ No newline at end of file