diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/identity/AciServiceIdentifier.java b/service/src/main/java/org/whispersystems/textsecuregcm/identity/AciServiceIdentifier.java index c475b8d7e..0cf04fee0 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/identity/AciServiceIdentifier.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/identity/AciServiceIdentifier.java @@ -25,8 +25,6 @@ import org.whispersystems.textsecuregcm.util.UUIDUtil; description = "An identifier for an account based on the account's ACI" ) public record AciServiceIdentifier(UUID uuid) implements ServiceIdentifier { - private static final String SERVICE_ID_STRING_COUNTER_NAME = MetricsUtil.name(AciServiceIdentifier.class, "serviceIdString"); - private static final IdentityType IDENTITY_TYPE = IdentityType.ACI; @Override @@ -61,10 +59,7 @@ public record AciServiceIdentifier(UUID uuid) implements ServiceIdentifier { } public static AciServiceIdentifier valueOf(final String string) { - final boolean valid = !string.startsWith(IDENTITY_TYPE.getStringPrefix()); - final UUID uuid = UUID.fromString(valid ? string : string.substring(IDENTITY_TYPE.getStringPrefix().length())); - Metrics.counter(SERVICE_ID_STRING_COUNTER_NAME, "valid", String.valueOf(valid)).increment(); - return new AciServiceIdentifier(uuid); + return new AciServiceIdentifier(UUID.fromString(string)); } public static AciServiceIdentifier fromBytes(final byte[] bytes) { diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/identity/ServiceIdentifier.java b/service/src/main/java/org/whispersystems/textsecuregcm/identity/ServiceIdentifier.java index 690b0b81b..341a7f0eb 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/identity/ServiceIdentifier.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/identity/ServiceIdentifier.java @@ -56,6 +56,12 @@ public sealed interface ServiceIdentifier permits AciServiceIdentifier, PniServi */ byte[] toFixedWidthByteArray(); + /** + * Parse a service identifier string, which should be a plain UUID string for ACIs and a prefixed UUID string for PNIs + * + * @param string A service identifier string + * @return The parsed {@link ServiceIdentifier} + */ static ServiceIdentifier valueOf(final String string) { try { return AciServiceIdentifier.valueOf(string); diff --git a/service/src/test/java/org/whispersystems/textsecuregcm/identity/AciServiceIdentifierTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/identity/AciServiceIdentifierTest.java index 6cefcfe11..4b0d74119 100644 --- a/service/src/test/java/org/whispersystems/textsecuregcm/identity/AciServiceIdentifierTest.java +++ b/service/src/test/java/org/whispersystems/textsecuregcm/identity/AciServiceIdentifierTest.java @@ -53,11 +53,12 @@ class AciServiceIdentifierTest { final UUID uuid = UUID.randomUUID(); assertEquals(uuid, AciServiceIdentifier.valueOf(uuid.toString()).uuid()); - assertEquals(uuid, AciServiceIdentifier.valueOf("ACI:" + uuid).uuid()); assertThrows(IllegalArgumentException.class, () -> AciServiceIdentifier.valueOf("Not a valid UUID")); assertThrows(IllegalArgumentException.class, () -> AciServiceIdentifier.valueOf("PNI:" + uuid)); + assertThrows(IllegalArgumentException.class, () -> AciServiceIdentifier.valueOf("ACI:" + uuid).uuid()); } + @Test void fromBytes() { final UUID uuid = UUID.randomUUID(); diff --git a/service/src/test/java/org/whispersystems/textsecuregcm/identity/ServiceIdentifierTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/identity/ServiceIdentifierTest.java index b06bca9e1..289cb1cbd 100644 --- a/service/src/test/java/org/whispersystems/textsecuregcm/identity/ServiceIdentifierTest.java +++ b/service/src/test/java/org/whispersystems/textsecuregcm/identity/ServiceIdentifierTest.java @@ -32,12 +32,11 @@ class ServiceIdentifierTest { return Stream.of( Arguments.of(uuid.toString(), IdentityType.ACI, uuid), - Arguments.of("ACI:" + uuid, IdentityType.ACI, uuid), Arguments.of("PNI:" + uuid, IdentityType.PNI, uuid)); } @ParameterizedTest - @ValueSource(strings = {"Not a valid UUID", "BAD:a9edc243-3e93-45d4-95c6-e3a84cd4a254"}) + @ValueSource(strings = {"Not a valid UUID", "BAD:a9edc243-3e93-45d4-95c6-e3a84cd4a254", "ACI:a9edc243-3e93-45d4-95c6-e3a84cd4a254"}) void valueOfIllegalArgument(final String identifierString) { assertThrows(IllegalArgumentException.class, () -> ServiceIdentifier.valueOf(identifierString)); }