Add ability to set custom username discriminators.

This commit is contained in:
Alex Hart
2024-01-09 11:37:39 -04:00
committed by GitHub
parent fb75440769
commit 17a6fcafa1
12 changed files with 952 additions and 75 deletions

View File

@@ -787,6 +787,12 @@ public class SignalServiceAccountManager {
this.pushServiceSocket.confirmUsername(username, reserveUsernameResponse);
}
public UsernameLinkComponents updateUsernameLink(UsernameLink newUsernameLink) throws IOException {
UUID serverId = this.pushServiceSocket.createUsernameLink(Base64.encodeUrlSafeWithoutPadding(newUsernameLink.getEncryptedUsername()), true);
return new UsernameLinkComponents(newUsernameLink.getEntropy(), serverId);
}
public void deleteUsername() throws IOException {
this.pushServiceSocket.deleteUsername();
}
@@ -794,7 +800,7 @@ public class SignalServiceAccountManager {
public UsernameLinkComponents createUsernameLink(Username username) throws IOException {
try {
UsernameLink link = username.generateLink();
UUID serverId = this.pushServiceSocket.createUsernameLink(Base64.encodeUrlSafeWithPadding(link.getEncryptedUsername()));
UUID serverId = this.pushServiceSocket.createUsernameLink(Base64.encodeUrlSafeWithPadding(link.getEncryptedUsername()), false);
return new UsernameLinkComponents(link.getEntropy(), serverId);
} catch (BaseUsernameException e) {

View File

@@ -1147,8 +1147,8 @@ public class PushServiceSocket {
* @param encryptedUsername URL-safe base64-encoded encrypted username
* @return The serverId for the generated link.
*/
public UUID createUsernameLink(String encryptedUsername) throws IOException {
String response = makeServiceRequest(USERNAME_LINK_PATH, "PUT", JsonUtil.toJson(new SetUsernameLinkRequestBody(encryptedUsername)));
public UUID createUsernameLink(String encryptedUsername, boolean keepLinkHandle) throws IOException {
String response = makeServiceRequest(USERNAME_LINK_PATH, "PUT", JsonUtil.toJson(new SetUsernameLinkRequestBody(encryptedUsername, keepLinkHandle)));
SetUsernameLinkResponseBody parsed = JsonUtil.fromJson(response, SetUsernameLinkResponseBody.class);
return parsed.getUsernameLinkHandle();

View File

@@ -3,4 +3,4 @@ package org.whispersystems.signalservice.internal.push
import com.fasterxml.jackson.annotation.JsonProperty
/** Request body for setting a username link on the service. */
data class SetUsernameLinkRequestBody(@JsonProperty val usernameLinkEncryptedValue: String)
data class SetUsernameLinkRequestBody(@JsonProperty val usernameLinkEncryptedValue: String, @JsonProperty val keepLinkHandle: Boolean)