Use unauth WebSocket after quick restore for transfer mode decision.

This commit is contained in:
Cody Henthorne
2025-04-09 15:13:20 -04:00
committed by Michelle Tang
parent 143b2b5bd5
commit ac36eeb84d
6 changed files with 15 additions and 12 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -199,7 +199,7 @@ class NetworkDependenciesModule(
}
val provisioningApi: ProvisioningApi by lazy {
provider.provideProvisioningApi(authWebSocket)
provider.provideProvisioningApi(authWebSocket, unauthWebSocket)
}
val certificateApi: CertificateApi by lazy {

View File

@@ -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) }
}
}

View File

@@ -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)
}

View File

@@ -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
}