diff --git a/src/main/java/org/whispersystems/textsecuregcm/controllers/AccountController.java b/src/main/java/org/whispersystems/textsecuregcm/controllers/AccountController.java index 54d48cf93..9e7d6501e 100644 --- a/src/main/java/org/whispersystems/textsecuregcm/controllers/AccountController.java +++ b/src/main/java/org/whispersystems/textsecuregcm/controllers/AccountController.java @@ -135,6 +135,10 @@ public class AccountController { throw new WebApplicationException(Response.status(403).build()); } + if (accounts.isRelayListed(number)) { + throw new WebApplicationException(Response.status(417).build()); + } + Device device = new Device(); device.setId(Device.MASTER_ID); device.setAuthenticationCredentials(new AuthenticationCredentials(password)); diff --git a/src/main/java/org/whispersystems/textsecuregcm/storage/AccountsManager.java b/src/main/java/org/whispersystems/textsecuregcm/storage/AccountsManager.java index 345569f7f..fdfe7b13f 100644 --- a/src/main/java/org/whispersystems/textsecuregcm/storage/AccountsManager.java +++ b/src/main/java/org/whispersystems/textsecuregcm/storage/AccountsManager.java @@ -90,6 +90,13 @@ public class AccountsManager { else return Optional.absent(); } + public boolean isRelayListed(String number) { + byte[] token = Util.getContactToken(number); + Optional contact = directory.get(token); + + return contact.isPresent() && !Util.isEmpty(contact.get().getRelay()); + } + private void updateDirectory(Account account) { if (account.isActive()) { byte[] token = Util.getContactToken(account.getNumber());