Use UUIDs instead of phone numbers as account identifiers in clustered message cache

This commit is contained in:
Jon Chambers
2020-07-20 12:18:10 -04:00
parent 6fc1b4c6c0
commit f9f93c77e2
16 changed files with 148 additions and 115 deletions

View File

@@ -612,6 +612,8 @@ public class AccountController {
}
private Account createAccount(String number, String password, String userAgent, AccountAttributes accountAttributes) {
Optional<Account> maybeExistingAccount = accounts.get(number);
Device device = new Device();
device.setId(Device.MASTER_ID);
device.setAuthenticationCredentials(new AuthenticationCredentials(password));
@@ -643,7 +645,7 @@ public class AccountController {
directoryQueue.deleteRegisteredUser(account.getUuid(), number);
}
messagesManager.clear(number);
messagesManager.clear(number, maybeExistingAccount.map(Account::getUuid).orElse(null));
pendingAccounts.remove(number);
return account;

View File

@@ -117,7 +117,7 @@ public class DeviceController {
directoryQueue.deleteRegisteredUser(account.getUuid(), account.getNumber());
}
messages.clear(account.getNumber(), deviceId);
messages.clear(account.getNumber(), account.getUuid(), deviceId);
}
@Timed
@@ -205,7 +205,7 @@ public class DeviceController {
device.setCreated(System.currentTimeMillis());
account.get().addDevice(device);
messages.clear(account.get().getNumber(), device.getId());
messages.clear(account.get().getNumber(), account.get().getUuid(), device.getId());
accounts.update(account.get());
pendingDevices.remove(number);

View File

@@ -189,6 +189,7 @@ public class MessageController {
}
return messagesManager.getMessagesForDevice(account.getNumber(),
account.getUuid(),
account.getAuthenticatedDevice().get().getId());
}
@@ -203,6 +204,7 @@ public class MessageController {
WebSocketConnection.messageTime.update(System.currentTimeMillis() - timestamp);
Optional<OutgoingMessageEntity> message = messagesManager.delete(account.getNumber(),
account.getUuid(),
account.getAuthenticatedDevice().get().getId(),
source, timestamp);
@@ -222,6 +224,7 @@ public class MessageController {
public void removePendingMessage(@Auth Account account, @PathParam("uuid") UUID uuid) {
try {
Optional<OutgoingMessageEntity> message = messagesManager.delete(account.getNumber(),
account.getUuid(),
account.getAuthenticatedDevice().get().getId(),
uuid);