diff --git a/app/src/main/java/org/thoughtcrime/securesms/delete/DeleteAccountRepository.java b/app/src/main/java/org/thoughtcrime/securesms/delete/DeleteAccountRepository.java index bceecbd08c..8737c5e2d2 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/delete/DeleteAccountRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/delete/DeleteAccountRepository.java @@ -16,7 +16,10 @@ import org.thoughtcrime.securesms.database.model.GroupRecord; import org.thoughtcrime.securesms.database.model.InAppPaymentSubscriberRecord; import org.thoughtcrime.securesms.dependencies.AppDependencies; import org.thoughtcrime.securesms.groups.GroupManager; +import org.thoughtcrime.securesms.net.SignalNetwork; import org.thoughtcrime.securesms.util.ServiceUtil; +import org.whispersystems.signalservice.api.NetworkResultUtil; +import org.whispersystems.signalservice.api.push.exceptions.NonSuccessfulResponseCodeException; import org.whispersystems.signalservice.internal.EmptyResponse; import org.whispersystems.signalservice.internal.ServiceResponse; @@ -103,7 +106,7 @@ class DeleteAccountRepository { Log.i(TAG, "deleteAccount: attempting to delete account from server..."); try { - AppDependencies.getSignalServiceAccountManager().deleteAccount(); + NetworkResultUtil.toBasicLegacy(SignalNetwork.account().deleteAccount()); } catch (IOException e) { if (e instanceof NonSuccessfulResponseCodeException && ((NonSuccessfulResponseCodeException) e).code == 4401) { Log.i(TAG, "deleteAccount: WebSocket closed with expected status after delete account, moving forward as delete was successful"); diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/SignalServiceAccountManager.java b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/SignalServiceAccountManager.java index acf28d1608..d81d49b3c3 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/SignalServiceAccountManager.java +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/SignalServiceAccountManager.java @@ -96,10 +96,6 @@ public class SignalServiceAccountManager { return NetworkResultUtil.toBasicLegacy(accountApi.whoAmI()); } - public void deleteAccount() throws IOException { - this.pushServiceSocket.deleteAccount(); - } - /** * Request a push challenge. A number will be pushed to the GCM (FCM) id. This can then be used * during SMS/call requests to bypass the CAPTCHA. 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 f42799f78a..9b3606f51d 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 @@ -149,8 +149,6 @@ public class PushServiceSocket { private static final String TAG = PushServiceSocket.class.getSimpleName(); - private static final String DELETE_ACCOUNT_PATH = "/v1/accounts/me"; - private static final String SET_RESTORE_METHOD_PATH = "/v1/devices/restore_account/%s"; private static final String ATTACHMENT_KEY_DOWNLOAD_PATH = "attachments/%s"; @@ -429,10 +427,6 @@ public class PushServiceSocket { return JsonUtil.fromJson(response, BackupV3AuthCheckResponse.class); } - public void deleteAccount() throws IOException { - makeServiceRequest(DELETE_ACCOUNT_PATH, "DELETE", null); - } - 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)); diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/websocket/LibSignalChatConnection.kt b/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/websocket/LibSignalChatConnection.kt index a5edadab85..64d1bdce36 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/websocket/LibSignalChatConnection.kt +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/websocket/LibSignalChatConnection.kt @@ -19,6 +19,7 @@ import org.signal.libsignal.net.AuthenticatedChatConnection import org.signal.libsignal.net.ChatConnection import org.signal.libsignal.net.ChatConnectionListener import org.signal.libsignal.net.ChatServiceException +import org.signal.libsignal.net.ConnectionInvalidatedException import org.signal.libsignal.net.DeviceDeregisteredException import org.signal.libsignal.net.Network import org.signal.libsignal.net.UnauthenticatedChatConnection @@ -545,8 +546,16 @@ class LibSignalChatConnection( Log.i(TAG, "$name disconnected") } else { Log.i(TAG, "$name connection unexpectedly closed", disconnectReason) + + val downstreamThrowable = when (disconnectReason) { + // This matches the behavior of OkHttpWebSocketConnection when the connection terminates + // by the server before the response is received. + is ConnectionInvalidatedException -> NonSuccessfulResponseCodeException(4401) + else -> disconnectReason + } + for (pendingResponse in pendingResponses) { - pendingResponse.onError(disconnectReason) + pendingResponse.onError(downstreamThrowable) } } chatConnection = null diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/websocket/OkHttpWebSocketConnection.java b/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/websocket/OkHttpWebSocketConnection.java index c99060f7a8..e4df5261e7 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/websocket/OkHttpWebSocketConnection.java +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/websocket/OkHttpWebSocketConnection.java @@ -354,7 +354,7 @@ public class OkHttpWebSocketConnection extends WebSocketListener implements WebS Iterator> iterator = outgoingRequests.entrySet().iterator(); IOException exception; - if (code == 403) { + if (code == 403 || code == 4401) { exception = new NonSuccessfulResponseCodeException(code); } else { exception = new SocketException("Closed unexpectedly");