[PM-20977] Handle new sdk exception type. (#5937)

This commit is contained in:
André Bispo
2025-09-26 15:47:21 +01:00
committed by GitHub
parent d2645863ea
commit 2694138aa1
2 changed files with 60 additions and 9 deletions

View File

@@ -2,6 +2,7 @@ package com.x8bit.bitwarden.data.vault.datasource.sdk
import com.bitwarden.collections.Collection import com.bitwarden.collections.Collection
import com.bitwarden.collections.CollectionView import com.bitwarden.collections.CollectionView
import com.bitwarden.core.DeriveKeyConnectorException
import com.bitwarden.core.DeriveKeyConnectorRequest import com.bitwarden.core.DeriveKeyConnectorRequest
import com.bitwarden.core.DerivePinKeyResponse import com.bitwarden.core.DerivePinKeyResponse
import com.bitwarden.core.InitOrgCryptoRequest import com.bitwarden.core.InitOrgCryptoRequest
@@ -93,14 +94,17 @@ class VaultSdkSourceImpl(
), ),
) )
DeriveKeyConnectorResult.Success(key) DeriveKeyConnectorResult.Success(key)
} catch (exception: BitwardenException) { } catch (ex: BitwardenException.DeriveKeyConnector) {
when { when (ex.v1) {
exception.message == "Wrong password" -> { is DeriveKeyConnectorException.WrongPassword -> {
DeriveKeyConnectorResult.WrongPasswordError DeriveKeyConnectorResult.WrongPasswordError
} }
is DeriveKeyConnectorException.Crypto -> {
else -> DeriveKeyConnectorResult.Error(exception) DeriveKeyConnectorResult.Error(error = ex)
}
} }
} catch (exception: BitwardenException) {
DeriveKeyConnectorResult.Error(error = exception)
} }
} }

View File

@@ -2,6 +2,7 @@ package com.x8bit.bitwarden.data.vault.datasource.sdk
import com.bitwarden.collections.Collection import com.bitwarden.collections.Collection
import com.bitwarden.collections.CollectionView import com.bitwarden.collections.CollectionView
import com.bitwarden.core.DeriveKeyConnectorException
import com.bitwarden.core.DeriveKeyConnectorRequest import com.bitwarden.core.DeriveKeyConnectorRequest
import com.bitwarden.core.DerivePinKeyResponse import com.bitwarden.core.DerivePinKeyResponse
import com.bitwarden.core.InitOrgCryptoRequest import com.bitwarden.core.InitOrgCryptoRequest
@@ -199,15 +200,61 @@ class VaultSdkSourceTest {
} }
@Test @Test
fun `deriveKeyConnector should call SDK and return a Result with wrong password`() = @Suppress("MaxLineLength")
fun `deriveKeyConnector should call SDK with WrongPassword exception and return a Result with wrong password`() =
runBlocking { runBlocking {
val userId = "userId" val userId = "userId"
val userKeyEncrypted = "userKeyEncrypted" val userKeyEncrypted = "userKeyEncrypted"
val email = "email" val email = "email"
val password = "password" val password = "password"
val error = mockk<BitwardenException> { val kdf = mockk<Kdf>()
every { message } returns "Wrong password" coEvery {
clientCrypto.deriveKeyConnector(
request = DeriveKeyConnectorRequest(
userKeyEncrypted = userKeyEncrypted,
email = email,
password = password,
kdf = kdf,
),
)
} throws BitwardenException.DeriveKeyConnector(
v1 = DeriveKeyConnectorException.WrongPassword(message = "mock message"),
)
val result = vaultSdkSource.deriveKeyConnector(
userId = userId,
userKeyEncrypted = userKeyEncrypted,
email = email,
password = password,
kdf = kdf,
)
assertEquals(
DeriveKeyConnectorResult.WrongPasswordError,
result.getOrNull(),
)
coVerify(exactly = 1) {
sdkClientManager.getOrCreateClient(userId = userId)
clientCrypto.deriveKeyConnector(
request = DeriveKeyConnectorRequest(
userKeyEncrypted = userKeyEncrypted,
email = email,
password = password,
kdf = kdf,
),
)
} }
}
@Test
@Suppress("MaxLineLength")
fun `deriveKeyConnector should call SDK with Crypto exception return and return a Result with error`() =
runBlocking {
val userId = "userId"
val userKeyEncrypted = "userKeyEncrypted"
val email = "email"
val password = "password"
val error = BitwardenException.DeriveKeyConnector(
v1 = DeriveKeyConnectorException.Crypto(message = "mock message"),
)
val kdf = mockk<Kdf>() val kdf = mockk<Kdf>()
coEvery { coEvery {
clientCrypto.deriveKeyConnector( clientCrypto.deriveKeyConnector(
@@ -227,7 +274,7 @@ class VaultSdkSourceTest {
kdf = kdf, kdf = kdf,
) )
assertEquals( assertEquals(
DeriveKeyConnectorResult.WrongPasswordError, DeriveKeyConnectorResult.Error(error = error),
result.getOrNull(), result.getOrNull(),
) )
coVerify(exactly = 1) { coVerify(exactly = 1) {