From cba56f3263580abc7a16b4fa39492689cbb79042 Mon Sep 17 00:00:00 2001 From: Chris Eager Date: Fri, 22 Nov 2024 15:00:59 -0600 Subject: [PATCH] Add `@E164` to `ChangeNumberRequest` --- .../entities/ChangeNumberRequest.java | 2 ++ .../controllers/AccountControllerV2Test.java | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/entities/ChangeNumberRequest.java b/service/src/main/java/org/whispersystems/textsecuregcm/entities/ChangeNumberRequest.java index ec48f59fb..5c686868c 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/entities/ChangeNumberRequest.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/entities/ChangeNumberRequest.java @@ -20,6 +20,7 @@ import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; import org.signal.libsignal.protocol.IdentityKey; import org.whispersystems.textsecuregcm.util.ByteArrayAdapter; +import org.whispersystems.textsecuregcm.util.E164; import org.whispersystems.textsecuregcm.util.IdentityKeyAdapter; import org.whispersystems.textsecuregcm.util.RegistrationIdValidator; @@ -34,6 +35,7 @@ public record ChangeNumberRequest( Must not be combined with `sessionId`.""") @JsonDeserialize(using = ByteArrayAdapter.Deserializing.class) byte[] recoveryPassword, + @E164 @Schema(description="the new phone number for this account") @NotBlank String number, diff --git a/service/src/test/java/org/whispersystems/textsecuregcm/controllers/AccountControllerV2Test.java b/service/src/test/java/org/whispersystems/textsecuregcm/controllers/AccountControllerV2Test.java index f0b3e4fdf..1fdb43b54 100644 --- a/service/src/test/java/org/whispersystems/textsecuregcm/controllers/AccountControllerV2Test.java +++ b/service/src/test/java/org/whispersystems/textsecuregcm/controllers/AccountControllerV2Test.java @@ -217,6 +217,24 @@ class AccountControllerV2Test { assertEquals(AuthHelper.VALID_PNI, accountIdentityResponse.pni()); } + @Test + void changeNumberNonNormalizedNumber() throws Exception { + try (Response response = resources.getJerseyTest() + .target("/v2/accounts/number") + .request() + .header(HttpHeaders.AUTHORIZATION, + AuthHelper.getAuthHeader(AuthHelper.VALID_UUID, AuthHelper.VALID_PASSWORD)) + .put(Entity.entity( + // +4407700900111 is a valid number but not normalized - it has an optional '0' after the country code + new ChangeNumberRequest(encodeSessionId("session"), null, "+4407700900111", null, + new IdentityKey(Curve.generateKeyPair().getPublicKey()), + Collections.emptyList(), + Collections.emptyMap(), null, Collections.emptyMap()), + MediaType.APPLICATION_JSON_TYPE))) { + assertEquals(422, response.getStatus()); + } + } + @Test void unprocessableRequestJson() { final Invocation.Builder request = resources.getJerseyTest()