From 331ff83cd5b502d40595a2f57823329defe0950f Mon Sep 17 00:00:00 2001 From: Jon Chambers <63609320+jon-signal@users.noreply.github.com> Date: Thu, 29 Jul 2021 11:51:14 -0400 Subject: [PATCH] Drop legacy PIN-based registration lock plumbing --- .../textsecuregcm/WhisperServerService.java | 2 - .../auth/StoredRegistrationLock.java | 20 +- .../controllers/AccountController.java | 31 +--- .../controllers/MessageController.java | 6 - .../entities/AccountAttributes.java | 11 +- .../textsecuregcm/entities/DeprecatedPin.java | 31 ---- .../textsecuregcm/storage/Account.java | 16 +- .../RegistrationLockVersionCounter.java | 96 ---------- .../AuthenticatedConnectListener.java | 5 - ...ConcurrentModificationIntegrationTest.java | 3 +- .../RegistrationLockVersionCounterTest.java | 122 ------------- .../controllers/AccountControllerTest.java | 171 ++---------------- .../controllers/DeviceControllerTest.java | 22 +-- .../controllers/MessageControllerTest.java | 2 - .../tests/storage/AccountsManagerTest.java | 10 +- 15 files changed, 45 insertions(+), 503 deletions(-) delete mode 100644 service/src/main/java/org/whispersystems/textsecuregcm/entities/DeprecatedPin.java delete mode 100644 service/src/main/java/org/whispersystems/textsecuregcm/storage/RegistrationLockVersionCounter.java delete mode 100644 service/src/test/java/org/whispersystems/textsecuregcm/storage/RegistrationLockVersionCounterTest.java diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/WhisperServerService.java b/service/src/main/java/org/whispersystems/textsecuregcm/WhisperServerService.java index 4c2759eb3..d10215471 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/WhisperServerService.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/WhisperServerService.java @@ -176,7 +176,6 @@ import org.whispersystems.textsecuregcm.storage.ProfilesManager; import org.whispersystems.textsecuregcm.storage.PubSubManager; import org.whispersystems.textsecuregcm.storage.PushChallengeDynamoDb; import org.whispersystems.textsecuregcm.storage.PushFeedbackProcessor; -import org.whispersystems.textsecuregcm.storage.RegistrationLockVersionCounter; import org.whispersystems.textsecuregcm.storage.RemoteConfigs; import org.whispersystems.textsecuregcm.storage.RemoteConfigsManager; import org.whispersystems.textsecuregcm.storage.ReportMessageDynamoDb; @@ -487,7 +486,6 @@ public class WhisperServerService extends Application registrationLockSalt; - private final Optional deprecatedPin; - private final long lastSeen; - public StoredRegistrationLock(Optional registrationLock, Optional registrationLockSalt, Optional deprecatedPin, long lastSeen) { + public StoredRegistrationLock(Optional registrationLock, Optional registrationLockSalt, long lastSeen) { this.registrationLock = registrationLock; this.registrationLockSalt = registrationLockSalt; - this.deprecatedPin = deprecatedPin; this.lastSeen = lastSeen; } public boolean requiresClientRegistrationLock() { - return ((registrationLock.isPresent() && registrationLockSalt.isPresent()) || deprecatedPin.isPresent()) && System.currentTimeMillis() - lastSeen < TimeUnit.DAYS.toMillis(7); + return registrationLock.isPresent() && registrationLockSalt.isPresent() && System.currentTimeMillis() - lastSeen < TimeUnit.DAYS.toMillis(7); } public boolean needsFailureCredentials() { return registrationLock.isPresent() && registrationLockSalt.isPresent(); } - public boolean hasDeprecatedPin() { - return deprecatedPin.isPresent(); - } - public long getTimeRemaining() { return TimeUnit.DAYS.toMillis(7) - (System.currentTimeMillis() - lastSeen); } - public boolean verify(@Nullable String clientRegistrationLock, @Nullable String clientDeprecatedPin) { - if (Util.isEmpty(clientRegistrationLock) && Util.isEmpty(clientDeprecatedPin)) { + public boolean verify(@Nullable String clientRegistrationLock) { + if (Util.isEmpty(clientRegistrationLock)) { return false; } if (registrationLock.isPresent() && registrationLockSalt.isPresent() && !Util.isEmpty(clientRegistrationLock)) { return new AuthenticationCredentials(registrationLock.get(), registrationLockSalt.get()).verify(clientRegistrationLock); - } else if (deprecatedPin.isPresent() && !Util.isEmpty(clientDeprecatedPin)) { - return MessageDigest.isEqual(deprecatedPin.get().getBytes(), clientDeprecatedPin.getBytes()); } else { return false; } @@ -63,6 +53,6 @@ public class StoredRegistrationLock { @VisibleForTesting public StoredRegistrationLock forTime(long timestamp) { - return new StoredRegistrationLock(registrationLock, registrationLockSalt, deprecatedPin, timestamp); + return new StoredRegistrationLock(registrationLock, registrationLockSalt, timestamp); } } 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 db8f4ea6c..9d4c64588 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/controllers/AccountController.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/controllers/AccountController.java @@ -53,7 +53,6 @@ import org.whispersystems.textsecuregcm.configuration.dynamic.DynamicSignupCaptc import org.whispersystems.textsecuregcm.entities.AccountAttributes; import org.whispersystems.textsecuregcm.entities.AccountCreationResult; import org.whispersystems.textsecuregcm.entities.ApnRegistrationId; -import org.whispersystems.textsecuregcm.entities.DeprecatedPin; import org.whispersystems.textsecuregcm.entities.DeviceName; import org.whispersystems.textsecuregcm.entities.GcmRegistrationId; import org.whispersystems.textsecuregcm.entities.RegistrationLock; @@ -360,11 +359,11 @@ public class AccountController { if (existingRegistrationLock.isPresent() && existingRegistrationLock.get().requiresClientRegistrationLock()) { rateLimiters.getVerifyLimiter().clear(number); - if (!Util.isEmpty(accountAttributes.getRegistrationLock()) || !Util.isEmpty(accountAttributes.getPin())) { + if (!Util.isEmpty(accountAttributes.getRegistrationLock())) { rateLimiters.getPinLimiter().validate(number); } - if (!existingRegistrationLock.get().verify(accountAttributes.getRegistrationLock(), accountAttributes.getPin())) { + if (!existingRegistrationLock.get().verify(accountAttributes.getRegistrationLock())) { throw new WebApplicationException(Response.status(423) .entity(new RegistrationLockFailure(existingRegistrationLock.get().getTimeRemaining(), existingRegistrationLock.get().needsFailureCredentials() ? existingBackupCredentials.orElseThrow() : null)) @@ -489,7 +488,6 @@ public class AccountController { accounts.update(account, a -> { a.setRegistrationLock(credentials.getHashedAuthenticationToken(), credentials.getSalt()); - a.setPin(null); }); } @@ -500,31 +498,6 @@ public class AccountController { accounts.update(account, a -> a.setRegistrationLock(null, null)); } - @Timed - @PUT - @Produces(MediaType.APPLICATION_JSON) - @Path("/pin/") - 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); - - accounts.update(account, a -> { - a.setPin(accountLock.getPin()); - a.setRegistrationLock(null, null); - }); - } - - @Timed - @DELETE - @Path("/pin/") - - 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); - - accounts.update(account, a -> a.setPin(null)); - } - @Timed @PUT @Path("/name/") 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 d4fe7df91..a493bbde2 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/controllers/MessageController.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/controllers/MessageController.java @@ -64,7 +64,6 @@ 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; @@ -502,11 +501,6 @@ 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/entities/AccountAttributes.java b/service/src/main/java/org/whispersystems/textsecuregcm/entities/AccountAttributes.java index 6ed74ad1c..ab69edffd 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/entities/AccountAttributes.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/entities/AccountAttributes.java @@ -21,9 +21,6 @@ public class AccountAttributes { @Size(max = 204, message = "This field must be less than 50 characters") private String name; - @JsonProperty - private String pin; - @JsonProperty private String registrationLock; @@ -42,11 +39,11 @@ public class AccountAttributes { public AccountAttributes() {} @VisibleForTesting - public AccountAttributes(boolean fetchesMessages, int registrationId, String name, String pin, String registrationLock, boolean discoverableByPhoneNumber, final DeviceCapabilities capabilities) { + public AccountAttributes(boolean fetchesMessages, int registrationId, String name, String registrationLock, + boolean discoverableByPhoneNumber, final DeviceCapabilities capabilities) { this.fetchesMessages = fetchesMessages; this.registrationId = registrationId; this.name = name; - this.pin = pin; this.registrationLock = registrationLock; this.discoverableByPhoneNumber = discoverableByPhoneNumber; this.capabilities = capabilities; @@ -64,10 +61,6 @@ public class AccountAttributes { return name; } - public String getPin() { - return pin; - } - public String getRegistrationLock() { return registrationLock; } diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/entities/DeprecatedPin.java b/service/src/main/java/org/whispersystems/textsecuregcm/entities/DeprecatedPin.java deleted file mode 100644 index 31371a31f..000000000 --- a/service/src/main/java/org/whispersystems/textsecuregcm/entities/DeprecatedPin.java +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright 2013-2020 Signal Messenger, LLC - * SPDX-License-Identifier: AGPL-3.0-only - */ - -package org.whispersystems.textsecuregcm.entities; - -import com.fasterxml.jackson.annotation.JsonProperty; -import com.google.common.annotations.VisibleForTesting; -import javax.validation.constraints.NotEmpty; -import javax.validation.constraints.Size; - -public class DeprecatedPin { - - @JsonProperty - @NotEmpty - @Size(min=4, max=20) - private String pin; - - public DeprecatedPin() {} - - @VisibleForTesting - public DeprecatedPin(String pin) { - this.pin = pin; - } - - public String getPin() { - return pin; - } - -} diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/storage/Account.java b/service/src/main/java/org/whispersystems/textsecuregcm/storage/Account.java index b7e94b7c4..afdc6524d 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/storage/Account.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/storage/Account.java @@ -48,9 +48,6 @@ public class Account implements Principal { @JsonProperty private String avatar; - @JsonProperty - private String pin; - @JsonProperty private String registrationLock; @@ -309,20 +306,11 @@ public class Account implements Principal { this.avatar = avatar; } - public void setPin(String pin) { - requireNotStale(); - - this.pin = pin; - } - public void setRegistrationLockFromAttributes(final AccountAttributes attributes) { - if (!Util.isEmpty(attributes.getPin())) { - setPin(attributes.getPin()); - } else if (!Util.isEmpty(attributes.getRegistrationLock())) { + if (!Util.isEmpty(attributes.getRegistrationLock())) { AuthenticationCredentials credentials = new AuthenticationCredentials(attributes.getRegistrationLock()); setRegistrationLock(credentials.getHashedAuthenticationToken(), credentials.getSalt()); } else { - setPin(null); setRegistrationLock(null, null); } } @@ -337,7 +325,7 @@ public class Account implements Principal { public StoredRegistrationLock getRegistrationLock() { requireNotStale(); - return new StoredRegistrationLock(Optional.ofNullable(registrationLock), Optional.ofNullable(registrationLockSalt), Optional.ofNullable(pin), getLastSeen()); + return new StoredRegistrationLock(Optional.ofNullable(registrationLock), Optional.ofNullable(registrationLockSalt), getLastSeen()); } public Optional getUnidentifiedAccessKey() { diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/storage/RegistrationLockVersionCounter.java b/service/src/main/java/org/whispersystems/textsecuregcm/storage/RegistrationLockVersionCounter.java deleted file mode 100644 index f2551d7d7..000000000 --- a/service/src/main/java/org/whispersystems/textsecuregcm/storage/RegistrationLockVersionCounter.java +++ /dev/null @@ -1,96 +0,0 @@ -/* - * Copyright 2013-2020 Signal Messenger, LLC - * SPDX-License-Identifier: AGPL-3.0-only - */ - -package org.whispersystems.textsecuregcm.storage; - -import com.codahale.metrics.MetricRegistry; -import com.codahale.metrics.ScheduledReporter; -import io.dropwizard.metrics.MetricsFactory; -import io.dropwizard.metrics.ReporterFactory; -import io.lettuce.core.KeyValue; -import io.lettuce.core.cluster.api.sync.RedisAdvancedClusterCommands; -import org.whispersystems.textsecuregcm.auth.StoredRegistrationLock; -import org.whispersystems.textsecuregcm.redis.FaultTolerantRedisCluster; - -import java.util.List; -import java.util.Map; -import java.util.Optional; -import java.util.UUID; -import java.util.stream.Collectors; - -import static com.codahale.metrics.MetricRegistry.name; - -/** - * Counts the number of accounts that have the old or new (or neither) versions of a registration lock and publishes - * the results to our metric aggregator. This class can likely be removed after a few rounds of data collection. - */ -public class RegistrationLockVersionCounter extends AccountDatabaseCrawlerListener { - - private final FaultTolerantRedisCluster redisCluster; - private final MetricsFactory metricsFactory; - - static final String REGLOCK_COUNT_KEY = "ReglockVersionCounter::reglockCount"; - static final String PIN_KEY = "pin"; - static final String REGLOCK_KEY = "reglock"; - - public RegistrationLockVersionCounter(final FaultTolerantRedisCluster redisCluster, final MetricsFactory metricsFactory) { - this.redisCluster = redisCluster; - this.metricsFactory = metricsFactory; - } - - @Override - public void onCrawlStart() { - redisCluster.useCluster(connection -> connection.sync().hset(REGLOCK_COUNT_KEY, Map.of(PIN_KEY, "0", REGLOCK_KEY, "0"))); - } - - @Override - protected void onCrawlChunk(final Optional fromUuid, final List chunkAccounts) { - int pinCount = 0; - int reglockCount = 0; - - for (final Account account : chunkAccounts) { - final StoredRegistrationLock storedRegistrationLock = account.getRegistrationLock(); - - if (storedRegistrationLock.requiresClientRegistrationLock()) { - if (storedRegistrationLock.hasDeprecatedPin()) { - pinCount++; - } else { - reglockCount++; - } - } - } - - incrementReglockCounts(pinCount, reglockCount); - } - - private void incrementReglockCounts(final int pinCount, final int reglockCount) { - redisCluster.useCluster(connection -> { - final RedisAdvancedClusterCommands commands = connection.sync(); - - commands.hincrby(REGLOCK_COUNT_KEY, PIN_KEY, pinCount); - commands.hincrby(REGLOCK_COUNT_KEY, REGLOCK_KEY, reglockCount); - }); - } - - @Override - public void onCrawlEnd(final Optional fromUuid) { - final Map countsByReglockType = - redisCluster.withCluster(connection -> connection.sync().hmget(REGLOCK_COUNT_KEY, PIN_KEY, REGLOCK_KEY)) - .stream() - .collect(Collectors.toMap(KeyValue::getKey, keyValue -> keyValue.hasValue() ? keyValue.map(Integer::parseInt).getValue() : 0)); - - final MetricRegistry metricRegistry = new MetricRegistry(); - - for (final Map.Entry entry : countsByReglockType.entrySet()) { - metricRegistry.gauge(name(getClass(), entry.getKey()), () -> entry::getValue); - } - - for (final ReporterFactory reporterFactory : metricsFactory.getReporters()) { - try (final ScheduledReporter reporter = reporterFactory.build(metricRegistry)) { - reporter.report(); - } - } - } -} 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 0098b4694..c735724d9 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/websocket/AuthenticatedConnectListener.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/websocket/AuthenticatedConnectListener.java @@ -68,11 +68,6 @@ 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/storage/AccountsManagerConcurrentModificationIntegrationTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/storage/AccountsManagerConcurrentModificationIntegrationTest.java index 1cd72928b..ee705642d 100644 --- a/service/src/test/java/org/whispersystems/textsecuregcm/storage/AccountsManagerConcurrentModificationIntegrationTest.java +++ b/service/src/test/java/org/whispersystems/textsecuregcm/storage/AccountsManagerConcurrentModificationIntegrationTest.java @@ -217,7 +217,6 @@ class AccountsManagerConcurrentModificationIntegrationTest { modifyAccount(uuid, account -> account.setCurrentProfileVersion(currentProfileVersion)), modifyAccount(uuid, account -> account.setIdentityKey(identityKey)), modifyAccount(uuid, account -> account.setUnidentifiedAccessKey(unidentifiedAccessKey)), - modifyAccount(uuid, account -> account.setPin(pin)), modifyAccount(uuid, account -> account.setRegistrationLock(credentials.getHashedAuthenticationToken(), credentials.getSalt())), modifyAccount(uuid, account -> account.setUnrestrictedUnidentifiedAccess(unrestrictedUnidentifiedAccess)), modifyDevice(uuid, Device.MASTER_ID, device-> device.setLastSeen(lastSeen)), @@ -259,7 +258,7 @@ class AccountsManagerConcurrentModificationIntegrationTest { () -> assertEquals(currentProfileVersion, account.getCurrentProfileVersion().get()), () -> assertEquals(identityKey, account.getIdentityKey()), () -> assertArrayEquals(unidentifiedAccessKey, account.getUnidentifiedAccessKey().get()), - () -> assertTrue(account.getRegistrationLock().verify(clientRegistrationLock, pin)), + () -> assertTrue(account.getRegistrationLock().verify(clientRegistrationLock)), () -> assertEquals(unrestrictedUnidentifiedAcces, account.isUnrestrictedUnidentifiedAccess()) ); } diff --git a/service/src/test/java/org/whispersystems/textsecuregcm/storage/RegistrationLockVersionCounterTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/storage/RegistrationLockVersionCounterTest.java deleted file mode 100644 index bd9c48430..000000000 --- a/service/src/test/java/org/whispersystems/textsecuregcm/storage/RegistrationLockVersionCounterTest.java +++ /dev/null @@ -1,122 +0,0 @@ -/* - * Copyright 2013-2020 Signal Messenger, LLC - * SPDX-License-Identifier: AGPL-3.0-only - */ - -package org.whispersystems.textsecuregcm.storage; - -import com.codahale.metrics.Gauge; -import com.codahale.metrics.MetricRegistry; -import com.codahale.metrics.ScheduledReporter; -import io.dropwizard.metrics.MetricsFactory; -import io.dropwizard.metrics.ReporterFactory; -import io.lettuce.core.KeyValue; -import io.lettuce.core.cluster.api.sync.RedisAdvancedClusterCommands; -import org.junit.Before; -import org.junit.Test; -import org.mockito.ArgumentCaptor; -import org.whispersystems.textsecuregcm.auth.StoredRegistrationLock; -import org.whispersystems.textsecuregcm.tests.util.RedisClusterHelper; - -import java.util.List; -import java.util.Map; -import java.util.Optional; - -import static com.codahale.metrics.MetricRegistry.name; -import static org.junit.Assert.assertEquals; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -public class RegistrationLockVersionCounterTest { - - private RedisAdvancedClusterCommands redisCommands; - private MetricsFactory metricsFactory; - - private RegistrationLockVersionCounter registrationLockVersionCounter; - - @Before - public void setUp() { - //noinspection unchecked - redisCommands = mock(RedisAdvancedClusterCommands.class); - metricsFactory = mock(MetricsFactory.class); - - registrationLockVersionCounter = new RegistrationLockVersionCounter(RedisClusterHelper.buildMockRedisCluster(redisCommands), metricsFactory); - } - - @Test - public void testOnCrawlChunkNoReglock() { - final Account account = mock(Account.class); - final StoredRegistrationLock registrationLock = mock(StoredRegistrationLock.class); - - when(account.getRegistrationLock()).thenReturn(registrationLock); - when(registrationLock.hasDeprecatedPin()).thenReturn(false); - when(registrationLock.needsFailureCredentials()).thenReturn(false); - - registrationLockVersionCounter.onCrawlChunk(Optional.empty(), List.of(account)); - - verifyCount(0, 0); - } - - @Test - public void testOnCrawlChunkPin() { - final Account account = mock(Account.class); - final StoredRegistrationLock registrationLock = mock(StoredRegistrationLock.class); - - when(account.getRegistrationLock()).thenReturn(registrationLock); - when(registrationLock.requiresClientRegistrationLock()).thenReturn(true); - when(registrationLock.hasDeprecatedPin()).thenReturn(true); - - registrationLockVersionCounter.onCrawlChunk(Optional.empty(), List.of(account)); - - verifyCount(1, 0); - } - - @Test - public void testOnCrawlChunkReglock() { - final Account account = mock(Account.class); - final StoredRegistrationLock registrationLock = mock(StoredRegistrationLock.class); - - when(account.getRegistrationLock()).thenReturn(registrationLock); - when(registrationLock.requiresClientRegistrationLock()).thenReturn(true); - when(registrationLock.hasDeprecatedPin()).thenReturn(false); - - registrationLockVersionCounter.onCrawlChunk(Optional.empty(), List.of(account)); - - verifyCount(0, 1); - } - - private void verifyCount(final int pinCount, final int reglockCount) { - verify(redisCommands).hincrby(RegistrationLockVersionCounter.REGLOCK_COUNT_KEY, RegistrationLockVersionCounter.PIN_KEY, pinCount); - verify(redisCommands).hincrby(RegistrationLockVersionCounter.REGLOCK_COUNT_KEY, RegistrationLockVersionCounter.REGLOCK_KEY, reglockCount); - } - - @Test - public void testOnCrawlEnd() { - final int pinCount = 7; - final int reglockCount = 83; - - final ReporterFactory reporterFactory = mock(ReporterFactory.class); - final ScheduledReporter reporter = mock(ScheduledReporter.class); - - when(metricsFactory.getReporters()).thenReturn(List.of(reporterFactory)); - - final ArgumentCaptor registryCaptor = ArgumentCaptor.forClass(MetricRegistry.class); - when(reporterFactory.build(any())).thenReturn(reporter); - - when(redisCommands.hmget(eq(RegistrationLockVersionCounter.REGLOCK_COUNT_KEY), any())).thenReturn(List.of( - KeyValue.just(RegistrationLockVersionCounter.PIN_KEY, String.valueOf(pinCount)), - KeyValue.just(RegistrationLockVersionCounter.REGLOCK_KEY, String.valueOf(reglockCount)))); - - registrationLockVersionCounter.onCrawlEnd(Optional.empty()); - - verify(reporterFactory).build(registryCaptor.capture()); - verify(reporter).report(); - - @SuppressWarnings("rawtypes") final Map gauges = registryCaptor.getValue().getGauges(); - assertEquals(pinCount, gauges.get(name(RegistrationLockVersionCounter.class, RegistrationLockVersionCounter.PIN_KEY)).getValue()); - assertEquals(reglockCount, gauges.get(name(RegistrationLockVersionCounter.class, RegistrationLockVersionCounter.REGLOCK_KEY)).getValue()); - } -} 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 f2dcba8b0..728be8203 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 @@ -65,7 +65,6 @@ import org.whispersystems.textsecuregcm.controllers.RateLimitExceededException; import org.whispersystems.textsecuregcm.entities.AccountAttributes; import org.whispersystems.textsecuregcm.entities.AccountCreationResult; import org.whispersystems.textsecuregcm.entities.ApnRegistrationId; -import org.whispersystems.textsecuregcm.entities.DeprecatedPin; import org.whispersystems.textsecuregcm.entities.GcmRegistrationId; import org.whispersystems.textsecuregcm.entities.RegistrationLock; import org.whispersystems.textsecuregcm.entities.RegistrationLockFailure; @@ -189,13 +188,13 @@ class AccountControllerTest { when(rateLimiters.getUsernameSetLimiter()).thenReturn(usernameSetLimiter); when(senderPinAccount.getLastSeen()).thenReturn(System.currentTimeMillis()); - when(senderPinAccount.getRegistrationLock()).thenReturn(new StoredRegistrationLock(Optional.empty(), Optional.empty(), Optional.of("31337"), System.currentTimeMillis())); + when(senderPinAccount.getRegistrationLock()).thenReturn(new StoredRegistrationLock(Optional.empty(), Optional.empty(), System.currentTimeMillis())); when(senderHasStorage.getUuid()).thenReturn(UUID.randomUUID()); when(senderHasStorage.isStorageSupported()).thenReturn(true); - when(senderHasStorage.getRegistrationLock()).thenReturn(new StoredRegistrationLock(Optional.empty(), Optional.empty(), Optional.empty(), System.currentTimeMillis())); + when(senderHasStorage.getRegistrationLock()).thenReturn(new StoredRegistrationLock(Optional.empty(), Optional.empty(), System.currentTimeMillis())); - when(senderRegLockAccount.getRegistrationLock()).thenReturn(new StoredRegistrationLock(Optional.of(registrationLockCredentials.getHashedAuthenticationToken()), Optional.of(registrationLockCredentials.getSalt()), Optional.empty(), System.currentTimeMillis())); + when(senderRegLockAccount.getRegistrationLock()).thenReturn(new StoredRegistrationLock(Optional.of(registrationLockCredentials.getHashedAuthenticationToken()), Optional.of(registrationLockCredentials.getSalt()), System.currentTimeMillis())); when(senderRegLockAccount.getLastSeen()).thenReturn(System.currentTimeMillis()); when(senderRegLockAccount.getUuid()).thenReturn(SENDER_REG_LOCK_UUID); @@ -947,7 +946,7 @@ class AccountControllerTest { .target(String.format("/v1/accounts/code/%s", "1234")) .request() .header("Authorization", AuthHelper.getAuthHeader(SENDER_OLD, "bar")) - .put(Entity.entity(new AccountAttributes(false, 2222, null, null, null, true, null), + .put(Entity.entity(new AccountAttributes(false, 2222, null, null, true, null), MediaType.APPLICATION_JSON_TYPE)); assertThat(response.getStatus()).isEqualTo(403); @@ -962,7 +961,7 @@ class AccountControllerTest { .target(String.format("/v1/accounts/code/%s", "1111")) .request() .header("Authorization", AuthHelper.getAuthHeader(SENDER, "bar")) - .put(Entity.entity(new AccountAttributes(false, 3333, null, null, null, true, null), + .put(Entity.entity(new AccountAttributes(false, 3333, null, null, true, null), MediaType.APPLICATION_JSON_TYPE)); assertThat(response.getStatus()).isEqualTo(403); @@ -970,21 +969,6 @@ class AccountControllerTest { verifyNoMoreInteractions(accountsManager); } - @Test - void testVerifyPin() throws Exception { - AccountCreationResult result = - resources.getJerseyTest() - .target(String.format("/v1/accounts/code/%s", "333333")) - .request() - .header("Authorization", AuthHelper.getAuthHeader(SENDER_PIN, "bar")) - .put(Entity.entity(new AccountAttributes(false, 3333, null, "31337", null, true, null), - MediaType.APPLICATION_JSON_TYPE), AccountCreationResult.class); - - assertThat(result.getUuid()).isNotNull(); - - verify(pinLimiter).validate(eq(SENDER_PIN)); - } - @Test void testVerifyRegistrationLock() throws Exception { AccountCreationResult result = @@ -992,7 +976,7 @@ class AccountControllerTest { .target(String.format("/v1/accounts/code/%s", "666666")) .request() .header("Authorization", AuthHelper.getAuthHeader(SENDER_REG_LOCK, "bar")) - .put(Entity.entity(new AccountAttributes(false, 3333, null, null, Hex.toStringCondensed(registration_lock_key), true, null), + .put(Entity.entity(new AccountAttributes(false, 3333, null, Hex.toStringCondensed(registration_lock_key), true, null), MediaType.APPLICATION_JSON_TYPE), AccountCreationResult.class); assertThat(result.getUuid()).isNotNull(); @@ -1007,7 +991,7 @@ class AccountControllerTest { .target(String.format("/v1/accounts/code/%s", "666666")) .request() .header("Authorization", AuthHelper.getAuthHeader(SENDER_REG_LOCK, "bar")) - .put(Entity.entity(new AccountAttributes(false, 3333, null, null, Hex.toStringCondensed(registration_lock_key), true, null), + .put(Entity.entity(new AccountAttributes(false, 3333, null, Hex.toStringCondensed(registration_lock_key), true, null), MediaType.APPLICATION_JSON_TYPE), AccountCreationResult.class); assertThat(result.getUuid()).isNotNull(); @@ -1030,7 +1014,7 @@ class AccountControllerTest { .target(String.format("/v1/accounts/code/%s", "666666")) .request() .header("Authorization", AuthHelper.getAuthHeader(SENDER_REG_LOCK, "bar")) - .put(Entity.entity(new AccountAttributes(false, 3333, null, null, null, true, null), + .put(Entity.entity(new AccountAttributes(false, 3333, null, null, true, null), MediaType.APPLICATION_JSON_TYPE), AccountCreationResult.class); assertThat(result.getUuid()).isNotNull(); @@ -1041,21 +1025,6 @@ class AccountControllerTest { } } - @Test - void testVerifyWrongPin() throws Exception { - Response response = - resources.getJerseyTest() - .target(String.format("/v1/accounts/code/%s", "333333")) - .request() - .header("Authorization", AuthHelper.getAuthHeader(SENDER_PIN, "bar")) - .put(Entity.entity(new AccountAttributes(false, 3333, null, "31338", null, true, null), - MediaType.APPLICATION_JSON_TYPE)); - - assertThat(response.getStatus()).isEqualTo(423); - - verify(pinLimiter).validate(eq(SENDER_PIN)); - } - @Test void testVerifyWrongRegistrationLock() throws Exception { Response response = @@ -1064,7 +1033,7 @@ class AccountControllerTest { .request() .header("Authorization", AuthHelper.getAuthHeader(SENDER_REG_LOCK, "bar")) .put(Entity.entity(new AccountAttributes(false, 3333, null, - Hex.toStringCondensed(new byte[32]), null, true, null), + Hex.toStringCondensed(new byte[32]), true, null), MediaType.APPLICATION_JSON_TYPE)); assertThat(response.getStatus()).isEqualTo(423); @@ -1072,24 +1041,6 @@ class AccountControllerTest { verify(pinLimiter).validate(eq(SENDER_REG_LOCK)); } - @Test - void testVerifyNoPin() throws Exception { - Response response = - resources.getJerseyTest() - .target(String.format("/v1/accounts/code/%s", "333333")) - .request() - .header("Authorization", AuthHelper.getAuthHeader(SENDER_PIN, "bar")) - .put(Entity.entity(new AccountAttributes(false, 3333, null, null, null, true, null), - MediaType.APPLICATION_JSON_TYPE)); - - assertThat(response.getStatus()).isEqualTo(423); - - RegistrationLockFailure failure = response.readEntity(RegistrationLockFailure.class); - assertThat(failure.getBackupCredentials()).isNull(); - - verifyNoMoreInteractions(pinLimiter); - } - @Test void testVerifyNoRegistrationLock() throws Exception { Response response = @@ -1097,7 +1048,7 @@ class AccountControllerTest { .target(String.format("/v1/accounts/code/%s", "666666")) .request() .header("Authorization", AuthHelper.getAuthHeader(SENDER_REG_LOCK, "bar")) - .put(Entity.entity(new AccountAttributes(false, 3333, null, null, null, true, null), + .put(Entity.entity(new AccountAttributes(false, 3333, null, null, true, null), MediaType.APPLICATION_JSON_TYPE)); assertThat(response.getStatus()).isEqualTo(423); @@ -1112,42 +1063,6 @@ class AccountControllerTest { verifyNoMoreInteractions(pinLimiter); } - - @Test - void testVerifyLimitPin() throws Exception { - Response response = - resources.getJerseyTest() - .target(String.format("/v1/accounts/code/%s", "444444")) - .request() - .header("Authorization", AuthHelper.getAuthHeader(SENDER_OVER_PIN, "bar")) - .put(Entity.entity(new AccountAttributes(false, 3333, null, "31337", null, true, null), - MediaType.APPLICATION_JSON_TYPE)); - - assertThat(response.getStatus()).isEqualTo(413); - - verify(rateLimiter).clear(eq(SENDER_OVER_PIN)); - } - - @Test - void testVerifyOldPin() throws Exception { - try { - when(senderPinAccount.getRegistrationLock()).thenReturn(new StoredRegistrationLock(Optional.empty(), Optional.empty(), Optional.of("31337"), System.currentTimeMillis() - TimeUnit.DAYS.toMillis(7))); - - AccountCreationResult result = - resources.getJerseyTest() - .target(String.format("/v1/accounts/code/%s", "444444")) - .request() - .header("Authorization", AuthHelper.getAuthHeader(SENDER_OVER_PIN, "bar")) - .put(Entity.entity(new AccountAttributes(false, 3333, null, null, null, true, null), - MediaType.APPLICATION_JSON_TYPE), AccountCreationResult.class); - - assertThat(result.getUuid()).isNotNull(); - - } finally { - when(senderPinAccount.getRegistrationLock()).thenReturn(new StoredRegistrationLock(Optional.empty(), Optional.empty(), Optional.of("31337"), System.currentTimeMillis())); - } - } - @Test void testVerifyTransferSupported() { when(senderTransfer.isTransferSupported()).thenReturn(true); @@ -1158,7 +1073,7 @@ class AccountControllerTest { .queryParam("transfer", true) .request() .header("Authorization", AuthHelper.getAuthHeader(SENDER_TRANSFER, "bar")) - .put(Entity.entity(new AccountAttributes(false, 2222, null, null, null, true, null), + .put(Entity.entity(new AccountAttributes(false, 2222, null, null, true, null), MediaType.APPLICATION_JSON_TYPE)); assertThat(response.getStatus()).isEqualTo(409); @@ -1174,7 +1089,7 @@ class AccountControllerTest { .queryParam("transfer", true) .request() .header("Authorization", AuthHelper.getAuthHeader(SENDER_TRANSFER, "bar")) - .put(Entity.entity(new AccountAttributes(false, 2222, null, null, null, true, null), + .put(Entity.entity(new AccountAttributes(false, 2222, null, null, true, null), MediaType.APPLICATION_JSON_TYPE)); assertThat(response.getStatus()).isEqualTo(200); @@ -1189,29 +1104,14 @@ class AccountControllerTest { .target(String.format("/v1/accounts/code/%s", "1234")) .request() .header("Authorization", AuthHelper.getAuthHeader(SENDER_TRANSFER, "bar")) - .put(Entity.entity(new AccountAttributes(false, 2222, null, null, null, true, null), + .put(Entity.entity(new AccountAttributes(false, 2222, null, null, true, null), MediaType.APPLICATION_JSON_TYPE)); assertThat(response.getStatus()).isEqualTo(200); } @Test - void testSetPin() throws Exception { - Response response = - resources.getJerseyTest() - .target("/v1/accounts/pin/") - .request() - .header("Authorization", AuthHelper.getAuthHeader(AuthHelper.VALID_NUMBER, AuthHelper.VALID_PASSWORD)) - .put(Entity.json(new DeprecatedPin("31337"))); - - assertThat(response.getStatus()).isEqualTo(204); - - verify(AuthHelper.VALID_ACCOUNT).setPin(eq("31337")); - verify(AuthHelper.VALID_ACCOUNT).setRegistrationLock(eq(null), eq(null)); - } - - @Test - void testSetRegistrationLock() throws Exception { + void testSetRegistrationLock() { Response response = resources.getJerseyTest() .target("/v1/accounts/registration_lock/") @@ -1224,7 +1124,6 @@ class AccountControllerTest { ArgumentCaptor pinCapture = ArgumentCaptor.forClass(String.class); ArgumentCaptor pinSaltCapture = ArgumentCaptor.forClass(String.class); - verify(AuthHelper.VALID_ACCOUNT, times(1)).setPin(eq(null)); verify(AuthHelper.VALID_ACCOUNT, times(1)).setRegistrationLock(pinCapture.capture(), pinSaltCapture.capture()); assertThat(pinCapture.getValue()).isNotEmpty(); @@ -1233,29 +1132,6 @@ class AccountControllerTest { assertThat(pinCapture.getValue().length()).isEqualTo(40); } - @Test - void testSetPinUnauthorized() throws Exception { - Response response = - resources.getJerseyTest() - .target("/v1/accounts/pin/") - .request() - .put(Entity.json(new DeprecatedPin("31337"))); - - assertThat(response.getStatus()).isEqualTo(401); - } - - @Test - void testSetShortPin() throws Exception { - Response response = - resources.getJerseyTest() - .target("/v1/accounts/pin/") - .request() - .header("Authorization", AuthHelper.getAuthHeader(AuthHelper.VALID_NUMBER, AuthHelper.VALID_PASSWORD)) - .put(Entity.json(new DeprecatedPin("313"))); - - assertThat(response.getStatus()).isEqualTo(422); - } - @Test void testSetShortRegistrationLock() throws Exception { Response response = @@ -1268,19 +1144,6 @@ class AccountControllerTest { assertThat(response.getStatus()).isEqualTo(422); } - - @Test - void testSetPinDisabled() throws Exception { - Response response = - resources.getJerseyTest() - .target("/v1/accounts/pin/") - .request() - .header("Authorization", AuthHelper.getAuthHeader(AuthHelper.DISABLED_NUMBER, AuthHelper.DISABLED_PASSWORD)) - .put(Entity.json(new DeprecatedPin("31337"))); - - assertThat(response.getStatus()).isEqualTo(401); - } - @Test void testSetRegistrationLockDisabled() throws Exception { Response response = @@ -1476,7 +1339,7 @@ class AccountControllerTest { .target("/v1/accounts/attributes/") .request() .header("Authorization", AuthHelper.getAuthHeader(AuthHelper.VALID_NUMBER, AuthHelper.VALID_PASSWORD)) - .put(Entity.json(new AccountAttributes(false, 2222, null, null, null, true, null))); + .put(Entity.json(new AccountAttributes(false, 2222, null, null, true, null))); assertThat(response.getStatus()).isEqualTo(204); } @@ -1488,7 +1351,7 @@ class AccountControllerTest { .target("/v1/accounts/attributes/") .request() .header("Authorization", AuthHelper.getAuthHeader(AuthHelper.UNDISCOVERABLE_NUMBER, AuthHelper.UNDISCOVERABLE_PASSWORD)) - .put(Entity.json(new AccountAttributes(false, 2222, null, null, null, true, null))); + .put(Entity.json(new AccountAttributes(false, 2222, null, null, true, null))); assertThat(response.getStatus()).isEqualTo(204); } @@ -1500,7 +1363,7 @@ class AccountControllerTest { .target("/v1/accounts/attributes/") .request() .header("Authorization", AuthHelper.getAuthHeader(AuthHelper.VALID_NUMBER, AuthHelper.VALID_PASSWORD)) - .put(Entity.json(new AccountAttributes(false, 2222, null, null, null, false, null))); + .put(Entity.json(new AccountAttributes(false, 2222, null, null, false, null))); assertThat(response.getStatus()).isEqualTo(204); } diff --git a/service/src/test/java/org/whispersystems/textsecuregcm/tests/controllers/DeviceControllerTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/tests/controllers/DeviceControllerTest.java index 9d34464e2..3e9ff27b3 100644 --- a/service/src/test/java/org/whispersystems/textsecuregcm/tests/controllers/DeviceControllerTest.java +++ b/service/src/test/java/org/whispersystems/textsecuregcm/tests/controllers/DeviceControllerTest.java @@ -160,7 +160,7 @@ class DeviceControllerTest { .request() .header("Authorization", AuthHelper.getAuthHeader(AuthHelper.VALID_NUMBER, "password1")) .put(Entity.entity(new AccountAttributes(false, 1234, null, - null, null, true, null), + null, true, null), MediaType.APPLICATION_JSON_TYPE), DeviceResponse.class); @@ -195,7 +195,7 @@ class DeviceControllerTest { .target("/v1/devices/5678902") .request() .header("Authorization", AuthHelper.getAuthHeader(AuthHelper.VALID_NUMBER, "password1")) - .put(Entity.entity(new AccountAttributes(false, 1234, null, null, null, true, null), + .put(Entity.entity(new AccountAttributes(false, 1234, null, null, true, null), MediaType.APPLICATION_JSON_TYPE)); assertThat(response.getStatus()).isEqualTo(403); @@ -209,7 +209,7 @@ class DeviceControllerTest { .target("/v1/devices/1112223") .request() .header("Authorization", AuthHelper.getAuthHeader(AuthHelper.VALID_NUMBER_TWO, AuthHelper.VALID_PASSWORD_TWO)) - .put(Entity.entity(new AccountAttributes(false, 1234, null, null, null, true, null), + .put(Entity.entity(new AccountAttributes(false, 1234, null, null, true, null), MediaType.APPLICATION_JSON_TYPE)); assertThat(response.getStatus()).isEqualTo(403); @@ -235,7 +235,7 @@ class DeviceControllerTest { .target("/v1/devices/5678901") .request() .header("Authorization", AuthHelper.getAuthHeader(AuthHelper.VALID_NUMBER, "password1")) - .put(Entity.entity(new AccountAttributes(false, 1234, "this is a really long name that is longer than 80 characters it's so long that it's even longer than 204 characters. that's a lot of characters. we're talking lots and lots and lots of characters. 12345678", null, null, true, null), + .put(Entity.entity(new AccountAttributes(false, 1234, "this is a really long name that is longer than 80 characters it's so long that it's even longer than 204 characters. that's a lot of characters. we're talking lots and lots and lots of characters. 12345678", null, true, null), MediaType.APPLICATION_JSON_TYPE)); assertEquals(response.getStatus(), 422); @@ -246,7 +246,7 @@ class DeviceControllerTest { @MethodSource void deviceDowngradeCapabilitiesTest(final String userAgent, final boolean gv2, final boolean gv2_2, final boolean gv2_3, final int expectedStatus) throws Exception { DeviceCapabilities deviceCapabilities = new DeviceCapabilities(gv2, gv2_2, gv2_3, true, false, true, true, true); - AccountAttributes accountAttributes = new AccountAttributes(false, 1234, null, null, null, true, deviceCapabilities); + AccountAttributes accountAttributes = new AccountAttributes(false, 1234, null, null, true, deviceCapabilities); Response response = resources.getJerseyTest() .target("/v1/devices/5678901") .request() @@ -286,7 +286,7 @@ class DeviceControllerTest { @Test void deviceDowngradeGv1MigrationTest() { DeviceCapabilities deviceCapabilities = new DeviceCapabilities(true, true, true, true, false, false, true, true); - AccountAttributes accountAttributes = new AccountAttributes(false, 1234, null, null, null, true, deviceCapabilities); + AccountAttributes accountAttributes = new AccountAttributes(false, 1234, null, null, true, deviceCapabilities); Response response = resources.getJerseyTest() .target("/v1/devices/5678901") .request() @@ -297,7 +297,7 @@ class DeviceControllerTest { assertThat(response.getStatus()).isEqualTo(409); deviceCapabilities = new DeviceCapabilities(true, true, true, true, false, true, true, true); - accountAttributes = new AccountAttributes(false, 1234, null, null, null, true, deviceCapabilities); + accountAttributes = new AccountAttributes(false, 1234, null, null, true, deviceCapabilities); response = resources.getJerseyTest() .target("/v1/devices/5678901") .request() @@ -312,7 +312,7 @@ class DeviceControllerTest { void deviceDowngradeSenderKeyTest() { DeviceCapabilities deviceCapabilities = new DeviceCapabilities(true, true, true, true, true, true, false, true); AccountAttributes accountAttributes = - new AccountAttributes(false, 1234, null, null, null, true, deviceCapabilities); + new AccountAttributes(false, 1234, null, null, true, deviceCapabilities); Response response = resources .getJerseyTest() .target("/v1/devices/5678901") @@ -323,7 +323,7 @@ class DeviceControllerTest { assertThat(response.getStatus()).isEqualTo(409); deviceCapabilities = new DeviceCapabilities(true, true, true, true, true, true, true, true); - accountAttributes = new AccountAttributes(false, 1234, null, null, null, true, deviceCapabilities); + accountAttributes = new AccountAttributes(false, 1234, null, null, true, deviceCapabilities); response = resources .getJerseyTest() .target("/v1/devices/5678901") @@ -338,7 +338,7 @@ class DeviceControllerTest { void deviceDowngradeAnnouncementGroupTest() { DeviceCapabilities deviceCapabilities = new DeviceCapabilities(true, true, true, true, true, true, true, false); AccountAttributes accountAttributes = - new AccountAttributes(false, 1234, null, null, null, true, deviceCapabilities); + new AccountAttributes(false, 1234, null, null, true, deviceCapabilities); Response response = resources .getJerseyTest() .target("/v1/devices/5678901") @@ -349,7 +349,7 @@ class DeviceControllerTest { assertThat(response.getStatus()).isEqualTo(409); deviceCapabilities = new DeviceCapabilities(true, true, true, true, true, true, true, true); - accountAttributes = new AccountAttributes(false, 1234, null, null, null, true, deviceCapabilities); + accountAttributes = new AccountAttributes(false, 1234, null, null, true, deviceCapabilities); response = resources .getJerseyTest() .target("/v1/devices/5678901") 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 53b8679e3..dd750c1ac 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,7 +70,6 @@ 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; @@ -498,7 +497,6 @@ 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/") diff --git a/service/src/test/java/org/whispersystems/textsecuregcm/tests/storage/AccountsManagerTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/tests/storage/AccountsManagerTest.java index 3d75ef87c..7ea874ff8 100644 --- a/service/src/test/java/org/whispersystems/textsecuregcm/tests/storage/AccountsManagerTest.java +++ b/service/src/test/java/org/whispersystems/textsecuregcm/tests/storage/AccountsManagerTest.java @@ -541,7 +541,7 @@ class AccountsManagerTest { when(accounts.create(any())).thenReturn(true); final String e164 = "+18005550123"; - final AccountAttributes attributes = new AccountAttributes(false, 0, null, null, null, true, null); + final AccountAttributes attributes = new AccountAttributes(false, 0, null, null, true, null); accountsManager.create(e164, "password", null, attributes); verify(accounts).create(argThat(account -> e164.equals(account.getNumber()))); @@ -560,7 +560,7 @@ class AccountsManagerTest { }); final String e164 = "+18005550123"; - final AccountAttributes attributes = new AccountAttributes(false, 0, null, null, null, true, null); + final AccountAttributes attributes = new AccountAttributes(false, 0, null, null, true, null); accountsManager.create(e164, "password", null, attributes); verify(accounts).create(argThat(account -> e164.equals(account.getNumber()) && existingUuid.equals(account.getUuid()))); @@ -582,7 +582,7 @@ class AccountsManagerTest { when(accounts.create(any())).thenReturn(true); final String e164 = "+18005550123"; - final AccountAttributes attributes = new AccountAttributes(false, 0, null, null, null, true, null); + final AccountAttributes attributes = new AccountAttributes(false, 0, null, null, true, null); accountsManager.create(e164, "password", null, attributes); verify(accounts).create(argThat(account -> e164.equals(account.getNumber()) && recentlyDeletedUuid.equals(account.getUuid()))); @@ -594,7 +594,7 @@ class AccountsManagerTest { @ParameterizedTest @ValueSource(booleans = {true, false}) void testCreateWithDiscoverability(final boolean discoverable) throws InterruptedException { - final AccountAttributes attributes = new AccountAttributes(false, 0, null, null, null, discoverable, null); + final AccountAttributes attributes = new AccountAttributes(false, 0, null, null, discoverable, null); final Account account = accountsManager.create("+18005550123", "password", null, attributes); assertEquals(discoverable, account.isDiscoverableByPhoneNumber()); @@ -607,7 +607,7 @@ class AccountsManagerTest { @ParameterizedTest @ValueSource(booleans = {true, false}) void testCreateWithStorageCapability(final boolean hasStorage) throws InterruptedException { - final AccountAttributes attributes = new AccountAttributes(false, 0, null, null, null, true, + final AccountAttributes attributes = new AccountAttributes(false, 0, null, null, true, new DeviceCapabilities(false, false, false, hasStorage, false, false, false, false)); final Account account = accountsManager.create("+18005550123", "password", null, attributes);