Preserve backupCredentialRequest across rereg

This commit is contained in:
Ravi Khadiwala 2024-03-20 18:11:05 -05:00 committed by ravi-signal
parent 6fcb2ab5dd
commit 075a08884b
2 changed files with 22 additions and 0 deletions

View File

@ -304,6 +304,11 @@ public class Accounts extends AbstractDynamoDbStore {
accountToCreate.setVersion(existingAccount.getVersion());
// Carry over the old backup id commitment. If the new account claimer cannot does not have the secret used to
// generate their backup-id, this credential is useless, however if they can produce the same credential they
// won't be rate-limited for setting their backup-id.
accountToCreate.setBackupCredentialRequest(existingAccount.getBackupCredentialRequest());
final List<TransactWriteItem> writeItems = new ArrayList<>();
// If we're reclaiming an account that already has a username, we'd like to give the re-registering client

View File

@ -416,6 +416,23 @@ class AccountsTest {
Collections.emptyList()).toCompletableFuture().join());
}
@Test
void testReclaimAccountPreservesBcr() {
final String e164 = "+14151112222";
final UUID existingUuid = UUID.randomUUID();
final Account existingAccount =
generateAccount(e164, existingUuid, UUID.randomUUID(), List.of(generateDevice(DEVICE_ID_1)));
existingAccount.setBackupCredentialRequest(TestRandomUtil.nextBytes(32));
createAccount(existingAccount);
final Account secondAccount =
generateAccount(e164, UUID.randomUUID(), UUID.randomUUID(), List.of(generateDevice(DEVICE_ID_1)));
reclaimAccount(secondAccount);
final Account reclaimed = accounts.getByAccountIdentifier(existingUuid).get();
assertThat(reclaimed.getBackupCredentialRequest()).isEqualTo(existingAccount.getBackupCredentialRequest());
}
@Test
void testReclaimAccount() {
final String e164 = "+14151112222";