From 3ea194255d67c8a87d3628e2e750cb3a319cdb43 Mon Sep 17 00:00:00 2001 From: moiseev-signal <122060238+moiseev-signal@users.noreply.github.com> Date: Fri, 5 Apr 2024 09:47:33 -0700 Subject: [PATCH] Add getUsername default method to CredentialsProvider --- .../api/util/CredentialsProvider.java | 11 ++++ .../websocket/WebSocketConnection.java | 6 +- .../api/util/CredentialsProviderTest.kt | 58 +++++++++++++++++++ 3 files changed, 70 insertions(+), 5 deletions(-) create mode 100644 libsignal-service/src/test/java/org/whispersystems/signalservice/api/util/CredentialsProviderTest.kt diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/util/CredentialsProvider.java b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/util/CredentialsProvider.java index 5ffae1bef5..c7b95bb9c6 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/util/CredentialsProvider.java +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/util/CredentialsProvider.java @@ -8,6 +8,7 @@ package org.whispersystems.signalservice.api.util; import org.whispersystems.signalservice.api.push.ServiceId.ACI; import org.whispersystems.signalservice.api.push.ServiceId.PNI; +import org.whispersystems.signalservice.api.push.SignalServiceAddress; public interface CredentialsProvider { ACI getAci(); @@ -15,4 +16,14 @@ public interface CredentialsProvider { String getE164(); int getDeviceId(); String getPassword(); + + default String getUsername() { + StringBuilder sb = new StringBuilder(); + sb.append(getAci().toString()); + if (getDeviceId() != SignalServiceAddress.DEFAULT_DEVICE_ID) { + sb.append("."); + sb.append(getDeviceId()); + } + return sb.toString(); + } } diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/websocket/WebSocketConnection.java b/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/websocket/WebSocketConnection.java index 0069653017..243da0afef 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/websocket/WebSocketConnection.java +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/websocket/WebSocketConnection.java @@ -133,11 +133,7 @@ public class WebSocketConnection extends WebSocketListener { String filledUri; if (credentialsProvider.isPresent()) { - String identifier = Objects.requireNonNull(credentialsProvider.get().getAci()).toString(); - if (credentialsProvider.get().getDeviceId() != SignalServiceAddress.DEFAULT_DEVICE_ID) { - identifier += "." + credentialsProvider.get().getDeviceId(); - } - filledUri = String.format(wsUri, identifier, credentialsProvider.get().getPassword()); + filledUri = String.format(wsUri, credentialsProvider.get().getUsername(), credentialsProvider.get().getPassword()); } else { filledUri = wsUri; } diff --git a/libsignal-service/src/test/java/org/whispersystems/signalservice/api/util/CredentialsProviderTest.kt b/libsignal-service/src/test/java/org/whispersystems/signalservice/api/util/CredentialsProviderTest.kt new file mode 100644 index 0000000000..936292cffe --- /dev/null +++ b/libsignal-service/src/test/java/org/whispersystems/signalservice/api/util/CredentialsProviderTest.kt @@ -0,0 +1,58 @@ +/* + * Copyright 2024 Signal Messenger, LLC + * SPDX-License-Identifier: AGPL-3.0-only + */ +package org.whispersystems.signalservice.api.util + +import org.junit.Assert.assertEquals +import org.junit.Assert.assertThrows +import org.junit.Test +import org.whispersystems.signalservice.api.push.ServiceId +import org.whispersystems.signalservice.api.push.SignalServiceAddress +import java.util.UUID + +class CredentialsProviderTest { + private fun makeProvider(aci: UUID?, deviceId: Int = SignalServiceAddress.DEFAULT_DEVICE_ID): CredentialsProvider { + return object : CredentialsProvider { + override fun getAci(): ServiceId.ACI? { + if (aci == null) { + return null + } + return ServiceId.ACI.from(aci) + } + + override fun getPni(): ServiceId.PNI { + TODO("Not used") + } + + override fun getE164(): String { + TODO("Not used") + } + + override fun getDeviceId(): Int { + return deviceId + } + + override fun getPassword(): String { + TODO("Not used") + } + } + } + + @Test + fun usernameWithDefaultDeviceId() { + val uuid = UUID.randomUUID() + assertEquals(uuid.toString(), makeProvider(uuid).username) + } + + @Test + fun usernameWithDeviceId() { + val uuid = UUID.randomUUID() + assertEquals("$uuid.42", makeProvider(uuid, 42).username) + } + + @Test + fun usernameWithNullAci() { + assertThrows(NullPointerException::class.java) { makeProvider(aci = null).username } + } +}