From ac36eeb84dc37f028dcde92a547f07afeaa8c122 Mon Sep 17 00:00:00 2001 From: Cody Henthorne Date: Wed, 9 Apr 2025 15:13:20 -0400 Subject: [PATCH] Use unauth WebSocket after quick restore for transfer mode decision. --- .../securesms/dependencies/AppDependencies.kt | 2 +- .../dependencies/ApplicationDependencyProvider.java | 5 +++-- .../dependencies/NetworkDependenciesModule.kt | 2 +- .../olddevice/TransferAccountViewModel.kt | 12 +++++++----- .../MockApplicationDependencyProvider.kt | 2 +- .../api/provisioning/ProvisioningApi.kt | 4 ++-- 6 files changed, 15 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/dependencies/AppDependencies.kt b/app/src/main/java/org/thoughtcrime/securesms/dependencies/AppDependencies.kt index ad63f54557..a092913279 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/dependencies/AppDependencies.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/dependencies/AppDependencies.kt @@ -431,7 +431,7 @@ object AppDependencies { fun provideCdsApi(authWebSocket: SignalWebSocket.AuthenticatedWebSocket): CdsApi fun provideRateLimitChallengeApi(authWebSocket: SignalWebSocket.AuthenticatedWebSocket): RateLimitChallengeApi fun provideMessageApi(authWebSocket: SignalWebSocket.AuthenticatedWebSocket, unauthWebSocket: SignalWebSocket.UnauthenticatedWebSocket): MessageApi - fun provideProvisioningApi(authWebSocket: SignalWebSocket.AuthenticatedWebSocket): ProvisioningApi + fun provideProvisioningApi(authWebSocket: SignalWebSocket.AuthenticatedWebSocket, unauthWebSocket: SignalWebSocket.UnauthenticatedWebSocket): ProvisioningApi fun provideCertificateApi(authWebSocket: SignalWebSocket.AuthenticatedWebSocket): CertificateApi fun provideProfileApi(authWebSocket: SignalWebSocket.AuthenticatedWebSocket, pushServiceSocket: PushServiceSocket): ProfileApi fun provideRemoteConfigApi(authWebSocket: SignalWebSocket.AuthenticatedWebSocket): RemoteConfigApi diff --git a/app/src/main/java/org/thoughtcrime/securesms/dependencies/ApplicationDependencyProvider.java b/app/src/main/java/org/thoughtcrime/securesms/dependencies/ApplicationDependencyProvider.java index 191bd22605..e4805ee977 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/dependencies/ApplicationDependencyProvider.java +++ b/app/src/main/java/org/thoughtcrime/securesms/dependencies/ApplicationDependencyProvider.java @@ -8,6 +8,7 @@ import android.os.HandlerThread; import androidx.annotation.NonNull; import androidx.annotation.VisibleForTesting; +import org.jetbrains.annotations.NotNull; import org.signal.billing.BillingFactory; import org.signal.core.util.ThreadUtil; import org.signal.core.util.billing.BillingApi; @@ -547,8 +548,8 @@ public class ApplicationDependencyProvider implements AppDependencies.Provider { } @Override - public @NonNull ProvisioningApi provideProvisioningApi(@NonNull SignalWebSocket.AuthenticatedWebSocket authWebSocket) { - return new ProvisioningApi(authWebSocket); + public @NonNull ProvisioningApi provideProvisioningApi(@NonNull SignalWebSocket.AuthenticatedWebSocket authWebSocket, SignalWebSocket.@NotNull UnauthenticatedWebSocket unauthWebSocket) { + return new ProvisioningApi(authWebSocket, unauthWebSocket); } @Override diff --git a/app/src/main/java/org/thoughtcrime/securesms/dependencies/NetworkDependenciesModule.kt b/app/src/main/java/org/thoughtcrime/securesms/dependencies/NetworkDependenciesModule.kt index d7c994c0cd..b61d279753 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/dependencies/NetworkDependenciesModule.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/dependencies/NetworkDependenciesModule.kt @@ -199,7 +199,7 @@ class NetworkDependenciesModule( } val provisioningApi: ProvisioningApi by lazy { - provider.provideProvisioningApi(authWebSocket) + provider.provideProvisioningApi(authWebSocket, unauthWebSocket) } val certificateApi: CertificateApi by lazy { diff --git a/app/src/main/java/org/thoughtcrime/securesms/registrationv3/olddevice/TransferAccountViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/registrationv3/olddevice/TransferAccountViewModel.kt index aab30b3d24..658481c3d3 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/registrationv3/olddevice/TransferAccountViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/registrationv3/olddevice/TransferAccountViewModel.kt @@ -30,13 +30,15 @@ class TransferAccountViewModel(reRegisterUri: String) : ViewModel() { val result = QuickRegistrationRepository.transferAccount(store.value.reRegisterUri, restoreMethodToken) store.update { it.copy(reRegisterResult = result, inProgress = false) } - val restoreMethod = QuickRegistrationRepository.waitForRestoreMethodSelectionOnNewDevice(restoreMethodToken) + if (result == QuickRegistrationRepository.TransferAccountResult.SUCCESS) { + val restoreMethod = QuickRegistrationRepository.waitForRestoreMethodSelectionOnNewDevice(restoreMethodToken) - if (restoreMethod != RestoreMethod.DECLINE) { - SignalStore.registration.restoringOnNewDevice = true + if (restoreMethod != RestoreMethod.DECLINE) { + SignalStore.registration.restoringOnNewDevice = true + } + + store.update { it.copy(restoreMethodSelected = restoreMethod) } } - - store.update { it.copy(restoreMethodSelected = restoreMethod) } } } diff --git a/app/src/test/java/org/thoughtcrime/securesms/dependencies/MockApplicationDependencyProvider.kt b/app/src/test/java/org/thoughtcrime/securesms/dependencies/MockApplicationDependencyProvider.kt index 5e489f5f82..98650e1673 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/dependencies/MockApplicationDependencyProvider.kt +++ b/app/src/test/java/org/thoughtcrime/securesms/dependencies/MockApplicationDependencyProvider.kt @@ -281,7 +281,7 @@ class MockApplicationDependencyProvider : AppDependencies.Provider { return mockk(relaxed = true) } - override fun provideProvisioningApi(authWebSocket: SignalWebSocket.AuthenticatedWebSocket): ProvisioningApi { + override fun provideProvisioningApi(authWebSocket: SignalWebSocket.AuthenticatedWebSocket, unauthWebSocket: SignalWebSocket.UnauthenticatedWebSocket): ProvisioningApi { return mockk(relaxed = true) } diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/provisioning/ProvisioningApi.kt b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/provisioning/ProvisioningApi.kt index 43dedc8c76..2ae58ce10c 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/provisioning/ProvisioningApi.kt +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/provisioning/ProvisioningApi.kt @@ -21,7 +21,7 @@ import kotlin.time.Duration.Companion.seconds /** * Linked and new device provisioning endpoints. */ -class ProvisioningApi(private val authWebSocket: SignalWebSocket.AuthenticatedWebSocket) { +class ProvisioningApi(private val authWebSocket: SignalWebSocket.AuthenticatedWebSocket, private val unauthWebSocket: SignalWebSocket.UnauthenticatedWebSocket) { /** * Encrypts and sends the [registrationProvisionMessage] from the current primary (old device) to the new device over @@ -56,7 +56,7 @@ class ProvisioningApi(private val authWebSocket: SignalWebSocket.AuthenticatedWe val request = WebSocketRequestMessage.get("/v1/devices/restore_account/${token.urlEncode()}?timeout=$timeout") return NetworkResult.fromWebSocket(NetworkResult.LongPollingWebSocketConverter(RestoreMethodBody::class)) { - authWebSocket.request(request, timeout.seconds) + unauthWebSocket.request(request, timeout.seconds) }.map { it.method ?: RestoreMethod.DECLINE }