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 -> {
|
task.addOnSuccessListener(none -> {
|
||||||
Log.i(TAG, "Successfully registered SMS listener.");
|
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 -> {
|
task.addOnFailureListener(e -> {
|
||||||
Log.w(TAG, "Failed to register SMS listener.", 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 {
|
} 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 {
|
try {
|
||||||
markAsVerifying(context);
|
markAsVerifying(context);
|
||||||
|
|
||||||
Optional<String> fcmToken;
|
Optional<String> fcmToken = FcmUtil.getToken();
|
||||||
|
|
||||||
if (mode.isFcm()) {
|
|
||||||
fcmToken = FcmUtil.getToken();
|
|
||||||
} else {
|
|
||||||
fcmToken = Optional.absent();
|
|
||||||
}
|
|
||||||
|
|
||||||
SignalServiceAccountManager accountManager = AccountManagerFactory.createUnauthenticated(context, credentials.getE164number(), credentials.getPassword());
|
SignalServiceAccountManager accountManager = AccountManagerFactory.createUnauthenticated(context, credentials.getE164number(), credentials.getPassword());
|
||||||
|
|
||||||
|
@ -101,43 +95,30 @@ public final class RegistrationCodeRequest {
|
||||||
public enum Mode {
|
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.
|
* 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.
|
* The SMS sent will be not be specially formatted for automatic SMS retrieval.
|
||||||
*/
|
*/
|
||||||
SMS_FCM_NO_LISTENER(true, false),
|
SMS_WITHOUT_LISTENER(false),
|
||||||
|
|
||||||
/**
|
|
||||||
* Device does not support FCM and so also not SMS retrieval.
|
|
||||||
*/
|
|
||||||
SMS_NO_FCM(false, false),
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Device is requesting a phone call.
|
* 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;
|
private final boolean smsRetrieverSupported;
|
||||||
|
|
||||||
Mode(boolean fcm, boolean smsRetrieverSupported) {
|
Mode(boolean smsRetrieverSupported) {
|
||||||
this.fcm = fcm;
|
|
||||||
this.smsRetrieverSupported = smsRetrieverSupported;
|
this.smsRetrieverSupported = smsRetrieverSupported;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isFcm() {
|
|
||||||
return fcm;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isSmsRetrieverSupported() {
|
public boolean isSmsRetrieverSupported() {
|
||||||
return smsRetrieverSupported;
|
return smsRetrieverSupported;
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,63 +12,63 @@ public final class LocalCodeRequestRateLimiterTest {
|
||||||
public void initially_can_request() {
|
public void initially_can_request() {
|
||||||
LocalCodeRequestRateLimiter limiter = new LocalCodeRequestRateLimiter(60_000);
|
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
|
@Test
|
||||||
public void cant_request_within_same_time_period() {
|
public void cant_request_within_same_time_period() {
|
||||||
LocalCodeRequestRateLimiter limiter = new LocalCodeRequestRateLimiter(60_000);
|
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
|
@Test
|
||||||
public void can_request_within_same_time_period_if_different_number() {
|
public void can_request_within_same_time_period_if_different_number() {
|
||||||
LocalCodeRequestRateLimiter limiter = new LocalCodeRequestRateLimiter(60_000);
|
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
|
@Test
|
||||||
public void can_request_within_same_time_period_if_different_mode() {
|
public void can_request_within_same_time_period_if_different_mode() {
|
||||||
LocalCodeRequestRateLimiter limiter = new LocalCodeRequestRateLimiter(60_000);
|
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
|
@Test
|
||||||
public void can_request_after_time_period() {
|
public void can_request_after_time_period() {
|
||||||
LocalCodeRequestRateLimiter limiter = new LocalCodeRequestRateLimiter(60_000);
|
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
|
@Test
|
||||||
public void can_request_within_same_time_period_if_an_unsuccessful_request_is_seen() {
|
public void can_request_within_same_time_period_if_an_unsuccessful_request_is_seen() {
|
||||||
LocalCodeRequestRateLimiter limiter = new LocalCodeRequestRateLimiter(60_000);
|
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();
|
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