From c09ae9a234d462387502ae26635fb21311804b4e Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Mon, 24 Jul 2023 17:48:34 -0400 Subject: [PATCH] Ensure we use SVR2 endpoint for checking RRP. --- .../internal/push/BackupAuthCheckRequest.kt | 4 ++ .../internal/push/PushServiceSocket.java | 41 +++++++++++++++---- 2 files changed, 37 insertions(+), 8 deletions(-) diff --git a/libsignal/service/src/main/java/org/whispersystems/signalservice/internal/push/BackupAuthCheckRequest.kt b/libsignal/service/src/main/java/org/whispersystems/signalservice/internal/push/BackupAuthCheckRequest.kt index 1128b674fd..31243bea1a 100644 --- a/libsignal/service/src/main/java/org/whispersystems/signalservice/internal/push/BackupAuthCheckRequest.kt +++ b/libsignal/service/src/main/java/org/whispersystems/signalservice/internal/push/BackupAuthCheckRequest.kt @@ -30,6 +30,10 @@ data class BackupAuthCheckResponse @JsonCreator constructor( private fun String.toBasic(): String { return "Basic ${encode(StandardCharsets.ISO_8859_1).base64()}" } + + fun merge(other: BackupAuthCheckResponse): BackupAuthCheckResponse { + return BackupAuthCheckResponse(this.matches + other.matches) + } } /** 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 2db6444737..28f16acbb1 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 @@ -297,7 +297,8 @@ public class PushServiceSocket { private static final String REPORT_SPAM = "/v1/messages/report/%s/%s"; - private static final String BACKUP_AUTH_CHECK = "/v1/backup/auth/check"; + private static final String BACKUP_AUTH_CHECK_V1 = "/v1/backup/auth/check"; + private static final String BACKUP_AUTH_CHECK_V2 = "/v2/backup/auth/check"; private static final String CALL_LINK_CREATION_AUTH = "/v1/call-link/create-auth"; private static final String SERVER_DELIVERED_TIMESTAMP_HEADER = "X-Signal-Timestamp"; @@ -973,17 +974,41 @@ public class PushServiceSocket { public Single> checkBackupAuthCredentials(@Nonnull BackupAuthCheckRequest request, @Nonnull ResponseMapper responseMapper) { - Single> requestSingle = Single.fromCallable(() -> { - try (Response response = getServiceConnection(BACKUP_AUTH_CHECK, "POST", jsonRequestBody(JsonUtil.toJson(request)), Collections.emptyMap(), Optional.empty(), false)) { + return Single + .zip( + createBackupAuthCheckSingle(BACKUP_AUTH_CHECK_V1, request, responseMapper), + createBackupAuthCheckSingle(BACKUP_AUTH_CHECK_V2, request, responseMapper), + (v1, v2) -> { + if (v1.getResult().isPresent() && v2.getResult().isPresent()) { + BackupAuthCheckResponse v1Result = v1.getResult().get(); + BackupAuthCheckResponse v2Result = v2.getResult().get(); + BackupAuthCheckResponse merged = v1Result.merge(v2Result); + + return new ServiceResponse<>(v2.getStatus(), null, merged, null, null); + } else if (v1.getResult().isEmpty() && v2.getResult().isEmpty()) { + return v2; + } else if (v2.getResult().isEmpty()) { + return v1; + } else { + return v2; + } + } + ) + .subscribeOn(Schedulers.io()) + .observeOn(Schedulers.io()) + .onErrorReturn(ServiceResponse::forUnknownError); + } + + private Single> createBackupAuthCheckSingle(@Nonnull String path, + @Nonnull BackupAuthCheckRequest request, + @Nonnull ResponseMapper responseMapper) + { + return Single.fromCallable(() -> { + try (Response response = getServiceConnection(path, "POST", jsonRequestBody(JsonUtil.toJson(request)), Collections.emptyMap(), Optional.empty(), false)) { String body = response.body() != null ? readBodyString(response.body()): ""; return responseMapper.map(response.code(), body, response::header, false); } }); - - return requestSingle - .subscribeOn(Schedulers.io()) - .observeOn(Schedulers.io()) - .onErrorReturn(ServiceResponse::forUnknownError); } /**