From 342323a7e6ff0c5da31e93b1897a47e1d2373784 Mon Sep 17 00:00:00 2001 From: Jon Chambers Date: Mon, 15 Nov 2021 11:31:01 -0500 Subject: [PATCH] Use canonical usernames throughout `AccountsManager` --- .../controllers/AccountController.java | 2 +- .../textsecuregcm/storage/AccountsManager.java | 15 ++++++++++----- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/controllers/AccountController.java b/service/src/main/java/org/whispersystems/textsecuregcm/controllers/AccountController.java index 6eedc1811..1184bd4ed 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/controllers/AccountController.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/controllers/AccountController.java @@ -624,7 +624,7 @@ public class AccountController { rateLimiters.getUsernameSetLimiter().validate(auth.getAccount().getUuid()); try { - accounts.setUsername(auth.getAccount(), UsernameValidator.getCanonicalUsername(username)); + accounts.setUsername(auth.getAccount(), username); } catch (final UsernameNotAvailableException e) { return Response.status(Response.Status.CONFLICT).build(); } diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/storage/AccountsManager.java b/service/src/main/java/org/whispersystems/textsecuregcm/storage/AccountsManager.java index ad56e1fa6..4d0acac38 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/storage/AccountsManager.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/storage/AccountsManager.java @@ -40,6 +40,7 @@ import org.whispersystems.textsecuregcm.securestorage.SecureStorageClient; import org.whispersystems.textsecuregcm.sqs.DirectoryQueue; import org.whispersystems.textsecuregcm.util.Constants; import org.whispersystems.textsecuregcm.util.SystemMapper; +import org.whispersystems.textsecuregcm.util.UsernameValidator; import org.whispersystems.textsecuregcm.util.Util; public class AccountsManager { @@ -266,11 +267,13 @@ public class AccountsManager { } public Account setUsername(final Account account, final String username) throws UsernameNotAvailableException { - if (account.getUsername().map(username::equals).orElse(false)) { + final String canonicalUsername = UsernameValidator.getCanonicalUsername(username); + + if (account.getUsername().map(canonicalUsername::equals).orElse(false)) { return account; } - if (reservedUsernames.isReserved(username, account.getUuid())) { + if (reservedUsernames.isReserved(canonicalUsername, account.getUuid())) { throw new UsernameNotAvailableException(); } @@ -279,7 +282,7 @@ public class AccountsManager { return updateWithRetries( account, a -> true, - a -> accounts.setUsername(a, username), + a -> accounts.setUsername(a, canonicalUsername), () -> accounts.getByAccountIdentifier(account.getUuid()).orElseThrow()); } @@ -478,10 +481,12 @@ public class AccountsManager { public Optional getByUsername(final String username) { try (final Timer.Context ignored = getByUsernameTimer.time()) { - Optional account = redisGetByUsername(username); + final String canonicalUsername = UsernameValidator.getCanonicalUsername(username); + + Optional account = redisGetByUsername(canonicalUsername); if (account.isEmpty()) { - account = accounts.getByUsername(username); + account = accounts.getByUsername(canonicalUsername); account.ifPresent(this::redisSet); }