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 fd9289ede..f9600038b 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/controllers/AccountController.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/controllers/AccountController.java @@ -527,7 +527,10 @@ public class AccountController { @PUT @Produces(MediaType.APPLICATION_JSON) @Path("/pin/") - public void setPin(@Auth Account account, @Valid DeprecatedPin accountLock) { + public void setPin(@Auth Account account, @Valid DeprecatedPin accountLock, @HeaderParam("User-Agent") String userAgent) { + // TODO Remove once PIN-based reglocks have been deprecated + logger.info("PIN set by User-Agent: {}", userAgent); + account.setPin(accountLock.getPin()); account.setRegistrationLock(null, null); @@ -537,7 +540,10 @@ public class AccountController { @Timed @DELETE @Path("/pin/") - public void removePin(@Auth Account account) { + public void removePin(@Auth Account account, @HeaderParam("User-Agent") String userAgent) { + // TODO Remove once PIN-based reglocks have been deprecated + logger.info("PIN removed by User-Agent: {}", userAgent); + account.setPin(null); accounts.update(account); } diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/controllers/MessageController.java b/service/src/main/java/org/whispersystems/textsecuregcm/controllers/MessageController.java index 823160f44..3fd3cf256 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/controllers/MessageController.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/controllers/MessageController.java @@ -64,6 +64,7 @@ import org.whispersystems.textsecuregcm.auth.AmbiguousIdentifier; import org.whispersystems.textsecuregcm.auth.Anonymous; import org.whispersystems.textsecuregcm.auth.CombinedUnidentifiedSenderAccessKeys; import org.whispersystems.textsecuregcm.auth.OptionalAccess; +import org.whispersystems.textsecuregcm.auth.StoredRegistrationLock; import org.whispersystems.textsecuregcm.configuration.dynamic.DynamicMessageRateConfiguration; import org.whispersystems.textsecuregcm.entities.AccountMismatchedDevices; import org.whispersystems.textsecuregcm.entities.AccountStaleDevices; @@ -496,6 +497,11 @@ public class MessageController { public OutgoingMessageEntityList getPendingMessages(@Auth Account account, @HeaderParam("User-Agent") String userAgent) { assert account.getAuthenticatedDevice().isPresent(); + // TODO Remove once PIN-based reglocks have been deprecated + if (account.getRegistrationLock().requiresClientRegistrationLock() && account.getRegistrationLock().hasDeprecatedPin()) { + logger.info("User-Agent with deprecated PIN-based registration lock: {}", userAgent); + } + if (!Util.isEmpty(account.getAuthenticatedDevice().get().getApnId())) { RedisOperation.unchecked(() -> apnFallbackManager.cancel(account, account.getAuthenticatedDevice().get())); } diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/websocket/AuthenticatedConnectListener.java b/service/src/main/java/org/whispersystems/textsecuregcm/websocket/AuthenticatedConnectListener.java index c735724d9..0098b4694 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/websocket/AuthenticatedConnectListener.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/websocket/AuthenticatedConnectListener.java @@ -68,6 +68,11 @@ public class AuthenticatedConnectListener implements WebSocketConnectListener { context.getClient(), retrySchedulingExecutor); + // TODO Remove once PIN-based reglocks have been deprecated + if (account.getRegistrationLock().requiresClientRegistrationLock() && account.getRegistrationLock().hasDeprecatedPin()) { + log.info("User-Agent with deprecated PIN-based registration lock: {}", context.getClient().getUserAgent()); + } + openWebsocketCounter.inc(); RedisOperation.unchecked(() -> apnFallbackManager.cancel(account, device)); diff --git a/service/src/test/java/org/whispersystems/textsecuregcm/tests/controllers/MessageControllerTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/tests/controllers/MessageControllerTest.java index b0933f429..91d700146 100644 --- a/service/src/test/java/org/whispersystems/textsecuregcm/tests/controllers/MessageControllerTest.java +++ b/service/src/test/java/org/whispersystems/textsecuregcm/tests/controllers/MessageControllerTest.java @@ -70,6 +70,7 @@ import org.mockito.stubbing.Answer; import org.whispersystems.textsecuregcm.auth.AmbiguousIdentifier; import org.whispersystems.textsecuregcm.auth.DisabledPermittedAccount; import org.whispersystems.textsecuregcm.auth.OptionalAccess; +import org.whispersystems.textsecuregcm.auth.StoredRegistrationLock; import org.whispersystems.textsecuregcm.configuration.dynamic.DynamicConfiguration; import org.whispersystems.textsecuregcm.configuration.dynamic.DynamicMessageRateConfiguration; import org.whispersystems.textsecuregcm.configuration.dynamic.DynamicRateLimitChallengeConfiguration; @@ -484,6 +485,7 @@ class MessageControllerTest { OutgoingMessageEntityList messagesList = new OutgoingMessageEntityList(messages, false); when(messagesManager.getMessagesForDevice(eq(AuthHelper.VALID_UUID), eq(1L), anyString(), anyBoolean())).thenReturn(messagesList); + when(AuthHelper.VALID_ACCOUNT.getRegistrationLock()).thenReturn(mock(StoredRegistrationLock.class)); OutgoingMessageEntityList response = resources.getJerseyTest().target("/v1/messages/")