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 cf4b2baea..d7a90d3f2 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/controllers/AccountController.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/controllers/AccountController.java @@ -461,13 +461,18 @@ public class AccountController { setAccountRegistrationLockFromAttributes(account, attributes); + final boolean hasDiscoverabilityChange = (account.isDiscoverableByPhoneNumber() != attributes.isDiscoverableByPhoneNumber()); + account.setUnidentifiedAccessKey(attributes.getUnidentifiedAccessKey()); account.setUnrestrictedUnidentifiedAccess(attributes.isUnrestrictedUnidentifiedAccess()); account.setPayments(attributes.getPayments()); account.setDiscoverableByPhoneNumber(attributes.isDiscoverableByPhoneNumber()); accounts.update(account); - directoryQueue.refreshRegisteredUser(account); + + if (hasDiscoverabilityChange) { + directoryQueue.refreshRegisteredUser(account); + } } @GET diff --git a/service/src/test/java/org/whispersystems/textsecuregcm/tests/controllers/AccountControllerTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/tests/controllers/AccountControllerTest.java index 7efb4a1e6..68d3f1e1f 100644 --- a/service/src/test/java/org/whispersystems/textsecuregcm/tests/controllers/AccountControllerTest.java +++ b/service/src/test/java/org/whispersystems/textsecuregcm/tests/controllers/AccountControllerTest.java @@ -1170,7 +1170,7 @@ public class AccountControllerTest { } @Test - public void testSetAccountAttributes() { + public void testSetAccountAttributesNoDiscoverabilityChange() { Response response = resources.getJerseyTest() .target("/v1/accounts/attributes/") @@ -1178,6 +1178,32 @@ public class AccountControllerTest { .header("Authorization", AuthHelper.getAuthHeader(AuthHelper.VALID_NUMBER, AuthHelper.VALID_PASSWORD)) .put(Entity.json(new AccountAttributes("keykeykeykey", false, 2222, null, null, null, null, true, null))); + assertThat(response.getStatus()).isEqualTo(204); + verify(directoryQueue, never()).refreshRegisteredUser(any()); + } + + @Test + public void testSetAccountAttributesEnableDiscovery() { + Response response = + resources.getJerseyTest() + .target("/v1/accounts/attributes/") + .request() + .header("Authorization", AuthHelper.getAuthHeader(AuthHelper.UNDISCOVERABLE_NUMBER, AuthHelper.UNDISCOVERABLE_PASSWORD)) + .put(Entity.json(new AccountAttributes("keykeykeykey", false, 2222, null, null, null, null, true, null))); + + assertThat(response.getStatus()).isEqualTo(204); + verify(directoryQueue, times(1)).refreshRegisteredUser(AuthHelper.UNDISCOVERABLE_ACCOUNT); + } + + @Test + public void testSetAccountAttributesDisableDiscovery() { + Response response = + resources.getJerseyTest() + .target("/v1/accounts/attributes/") + .request() + .header("Authorization", AuthHelper.getAuthHeader(AuthHelper.VALID_NUMBER, AuthHelper.VALID_PASSWORD)) + .put(Entity.json(new AccountAttributes("keykeykeykey", false, 2222, null, null, null, null, false, null))); + assertThat(response.getStatus()).isEqualTo(204); verify(directoryQueue, times(1)).refreshRegisteredUser(AuthHelper.VALID_ACCOUNT); }