From c5bf88366c603659302b5fb4fafccf583da308d2 Mon Sep 17 00:00:00 2001 From: Cody Henthorne Date: Thu, 17 Oct 2024 19:49:33 -0400 Subject: [PATCH] Fix bug reusing already validated session during registration. --- .../registration/ui/RegistrationViewModel.kt | 26 ++++++++++++------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/registration/ui/RegistrationViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/registration/ui/RegistrationViewModel.kt index dff1022ba7..60bed7ead7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/registration/ui/RegistrationViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/registration/ui/RegistrationViewModel.kt @@ -65,6 +65,7 @@ import org.thoughtcrime.securesms.util.Util import org.thoughtcrime.securesms.util.dualsim.MccMncProducer import org.whispersystems.signalservice.api.SvrNoDataException import org.whispersystems.signalservice.api.kbs.MasterKey +import org.whispersystems.signalservice.internal.push.RegistrationSessionMetadataJson import org.whispersystems.signalservice.internal.push.RegistrationSessionMetadataResponse import java.io.IOException import java.util.concurrent.TimeUnit @@ -743,21 +744,26 @@ class RegistrationViewModel : ViewModel() { var reglock = registrationLocked - val sessionId = getOrCreateValidSession(context)?.body?.id ?: return - val registrationData = getRegistrationData() + val session: RegistrationSessionMetadataJson? = getOrCreateValidSession(context)?.body + val sessionId: String = session?.id ?: return + val registrationData: RegistrationData = getRegistrationData() - Log.d(TAG, "Submitting verification code…") + if (session.verified) { + Log.i(TAG, "Session is already verified, registering account.") + } else { + Log.d(TAG, "Submitting verification code…") - val verificationResponse = RegistrationRepository.submitVerificationCode(context, sessionId, registrationData) + val verificationResponse = RegistrationRepository.submitVerificationCode(context, sessionId, registrationData) - val submissionSuccessful = verificationResponse is Success - val alreadyVerified = verificationResponse is AlreadyVerified + val submissionSuccessful = verificationResponse is Success + val alreadyVerified = verificationResponse is AlreadyVerified - Log.d(TAG, "Verification code submission network call completed. Submission successful? $submissionSuccessful Account already verified? $alreadyVerified") + Log.d(TAG, "Verification code submission network call completed. Submission successful? $submissionSuccessful Account already verified? $alreadyVerified") - if (!submissionSuccessful && !alreadyVerified) { - handleSessionStateResult(context, verificationResponse) - return + if (!submissionSuccessful && !alreadyVerified) { + handleSessionStateResult(context, verificationResponse) + return + } } Log.d(TAG, "Submitting registration…")