From f172f5d47ef8fb16d51465208331ef40f5d84db0 Mon Sep 17 00:00:00 2001 From: Cody Henthorne Date: Mon, 14 Apr 2025 19:59:32 -0400 Subject: [PATCH] Convert change number back to REST. --- .../app/changenumber/ChangeNumberRepository.kt | 2 +- .../api/registration/RegistrationApi.kt | 12 ++++++++++++ .../internal/push/PushServiceSocket.java | 11 +++++++++++ 3 files changed, 24 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/changenumber/ChangeNumberRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/changenumber/ChangeNumberRepository.kt index da8feb0380..2048288178 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/changenumber/ChangeNumberRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/changenumber/ChangeNumberRepository.kt @@ -267,7 +267,7 @@ class ChangeNumberRepository( SignalStore.misc.setPendingChangeNumberMetadata(metadata) withContext(Dispatchers.IO) { - result = SignalNetwork.account.changeNumber(request) + result = accountManager.registrationApi.changeNumber(request) } val possibleError = result.getCause() as? MismatchedDevicesException diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/registration/RegistrationApi.kt b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/registration/RegistrationApi.kt index eafb34e22b..26b42f9566 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/registration/RegistrationApi.kt +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/registration/RegistrationApi.kt @@ -7,6 +7,7 @@ package org.whispersystems.signalservice.api.registration import org.whispersystems.signalservice.api.NetworkResult import org.whispersystems.signalservice.api.account.AccountAttributes +import org.whispersystems.signalservice.api.account.ChangePhoneNumberRequest import org.whispersystems.signalservice.api.account.PreKeyCollection import org.whispersystems.signalservice.api.provisioning.RestoreMethod import org.whispersystems.signalservice.internal.push.BackupV2AuthCheckResponse @@ -133,4 +134,15 @@ class RegistrationApi( pushServiceSocket.setRestoreMethodChosen(token, RestoreMethodBody(method = method)) } } + + /** + * Changes the phone number that an account is associated with. + * + * `PUT /v2/accounts/number` + */ + fun changeNumber(requestBody: ChangePhoneNumberRequest): NetworkResult { + return NetworkResult.fromFetch { + pushServiceSocket.changeNumber(requestBody) + } + } } 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 8f649baeb2..b7a38407ba 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 @@ -29,6 +29,7 @@ import org.signal.storageservice.protos.groups.GroupResponse; import org.signal.storageservice.protos.groups.Member; import org.whispersystems.signalservice.api.NetworkResult; import org.whispersystems.signalservice.api.account.AccountAttributes; +import org.whispersystems.signalservice.api.account.ChangePhoneNumberRequest; import org.whispersystems.signalservice.api.account.PreKeyCollection; import org.whispersystems.signalservice.api.crypto.SealedSenderAccess; import org.whispersystems.signalservice.api.groupsv2.GroupsV2AuthorizationString; @@ -368,6 +369,16 @@ public class PushServiceSocket { return JsonUtil.fromJson(response, VerifyAccountResponse.class); } + + public VerifyAccountResponse changeNumber(@Nonnull ChangePhoneNumberRequest changePhoneNumberRequest) + throws IOException + { + String requestBody = JsonUtil.toJson(changePhoneNumberRequest); + String responseBody = makeServiceRequest("/v2/accounts/number", "PUT", requestBody); + + return JsonUtil.fromJson(responseBody, VerifyAccountResponse.class); + } + public void setRestoreMethodChosen(@Nonnull String token, @Nonnull RestoreMethodBody request) throws IOException { String body = JsonUtil.toJson(request); makeServiceRequest(String.format(Locale.US, SET_RESTORE_METHOD_PATH, urlEncode(token)), "PUT", body, NO_HEADERS, UNOPINIONATED_HANDLER, SealedSenderAccess.NONE);