diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/WhisperServerService.java b/service/src/main/java/org/whispersystems/textsecuregcm/WhisperServerService.java index b35ca2917..67d9535fd 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/WhisperServerService.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/WhisperServerService.java @@ -353,8 +353,8 @@ public class WhisperServerService extends Application d.setPhoneNumberIdentitySignedPreKey(setKeysRequest.signedPreKey()); } }, - d -> keys.buildWriteItemForEcSignedPreKey(identifier, d.getId(), setKeysRequest.signedPreKey()) - .map(List::of) - .orElseGet(Collections::emptyList)) + d -> List.of(keys.buildWriteItemForEcSignedPreKey(identifier, d.getId(), setKeysRequest.signedPreKey()))) .toCompletableFuture(); } else { updateAccountFuture = CompletableFuture.completedFuture(account); @@ -326,9 +324,7 @@ public class KeysController { case PNI -> d.setPhoneNumberIdentitySignedPreKey(signedPreKey); } }, - d -> keys.buildWriteItemForEcSignedPreKey(identifier, d.getId(), signedPreKey) - .map(List::of) - .orElseGet(Collections::emptyList)) + d -> List.of(keys.buildWriteItemForEcSignedPreKey(identifier, d.getId(), signedPreKey))) .toCompletableFuture() .thenApply(Util.ASYNC_EMPTY_RESPONSE); } diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/storage/AccountsManager.java b/service/src/main/java/org/whispersystems/textsecuregcm/storage/AccountsManager.java index d0acb7a22..68a327adc 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/storage/AccountsManager.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/storage/AccountsManager.java @@ -468,8 +468,7 @@ public class AccountsManager { if (pniSignedPreKeys != null) { pniSignedPreKeys.forEach((deviceId, signedPreKey) -> - keysManager.buildWriteItemForEcSignedPreKey(phoneNumberIdentifier, deviceId, signedPreKey) - .ifPresent(keyWriteItems::add)); + keyWriteItems.add(keysManager.buildWriteItemForEcSignedPreKey(phoneNumberIdentifier, deviceId, signedPreKey))); } if (pniPqLastResortPreKeys != null) { diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/storage/KeysManager.java b/service/src/main/java/org/whispersystems/textsecuregcm/storage/KeysManager.java index 3a573d009..077dabe28 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/storage/KeysManager.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/storage/KeysManager.java @@ -6,12 +6,10 @@ package org.whispersystems.textsecuregcm.storage; import com.google.common.annotations.VisibleForTesting; -import java.util.ArrayList; import java.util.List; import java.util.Optional; import java.util.UUID; import java.util.concurrent.CompletableFuture; -import org.whispersystems.textsecuregcm.configuration.dynamic.DynamicConfiguration; import org.whispersystems.textsecuregcm.entities.ECPreKey; import org.whispersystems.textsecuregcm.entities.ECSignedPreKey; import org.whispersystems.textsecuregcm.entities.KEMSignedPreKey; @@ -20,8 +18,6 @@ import software.amazon.awssdk.services.dynamodb.model.TransactWriteItem; public class KeysManager { - private final DynamicConfigurationManager dynamicConfigurationManager; - private final SingleUseECPreKeyStore ecPreKeys; private final SingleUseKEMPreKeyStore pqPreKeys; private final RepeatedUseECSignedPreKeyStore ecSignedPreKeys; @@ -32,22 +28,18 @@ public class KeysManager { final String ecTableName, final String pqTableName, final String ecSignedPreKeysTableName, - final String pqLastResortTableName, - final DynamicConfigurationManager dynamicConfigurationManager) { + final String pqLastResortTableName) { this.ecPreKeys = new SingleUseECPreKeyStore(dynamoDbAsyncClient, ecTableName); this.pqPreKeys = new SingleUseKEMPreKeyStore(dynamoDbAsyncClient, pqTableName); this.ecSignedPreKeys = new RepeatedUseECSignedPreKeyStore(dynamoDbAsyncClient, ecSignedPreKeysTableName); this.pqLastResortKeys = new RepeatedUseKEMSignedPreKeyStore(dynamoDbAsyncClient, pqLastResortTableName); - this.dynamicConfigurationManager = dynamicConfigurationManager; } - public Optional buildWriteItemForEcSignedPreKey(final UUID identifier, + public TransactWriteItem buildWriteItemForEcSignedPreKey(final UUID identifier, final byte deviceId, final ECSignedPreKey ecSignedPreKey) { - return dynamicConfigurationManager.getConfiguration().getEcPreKeyMigrationConfiguration().storeEcSignedPreKeys() - ? Optional.of(ecSignedPreKeys.buildTransactWriteItemForInsertion(identifier, deviceId, ecSignedPreKey)) - : Optional.empty(); + return ecSignedPreKeys.buildTransactWriteItemForInsertion(identifier, deviceId, ecSignedPreKey); } public TransactWriteItem buildWriteItemForLastResortKey(final UUID identifier, @@ -65,46 +57,28 @@ public class KeysManager { final KEMSignedPreKey aciPqLastResortPreKey, final KEMSignedPreKey pniLastResortPreKey) { - final List writeItems = new ArrayList<>(List.of( + return List.of( + ecSignedPreKeys.buildTransactWriteItemForInsertion(accountIdentifier, deviceId, aciSignedPreKey), + ecSignedPreKeys.buildTransactWriteItemForInsertion(phoneNumberIdentifier, deviceId, pniSignedPreKey), pqLastResortKeys.buildTransactWriteItemForInsertion(accountIdentifier, deviceId, aciPqLastResortPreKey), pqLastResortKeys.buildTransactWriteItemForInsertion(phoneNumberIdentifier, deviceId, pniLastResortPreKey) - )); - - if (dynamicConfigurationManager.getConfiguration().getEcPreKeyMigrationConfiguration().storeEcSignedPreKeys()) { - writeItems.addAll(List.of( - ecSignedPreKeys.buildTransactWriteItemForInsertion(accountIdentifier, deviceId, aciSignedPreKey), - ecSignedPreKeys.buildTransactWriteItemForInsertion(phoneNumberIdentifier, deviceId, pniSignedPreKey) - )); - } - - return writeItems; + ); } public List buildWriteItemsForRemovedDevice(final UUID accountIdentifier, final UUID phoneNumberIdentifier, final byte deviceId) { - final List writeItems = new ArrayList<>(List.of( + return List.of( + ecSignedPreKeys.buildTransactWriteItemForDeletion(accountIdentifier, deviceId), + ecSignedPreKeys.buildTransactWriteItemForDeletion(phoneNumberIdentifier, deviceId), pqLastResortKeys.buildTransactWriteItemForDeletion(accountIdentifier, deviceId), pqLastResortKeys.buildTransactWriteItemForDeletion(phoneNumberIdentifier, deviceId) - )); - - if (dynamicConfigurationManager.getConfiguration().getEcPreKeyMigrationConfiguration().deleteEcSignedPreKeys()) { - writeItems.addAll(List.of( - ecSignedPreKeys.buildTransactWriteItemForDeletion(accountIdentifier, deviceId), - ecSignedPreKeys.buildTransactWriteItemForDeletion(phoneNumberIdentifier, deviceId) - )); - } - - return writeItems; + ); } public CompletableFuture storeEcSignedPreKeys(final UUID identifier, final byte deviceId, final ECSignedPreKey ecSignedPreKey) { - if (dynamicConfigurationManager.getConfiguration().getEcPreKeyMigrationConfiguration().storeEcSignedPreKeys()) { - return ecSignedPreKeys.store(identifier, deviceId, ecSignedPreKey); - } else { - return CompletableFuture.completedFuture(null); - } + return ecSignedPreKeys.store(identifier, deviceId, ecSignedPreKey); } public CompletableFuture storePqLastResort(final UUID identifier, final byte deviceId, final KEMSignedPreKey lastResortKey) { diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/workers/AssignUsernameCommand.java b/service/src/main/java/org/whispersystems/textsecuregcm/workers/AssignUsernameCommand.java index a76bdce91..80befaaa0 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/workers/AssignUsernameCommand.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/workers/AssignUsernameCommand.java @@ -168,8 +168,8 @@ public class AssignUsernameCommand extends EnvironmentCommand dynamicConfigurationManager = mock(DynamicConfigurationManager.class); - final DynamicConfiguration dynamicConfiguration = mock(DynamicConfiguration.class); - ecPreKeyMigrationConfiguration = mock(DynamicECPreKeyMigrationConfiguration.class); - - when(dynamicConfigurationManager.getConfiguration()).thenReturn(dynamicConfiguration); - when(dynamicConfiguration.getEcPreKeyMigrationConfiguration()).thenReturn(ecPreKeyMigrationConfiguration); - when(ecPreKeyMigrationConfiguration.storeEcSignedPreKeys()).thenReturn(true); - when(ecPreKeyMigrationConfiguration.deleteEcSignedPreKeys()).thenReturn(true); - keysManager = new KeysManager( DYNAMO_DB_EXTENSION.getDynamoDbAsyncClient(), Tables.EC_KEYS.tableName(), Tables.PQ_KEYS.tableName(), Tables.REPEATED_USE_EC_SIGNED_PRE_KEYS.tableName(), - Tables.REPEATED_USE_KEM_SIGNED_PRE_KEYS.tableName(), - dynamicConfigurationManager); + Tables.REPEATED_USE_KEM_SIGNED_PRE_KEYS.tableName() + ); } @Test @@ -239,22 +223,6 @@ class KeysManagerTest { Set.copyOf(keysManager.getPqEnabledDevices(ACCOUNT_UUID).join())); } - @Test - void testStoreEcSignedPreKeyDisabled() { - when(ecPreKeyMigrationConfiguration.storeEcSignedPreKeys()).thenReturn(false); - - keysManager.storeEcSignedPreKeys(ACCOUNT_UUID, DEVICE_ID, generateTestECSignedPreKey(1)).join(); - assertFalse(keysManager.getEcSignedPreKey(ACCOUNT_UUID, DEVICE_ID).join().isPresent()); - } - - @ParameterizedTest - @ValueSource(booleans = {true, false}) - void buildWriteItemForEcSignedPreKey(final boolean enableSignedPreKeyWrite) { - when(ecPreKeyMigrationConfiguration.storeEcSignedPreKeys()).thenReturn(enableSignedPreKeyWrite); - assertEquals(enableSignedPreKeyWrite, - keysManager.buildWriteItemForEcSignedPreKey(ACCOUNT_UUID, DEVICE_ID, generateTestECSignedPreKey(1)).isPresent()); - } - private static ECPreKey generateTestPreKey(final long keyId) { return new ECPreKey(keyId, Curve.generateKeyPair().getPublicKey()); }