From 2b87cdac9e7396468303be8781d4c9443874574e Mon Sep 17 00:00:00 2001 From: Andrew Haisting <142518658+ahaisting-livefront@users.noreply.github.com> Date: Mon, 14 Oct 2024 15:19:07 -0500 Subject: [PATCH] BITAU-176 Filter out deleted ciphers from syncAccounts call (#4078) --- .../repository/AuthenticatorBridgeRepositoryImpl.kt | 4 ++-- .../repository/AuthenticatorBridgeRepositoryTest.kt | 11 ++++++++++- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/x8bit/bitwarden/data/platform/repository/AuthenticatorBridgeRepositoryImpl.kt b/app/src/main/java/com/x8bit/bitwarden/data/platform/repository/AuthenticatorBridgeRepositoryImpl.kt index 92c901d8f..e114e619a 100644 --- a/app/src/main/java/com/x8bit/bitwarden/data/platform/repository/AuthenticatorBridgeRepositoryImpl.kt +++ b/app/src/main/java/com/x8bit/bitwarden/data/platform/repository/AuthenticatorBridgeRepositoryImpl.kt @@ -95,8 +95,8 @@ class AuthenticatorBridgeRepositoryImpl( val totpUris = vaultDiskSource .getCiphers(userId) .first() - // Filter out any ciphers without a totp item: - .filter { it.login?.totp != null } + // Filter out any ciphers without a totp item and also deleted ciphers: + .filter { it.login?.totp != null && it.deletedDate == null } .mapNotNull { // Decrypt each cipher and take just totp codes: vaultSdkSource diff --git a/app/src/test/java/com/x8bit/bitwarden/data/platform/repository/AuthenticatorBridgeRepositoryTest.kt b/app/src/test/java/com/x8bit/bitwarden/data/platform/repository/AuthenticatorBridgeRepositoryTest.kt index 11ea8e78e..0f2f4c842 100644 --- a/app/src/test/java/com/x8bit/bitwarden/data/platform/repository/AuthenticatorBridgeRepositoryTest.kt +++ b/app/src/test/java/com/x8bit/bitwarden/data/platform/repository/AuthenticatorBridgeRepositoryTest.kt @@ -33,6 +33,7 @@ import org.junit.jupiter.api.Assertions.assertNull import org.junit.jupiter.api.Assertions.assertTrue import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test +import java.time.ZonedDateTime class AuthenticatorBridgeRepositoryTest { @@ -183,7 +184,7 @@ class AuthenticatorBridgeRepositoryTest { @Test @Suppress("MaxLineLength") - fun `syncAccounts when vault is locked for both users should unlock and re-lock vault for both users`() = + fun `syncAccounts when vault is locked for both users should unlock and re-lock vault for both users and filter out deleted ciphers`() = runTest { every { vaultRepository.isVaultUnlocked(USER_1_ID) } returns false coEvery { @@ -382,10 +383,17 @@ private val USER_STATE = UserState( private val USER_1_TOTP_CIPHER = mockk { every { login?.totp } returns "encryptedTotp1" + every { deletedDate } returns null +} + +private val USER_1_DELETED_TOTP_CIPHER = mockk { + every { login?.totp } returns "encryptedTotp1Deleted" + every { deletedDate } returns ZonedDateTime.now() } private val USER_2_TOTP_CIPHER = mockk { every { login?.totp } returns "encryptedTotp2" + every { deletedDate } returns null } private val USER_1_ENCRYPTED_SDK_TOTP_CIPHER = mockk() @@ -419,6 +427,7 @@ private val USER_2_SHARED_ACCOUNT = SharedAccountData.Account( private val USER_1_CIPHERS = listOf( USER_1_TOTP_CIPHER, + USER_1_DELETED_TOTP_CIPHER, ) private val USER_2_CIPHERS = listOf(