From d1c02ac454faed3c1ce169b5d569e5be5f0a501d Mon Sep 17 00:00:00 2001 From: Cody Henthorne Date: Tue, 22 Jul 2025 09:35:02 -0400 Subject: [PATCH] Add server message to group patch exception. --- .../internal/push/GroupPatchResponse.kt | 15 +++++++++++++++ .../internal/push/PushServiceSocket.java | 13 +++++++++++-- .../GroupPatchNotAcceptedException.java | 6 ++++++ 3 files changed, 32 insertions(+), 2 deletions(-) create mode 100644 libsignal-service/src/main/java/org/whispersystems/signalservice/internal/push/GroupPatchResponse.kt diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/push/GroupPatchResponse.kt b/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/push/GroupPatchResponse.kt new file mode 100644 index 0000000000..aaa1a7c2b3 --- /dev/null +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/push/GroupPatchResponse.kt @@ -0,0 +1,15 @@ +/* + * Copyright 2025 Signal Messenger, LLC + * SPDX-License-Identifier: AGPL-3.0-only + */ + +package org.whispersystems.signalservice.internal.push + +import com.fasterxml.jackson.annotation.JsonCreator +import com.fasterxml.jackson.annotation.JsonProperty + +/** Error response when attempting to patch group state. */ +data class GroupPatchResponse @JsonCreator constructor( + @JsonProperty val code: Int?, + @JsonProperty val message: String? +) 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 f5c07fc542..dfbac46dc2 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 @@ -35,7 +35,6 @@ import org.whispersystems.signalservice.api.messages.calls.CallingResponse; import org.whispersystems.signalservice.api.push.SignalServiceAddress; import org.whispersystems.signalservice.api.push.SignedPreKeyEntity; import org.whispersystems.signalservice.api.push.exceptions.AlreadyVerifiedException; -import org.whispersystems.signalservice.api.remoteconfig.RemoteConfigResponse; import org.whispersystems.signalservice.api.push.exceptions.AuthorizationFailedException; import org.whispersystems.signalservice.api.push.exceptions.ChallengeRequiredException; import org.whispersystems.signalservice.api.push.exceptions.ConflictException; @@ -66,6 +65,7 @@ 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.remoteconfig.RemoteConfigResponse; import org.whispersystems.signalservice.api.svr.Svr3Credentials; import org.whispersystems.signalservice.api.util.CredentialsProvider; import org.whispersystems.signalservice.api.util.Tls12SocketFactory; @@ -1718,7 +1718,16 @@ public class PushServiceSocket { throw new NonSuccessfulResponseCodeException(500, "Missing timestamp header"); } - if (responseCode == 400) throw new GroupPatchNotAcceptedException(); + if (responseCode == 400) { + String message = null; + try { + message = JsonUtil.fromJson(body.string(), GroupPatchResponse.class).getMessage(); + } catch (IOException e) { + Log.w(TAG, "Unable to parse group patch error", e); + } + + throw message != null ? new GroupPatchNotAcceptedException(message) : new GroupPatchNotAcceptedException(); + } }; private static final ResponseCodeHandler GROUPS_V2_GET_JOIN_INFO_HANDLER = (responseCode, body, getHeader) -> { diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/push/exceptions/GroupPatchNotAcceptedException.java b/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/push/exceptions/GroupPatchNotAcceptedException.java index faf051b47a..24096d7c76 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/push/exceptions/GroupPatchNotAcceptedException.java +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/push/exceptions/GroupPatchNotAcceptedException.java @@ -2,8 +2,14 @@ package org.whispersystems.signalservice.internal.push.exceptions; import org.whispersystems.signalservice.api.push.exceptions.NonSuccessfulResponseCodeException; +import javax.annotation.Nonnull; + public final class GroupPatchNotAcceptedException extends NonSuccessfulResponseCodeException { public GroupPatchNotAcceptedException() { super(400); } + + public GroupPatchNotAcceptedException(@Nonnull String message) { + super(400, message); + } }