From a298b85374922af61c69c2ac7ec6ff18b08c81b3 Mon Sep 17 00:00:00 2001 From: Patrick Honkonen <1883101+SaintPatrck@users.noreply.github.com> Date: Fri, 5 Sep 2025 14:56:01 -0400 Subject: [PATCH] [PM-25522] Add `importCxf` function to `VaultSdkSource` (#5841) --- .../vault/datasource/sdk/VaultSdkSource.kt | 8 +++++ .../datasource/sdk/VaultSdkSourceImpl.kt | 9 ++++++ .../datasource/sdk/VaultSdkSourceTest.kt | 29 +++++++++++++++++++ 3 files changed, 46 insertions(+) diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/datasource/sdk/VaultSdkSource.kt b/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/datasource/sdk/VaultSdkSource.kt index f3429ceee9..8c4798dd7c 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/datasource/sdk/VaultSdkSource.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/datasource/sdk/VaultSdkSource.kt @@ -438,6 +438,14 @@ interface VaultSdkSource { ciphers: List, ): Result + /** + * Imports the given CXF formatted [payload] into the users vault. + * + * @return Result of the import. If successful, a list of [Cipher]s deciphered from the CXF + * payload. + */ + suspend fun importCxf(userId: String, payload: String): Result> + /** * Register a new FIDO 2 credential to a cipher. * diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/datasource/sdk/VaultSdkSourceImpl.kt b/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/datasource/sdk/VaultSdkSourceImpl.kt index 21ddc2cfdb..d4df33ba17 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/datasource/sdk/VaultSdkSourceImpl.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/datasource/sdk/VaultSdkSourceImpl.kt @@ -505,6 +505,15 @@ class VaultSdkSourceImpl( ) } + override suspend fun importCxf( + userId: String, + payload: String, + ): Result> = runCatchingWithLogs { + getClient(userId = userId) + .exporters() + .importCxf(payload = payload) + } + override suspend fun registerFido2Credential( request: RegisterFido2CredentialRequest, fido2CredentialStore: Fido2CredentialStore, diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/datasource/sdk/VaultSdkSourceTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/datasource/sdk/VaultSdkSourceTest.kt index 5576a5e062..f848dc26ae 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/datasource/sdk/VaultSdkSourceTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/datasource/sdk/VaultSdkSourceTest.kt @@ -1167,6 +1167,35 @@ class VaultSdkSourceTest { ) } + @Test + fun `importCxf should call SDK and return a Result with the correct data`() = runTest { + val userId = "userId" + val expected = listOf(createMockSdkCipher(number = 1)) + val cxf = "cxf" + + coEvery { + clientExporters.importCxf( + payload = cxf, + ) + } returns expected + + val result = vaultSdkSource.importCxf( + userId = userId, + payload = cxf, + ) + + coVerify { + clientExporters.importCxf( + payload = cxf, + ) + } + + assertEquals( + expected.asSuccess(), + result, + ) + } + @Suppress("MaxLineLength") @Test fun `registerFido2Credential should return attestation response when registration completes`() =