Check verification codes for changing phone numbers against the stand-alone registration service when possible

This commit is contained in:
Jon Chambers
2022-10-13 18:04:15 -04:00
committed by Jon Chambers
parent 3c6c6c3706
commit 0a64e31625
2 changed files with 65 additions and 3 deletions

View File

@@ -552,13 +552,20 @@ public class AccountController {
rateLimiters.getVerifyLimiter().validate(number);
final Optional<StoredVerificationCode> storedVerificationCode = pendingAccounts.getCodeForNumber(number);
final Optional<StoredVerificationCode> maybeStoredVerificationCode = pendingAccounts.getCodeForNumber(number);
if (storedVerificationCode.isEmpty() || !storedVerificationCode.get().isValid(request.code())) {
final boolean codeVerified = maybeStoredVerificationCode.map(storedVerificationCode ->
storedVerificationCode.sessionId() != null ?
registrationServiceClient.checkVerificationCode(storedVerificationCode.sessionId(),
request.code(), REGISTRATION_RPC_TIMEOUT).join() :
storedVerificationCode.isValid(request.code()))
.orElse(false);
if (!codeVerified) {
throw new ForbiddenException();
}
storedVerificationCode.map(StoredVerificationCode::twilioVerificationSid)
maybeStoredVerificationCode.map(StoredVerificationCode::twilioVerificationSid)
.ifPresent(
verificationSid -> smsSender.reportVerificationSucceeded(verificationSid, userAgent, "changeNumber"));