parent
c3832cf8b1
commit
0c2afa9438
3 changed files with 28 additions and 46 deletions
|
@ -168,15 +168,16 @@ public final class EnterPhoneNumberFragment extends BaseRegistrationFragment {
|
|||
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -42,13 +42,7 @@ public final class RegistrationCodeRequest {
|
|||
try {
|
||||
markAsVerifying(context);
|
||||
|
||||
Optional<String> fcmToken;
|
||||
|
||||
if (mode.isFcm()) {
|
||||
fcmToken = FcmUtil.getToken();
|
||||
} else {
|
||||
fcmToken = Optional.absent();
|
||||
}
|
||||
Optional<String> 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;
|
||||
}
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
}
|
Loading…
Add table
Reference in a new issue