From c01d542ec2aa210e74832ce0ba5251e915fceb08 Mon Sep 17 00:00:00 2001 From: Nicholas Tinsley Date: Wed, 15 Mar 2023 17:29:56 -0400 Subject: [PATCH] Better handling of push timeouts during registration. --- .../changenumber/ChangeNumberVerifyFragment.kt | 4 ++-- .../registration/RegistrationSessionProcessor.kt | 16 ++++++++++------ .../fragments/BaseEnterSmsCodeFragment.java | 2 +- .../fragments/EnterPhoneNumberFragment.java | 2 +- .../viewmodel/BaseRegistrationViewModel.java | 2 +- .../internal/ServiceResponseProcessor.java | 4 ---- 6 files changed, 15 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/changenumber/ChangeNumberVerifyFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/changenumber/ChangeNumberVerifyFragment.kt index 8f0cbe327f..dc4d12d23e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/changenumber/ChangeNumberVerifyFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/changenumber/ChangeNumberVerifyFragment.kt @@ -73,11 +73,11 @@ class ChangeNumberVerifyFragment : LoggingFragment(R.layout.fragment_change_phon return@subscribe } - val processor = (result as RequestCodeResult.RequestedVerificationCode).processor + val processor: RegistrationSessionProcessor = (result as RequestCodeResult.RequestedVerificationCode).processor if (processor.hasResult()) { findNavController().safeNavigate(R.id.action_changePhoneNumberVerifyFragment_to_changeNumberEnterCodeFragment) - } else if (processor.captchaRequired()) { + } else if (processor.captchaRequired(viewModel.excludedChallenges)) { Log.i(TAG, "Unable to request sms code due to captcha required") findNavController().safeNavigate(R.id.action_changePhoneNumberVerifyFragment_to_captchaFragment, getCaptchaArguments()) requestingCaptcha = true diff --git a/app/src/main/java/org/thoughtcrime/securesms/registration/RegistrationSessionProcessor.kt b/app/src/main/java/org/thoughtcrime/securesms/registration/RegistrationSessionProcessor.kt index 57b9afeb23..b24143df8a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/registration/RegistrationSessionProcessor.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/registration/RegistrationSessionProcessor.kt @@ -27,10 +27,6 @@ sealed class RegistrationSessionProcessor(response: ServiceResponse): Boolean { + return response.status == 402 || (hasResult() && CAPTCHA_KEY == getChallenge(excludedChallenges)) + } + fun pushChallengeTimedOut(): Boolean { - val state: RegistrationSessionState = response.result.get().state ?: return false - return state.pushChallengeTimedOut + if (response.result.isEmpty) { + return false + } else { + val state: RegistrationSessionState = response.result.get().state ?: return false + return state.pushChallengeTimedOut + } } fun isTokenRejected(): Boolean { diff --git a/app/src/main/java/org/thoughtcrime/securesms/registration/fragments/BaseEnterSmsCodeFragment.java b/app/src/main/java/org/thoughtcrime/securesms/registration/fragments/BaseEnterSmsCodeFragment.java index 2b172f49d7..c94e24e599 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/registration/fragments/BaseEnterSmsCodeFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/registration/fragments/BaseEnterSmsCodeFragment.java @@ -335,7 +335,7 @@ public abstract class BaseEnterSmsCodeFragment { if (processor.hasResult()) { Toast.makeText(requireContext(), getCodeRequestedToastText(mode), Toast.LENGTH_LONG).show(); - } else if (processor.captchaRequired()) { + } else if (processor.captchaRequired(viewModel.getExcludedChallenges())) { navigateToCaptcha(); } else if (processor.rateLimit()) { handleRateLimited(); 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 4e9420af8c..2f92cac5de 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 @@ -283,7 +283,7 @@ public final class EnterPhoneNumberFragment extends LoggingFragment implements R if (processor.verificationCodeRequestSuccess()) { disposables.add(updateFcmTokenValue()); SafeNavigation.safeNavigate(navController, EnterPhoneNumberFragmentDirections.actionEnterVerificationCode()); - } else if (processor.captchaRequired()) { + } else if (processor.captchaRequired(viewModel.getExcludedChallenges())) { Log.i(TAG, "Unable to request sms code due to captcha required"); SafeNavigation.safeNavigate(navController, EnterPhoneNumberFragmentDirections.actionRequestCaptcha()); } else if (processor.exhaustedVerificationCodeAttempts()) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/registration/viewmodel/BaseRegistrationViewModel.java b/app/src/main/java/org/thoughtcrime/securesms/registration/viewmodel/BaseRegistrationViewModel.java index 35c8930b6f..3a0922758a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/registration/viewmodel/BaseRegistrationViewModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/registration/viewmodel/BaseRegistrationViewModel.java @@ -303,7 +303,7 @@ public abstract class BaseRegistrationViewModel extends ViewModel { return Single.just(processor); } - if (hasCaptchaToken() && processor.captchaRequired()) { + if (hasCaptchaToken() && processor.captchaRequired(getExcludedChallenges())) { Log.d(TAG, "Submitting completed captcha challenge"); final String captcha = Objects.requireNonNull(getCaptchaToken()); clearCaptchaResponse(); diff --git a/libsignal/service/src/main/java/org/whispersystems/signalservice/internal/ServiceResponseProcessor.java b/libsignal/service/src/main/java/org/whispersystems/signalservice/internal/ServiceResponseProcessor.java index 08c0cfd526..0b3e00b527 100644 --- a/libsignal/service/src/main/java/org/whispersystems/signalservice/internal/ServiceResponseProcessor.java +++ b/libsignal/service/src/main/java/org/whispersystems/signalservice/internal/ServiceResponseProcessor.java @@ -67,10 +67,6 @@ public abstract class ServiceResponseProcessor { return response.getStatus() == 401 || response.getStatus() == 403; } - protected boolean captchaRequired() { - return response.getStatus() == 402; - } - protected boolean notFound() { return response.getStatus() == 404; }