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 60a42a59eb..6744302f59 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/dependencies/AppDependencies.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/dependencies/AppDependencies.kt @@ -393,7 +393,7 @@ object AppDependencies { fun provideAttachmentApi(authWebSocket: SignalWebSocket.AuthenticatedWebSocket, pushServiceSocket: PushServiceSocket): AttachmentApi fun provideLinkDeviceApi(authWebSocket: SignalWebSocket.AuthenticatedWebSocket): LinkDeviceApi fun provideRegistrationApi(pushServiceSocket: PushServiceSocket): RegistrationApi - fun provideStorageServiceApi(pushServiceSocket: PushServiceSocket): StorageServiceApi + fun provideStorageServiceApi(authWebSocket: SignalWebSocket.AuthenticatedWebSocket, pushServiceSocket: PushServiceSocket): StorageServiceApi fun provideAuthWebSocket(signalServiceConfigurationSupplier: Supplier, libSignalNetworkSupplier: Supplier): SignalWebSocket.AuthenticatedWebSocket fun provideUnauthWebSocket(signalServiceConfigurationSupplier: Supplier, libSignalNetworkSupplier: Supplier): SignalWebSocket.UnauthenticatedWebSocket fun provideAccountApi(authWebSocket: SignalWebSocket.AuthenticatedWebSocket): AccountApi 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 e7c94b85ae..174b258c81 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/dependencies/ApplicationDependencyProvider.java +++ b/app/src/main/java/org/thoughtcrime/securesms/dependencies/ApplicationDependencyProvider.java @@ -487,8 +487,8 @@ public class ApplicationDependencyProvider implements AppDependencies.Provider { } @Override - public @NonNull StorageServiceApi provideStorageServiceApi(@NonNull PushServiceSocket pushServiceSocket) { - return new StorageServiceApi(pushServiceSocket); + public @NonNull StorageServiceApi provideStorageServiceApi(@NonNull SignalWebSocket.AuthenticatedWebSocket authWebSocket, @NonNull PushServiceSocket pushServiceSocket) { + return new StorageServiceApi(authWebSocket, pushServiceSocket); } @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 59550bc42f..4a38d6bd64 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/dependencies/NetworkDependenciesModule.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/dependencies/NetworkDependenciesModule.kt @@ -154,7 +154,7 @@ class NetworkDependenciesModule( } val storageServiceApi: StorageServiceApi by lazy { - provider.provideStorageServiceApi(pushServiceSocket) + provider.provideStorageServiceApi(authWebSocket, pushServiceSocket) } val accountApi: AccountApi by lazy { 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 276bc27324..67f6cc8736 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/dependencies/MockApplicationDependencyProvider.kt +++ b/app/src/test/java/org/thoughtcrime/securesms/dependencies/MockApplicationDependencyProvider.kt @@ -234,7 +234,7 @@ class MockApplicationDependencyProvider : AppDependencies.Provider { return mockk(relaxed = true) } - override fun provideStorageServiceApi(pushServiceSocket: PushServiceSocket): StorageServiceApi { + override fun provideStorageServiceApi(authWebSocket: SignalWebSocket.AuthenticatedWebSocket, pushServiceSocket: PushServiceSocket): StorageServiceApi { return mockk(relaxed = true) } diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/storage/StorageServiceApi.kt b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/storage/StorageServiceApi.kt index 17f1551616..eb0518a47d 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/storage/StorageServiceApi.kt +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/storage/StorageServiceApi.kt @@ -5,17 +5,24 @@ package org.whispersystems.signalservice.api.storage +import okhttp3.Credentials import org.whispersystems.signalservice.api.NetworkResult +import org.whispersystems.signalservice.api.websocket.SignalWebSocket +import org.whispersystems.signalservice.internal.get import org.whispersystems.signalservice.internal.push.PushServiceSocket import org.whispersystems.signalservice.internal.storage.protos.ReadOperation import org.whispersystems.signalservice.internal.storage.protos.StorageItems import org.whispersystems.signalservice.internal.storage.protos.StorageManifest import org.whispersystems.signalservice.internal.storage.protos.WriteOperation +import org.whispersystems.signalservice.internal.websocket.WebSocketRequestMessage /** * Class to interact with storage service endpoints. */ -class StorageServiceApi(private val pushServiceSocket: PushServiceSocket) { +class StorageServiceApi( + private val authWebSocket: SignalWebSocket.AuthenticatedWebSocket, + private val pushServiceSocket: PushServiceSocket +) { /** * Retrieves an auth string that's needed to make other storage requests. @@ -23,9 +30,9 @@ class StorageServiceApi(private val pushServiceSocket: PushServiceSocket) { * GET /v1/storage/auth */ fun getAuth(): NetworkResult { - return NetworkResult.fromFetch { - pushServiceSocket.getStorageAuth() - } + val request = WebSocketRequestMessage.get("/v1/storage/auth") + return NetworkResult.fromWebSocketRequest(authWebSocket, request, StorageAuthResponse::class) + .map { Credentials.basic(it.username, it.password) } } /** diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/push/PushServiceSocket.java b/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/push/PushServiceSocket.java index 0ed1a70e57..6c7f7033f3 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/push/PushServiceSocket.java +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/push/PushServiceSocket.java @@ -88,7 +88,6 @@ import org.whispersystems.signalservice.api.push.exceptions.SubmitVerificationCo import org.whispersystems.signalservice.api.push.exceptions.TokenNotAcceptedException; import org.whispersystems.signalservice.api.push.exceptions.UnregisteredUserException; import org.whispersystems.signalservice.api.registration.RestoreMethodBody; -import org.whispersystems.signalservice.api.storage.StorageAuthResponse; import org.whispersystems.signalservice.api.subscriptions.ActiveSubscription; import org.whispersystems.signalservice.api.subscriptions.PayPalConfirmPaymentIntentResponse; import org.whispersystems.signalservice.api.subscriptions.PayPalCreatePaymentIntentResponse; @@ -175,7 +174,6 @@ import okhttp3.Call; import okhttp3.Callback; import okhttp3.ConnectionPool; import okhttp3.ConnectionSpec; -import okhttp3.Credentials; import okhttp3.Dns; import okhttp3.HttpUrl; import okhttp3.Interceptor; @@ -1113,13 +1111,6 @@ public class PushServiceSocket { } } - public String getStorageAuth() throws IOException { - String response = makeServiceRequest("/v1/storage/auth", "GET", null); - StorageAuthResponse authResponse = JsonUtil.fromJson(response, StorageAuthResponse.class); - - return Credentials.basic(authResponse.getUsername(), authResponse.getPassword()); - } - public StorageManifest getStorageManifest(String authToken) throws IOException { try (Response response = makeStorageRequest(authToken, "/v1/storage/manifest", "GET", null, NO_HANDLER)) { return StorageManifest.ADAPTER.decode(readBodyBytes(response));