mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-02-20 17:57:29 +00:00
Don't reset session on return from captcha.
This commit is contained in:
@@ -12,6 +12,6 @@ data class RegistrationData(
|
||||
val pniRegistrationId: Int,
|
||||
val recoveryPassword: String?
|
||||
) {
|
||||
val isFcm: Boolean = fcmToken != null
|
||||
val isNotFcm: Boolean = fcmToken == null
|
||||
val isNotFcm: Boolean = fcmToken.isNullOrBlank()
|
||||
val isFcm: Boolean = !isNotFcm
|
||||
}
|
||||
|
||||
@@ -218,10 +218,10 @@ public final class RegistrationRepository {
|
||||
return null;
|
||||
}
|
||||
|
||||
public Single<BackupAuthCheckProcessor> getKbsAuthCredential(@NonNull RegistrationData registrationData) {
|
||||
public Single<BackupAuthCheckProcessor> getKbsAuthCredential(@NonNull RegistrationData registrationData, List<String> usernamePasswords) {
|
||||
SignalServiceAccountManager accountManager = AccountManagerFactory.createUnauthenticated(context, registrationData.getE164(), SignalServiceAddress.DEFAULT_DEVICE_ID, registrationData.getPassword());
|
||||
|
||||
return accountManager.checkBackupAuthCredentials(registrationData.getE164(), SignalStore.kbsValues().getKbsAuthTokenList())
|
||||
return accountManager.checkBackupAuthCredentials(registrationData.getE164(), usernamePasswords)
|
||||
.map(BackupAuthCheckProcessor::new)
|
||||
.doOnSuccess(processor -> {
|
||||
if (SignalStore.kbsValues().removeAuthTokens(processor.getInvalid())) {
|
||||
|
||||
@@ -384,8 +384,7 @@ public abstract class BaseEnterSmsCodeFragment<ViewModel extends BaseRegistratio
|
||||
|
||||
subheader.setText(requireContext().getString(R.string.RegistrationActivity_enter_the_code_we_sent_to_s, viewModel.getNumber().getFullFormattedNumber()));
|
||||
|
||||
MccMncProducer mccMncProducer = new MccMncProducer(requireContext());
|
||||
Disposable request = viewModel.validateSession(sessionE164, mccMncProducer.getMcc(), mccMncProducer.getMnc())
|
||||
Disposable request = viewModel.validateSession(sessionE164)
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(processor -> {
|
||||
if (!processor.hasResult()) {
|
||||
|
||||
@@ -355,15 +355,14 @@ public final class EnterPhoneNumberFragment extends LoggingFragment implements R
|
||||
public void onStart() {
|
||||
super.onStart();
|
||||
String sessionE164 = viewModel.getSessionE164();
|
||||
if (sessionE164 != null && viewModel.getSessionId() != null) {
|
||||
if (sessionE164 != null && viewModel.getSessionId() != null && viewModel.getCaptchaToken() == null) {
|
||||
checkIfSessionIsInProgressAndAdvance(sessionE164);
|
||||
}
|
||||
}
|
||||
|
||||
private void checkIfSessionIsInProgressAndAdvance(@NonNull String sessionE164) {
|
||||
NavController navController = NavHostFragment.findNavController(this);
|
||||
MccMncProducer mccMncProducer = new MccMncProducer(requireContext());
|
||||
Disposable request = viewModel.validateSession(sessionE164, mccMncProducer.getMcc(), mccMncProducer.getMnc())
|
||||
Disposable request = viewModel.validateSession(sessionE164)
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(processor -> {
|
||||
if (processor.hasResult() && processor.canSubmitProofImmediately()) {
|
||||
|
||||
@@ -254,7 +254,7 @@ public abstract class BaseRegistrationViewModel extends ViewModel {
|
||||
});
|
||||
}
|
||||
|
||||
public Single<RegistrationSessionProcessor.RegistrationSessionProcessorForSession> validateSession(String e164, @Nullable String mcc, @Nullable String mnc) {
|
||||
public Single<RegistrationSessionProcessor.RegistrationSessionProcessorForSession> validateSession(String e164) {
|
||||
String storedSessionId = null;
|
||||
if (e164.equals(getSessionE164())) {
|
||||
storedSessionId = getSessionId();
|
||||
@@ -264,7 +264,7 @@ public abstract class BaseRegistrationViewModel extends ViewModel {
|
||||
}
|
||||
|
||||
public Single<RegistrationSessionProcessor.RegistrationSessionProcessorForSession> getValidSession(String e164, @Nullable String mcc, @Nullable String mnc) {
|
||||
return validateSession(e164, mcc, mnc)
|
||||
return validateSession(e164)
|
||||
.flatMap(processor -> {
|
||||
if (processor.isInvalidSession()) {
|
||||
return verifyAccountRepository.requestValidSession(e164, getRegistrationSecret(), mcc, mnc)
|
||||
|
||||
@@ -35,10 +35,14 @@ import org.whispersystems.signalservice.api.push.exceptions.IncorrectCodeExcepti
|
||||
import org.whispersystems.signalservice.internal.ServiceResponse;
|
||||
import org.whispersystems.signalservice.internal.contacts.entities.TokenResponse;
|
||||
import org.whispersystems.signalservice.internal.push.RegistrationSessionMetadataResponse;
|
||||
import org.whispersystems.util.Base64;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
|
||||
import io.reactivex.rxjava3.core.Single;
|
||||
@@ -87,7 +91,11 @@ public final class RegistrationViewModel extends BaseRegistrationViewModel {
|
||||
}
|
||||
|
||||
public @Nullable String getFcmToken() {
|
||||
return savedState.get(STATE_FCM_TOKEN);
|
||||
String token = savedState.get(STATE_FCM_TOKEN);
|
||||
if (token == null || token.isEmpty()) {
|
||||
return null;
|
||||
}
|
||||
return token;
|
||||
}
|
||||
|
||||
@MainThread
|
||||
@@ -350,7 +358,24 @@ public final class RegistrationViewModel extends BaseRegistrationViewModel {
|
||||
}
|
||||
|
||||
private Single<Boolean> checkForValidKbsAuthCredentials() {
|
||||
return registrationRepository.getKbsAuthCredential(getRegistrationData())
|
||||
final List<String> kbsAuthTokenList = SignalStore.kbsValues().getKbsAuthTokenList();
|
||||
List<String> usernamePasswords = kbsAuthTokenList
|
||||
.stream()
|
||||
.limit(10)
|
||||
.map(t -> {
|
||||
try {
|
||||
return new String(Base64.decode(t.replace("Basic ", "").trim()), StandardCharsets.ISO_8859_1);
|
||||
} catch (IOException e) {
|
||||
return null;
|
||||
}
|
||||
})
|
||||
.collect(Collectors.toList());
|
||||
|
||||
if (usernamePasswords.isEmpty()) {
|
||||
return Single.just(false);
|
||||
}
|
||||
|
||||
return registrationRepository.getKbsAuthCredential(getRegistrationData(), usernamePasswords)
|
||||
.flatMap(p -> {
|
||||
if (p.getValid() != null) {
|
||||
return kbsRepository.getToken(p.getValid())
|
||||
|
||||
@@ -211,18 +211,7 @@ public class SignalServiceAccountManager {
|
||||
}
|
||||
}
|
||||
|
||||
public Single<ServiceResponse<BackupAuthCheckResponse>> checkBackupAuthCredentials(@Nonnull String e164, @Nonnull List<String> basicAuthTokens) {
|
||||
List<String> usernamePasswords = basicAuthTokens
|
||||
.stream()
|
||||
.limit(10)
|
||||
.map(t -> {
|
||||
try {
|
||||
return new String(Base64.decode(t.replace("Basic ", "").trim()), StandardCharsets.ISO_8859_1);
|
||||
} catch (IOException e) {
|
||||
return null;
|
||||
}
|
||||
})
|
||||
.collect(Collectors.toList());
|
||||
public Single<ServiceResponse<BackupAuthCheckResponse>> checkBackupAuthCredentials(@Nonnull String e164, @Nonnull List<String> usernamePasswords) {
|
||||
|
||||
return pushServiceSocket.checkBackupAuthCredentials(new BackupAuthCheckRequest(e164, usernamePasswords), DefaultResponseMapper.getDefault(BackupAuthCheckResponse.class));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user