diff --git a/app/src/main/java/com/x8bit/bitwarden/data/auth/datasource/sdk/AuthSdkSource.kt b/app/src/main/java/com/x8bit/bitwarden/data/auth/datasource/sdk/AuthSdkSource.kt index 86b6659f79..6f3444534a 100644 --- a/app/src/main/java/com/x8bit/bitwarden/data/auth/datasource/sdk/AuthSdkSource.kt +++ b/app/src/main/java/com/x8bit/bitwarden/data/auth/datasource/sdk/AuthSdkSource.kt @@ -5,12 +5,18 @@ import com.bitwarden.core.MasterPasswordPolicyOptions import com.bitwarden.core.RegisterKeyResponse import com.bitwarden.crypto.HashPurpose import com.bitwarden.crypto.Kdf +import com.bitwarden.crypto.TrustDeviceResponse import com.x8bit.bitwarden.data.auth.datasource.sdk.model.PasswordStrength /** * Source of authentication information and functionality from the Bitwarden SDK. */ interface AuthSdkSource { + /** + * Gets the data to authenticate with trusted device encryption. + */ + suspend fun getTrustDevice(): Result + /** * Gets the data needed to create a new auth request. */ diff --git a/app/src/main/java/com/x8bit/bitwarden/data/auth/datasource/sdk/AuthSdkSourceImpl.kt b/app/src/main/java/com/x8bit/bitwarden/data/auth/datasource/sdk/AuthSdkSourceImpl.kt index 2d518494ac..413601651b 100644 --- a/app/src/main/java/com/x8bit/bitwarden/data/auth/datasource/sdk/AuthSdkSourceImpl.kt +++ b/app/src/main/java/com/x8bit/bitwarden/data/auth/datasource/sdk/AuthSdkSourceImpl.kt @@ -6,6 +6,7 @@ import com.bitwarden.core.MasterPasswordPolicyOptions import com.bitwarden.core.RegisterKeyResponse import com.bitwarden.crypto.HashPurpose import com.bitwarden.crypto.Kdf +import com.bitwarden.crypto.TrustDeviceResponse import com.bitwarden.sdk.ClientAuth import com.bitwarden.sdk.ClientPlatform import com.x8bit.bitwarden.data.auth.datasource.sdk.model.PasswordStrength @@ -21,6 +22,10 @@ class AuthSdkSourceImpl( private val clientPlatform: ClientPlatform, ) : AuthSdkSource { + override suspend fun getTrustDevice(): Result = runCatching { + clientAuth.trustDevice() + } + override suspend fun getNewAuthRequest( email: String, ): Result = runCatching { diff --git a/app/src/test/java/com/x8bit/bitwarden/data/auth/datasource/sdk/AuthSdkSourceTest.kt b/app/src/test/java/com/x8bit/bitwarden/data/auth/datasource/sdk/AuthSdkSourceTest.kt index 49f9073a4b..fe195f0161 100644 --- a/app/src/test/java/com/x8bit/bitwarden/data/auth/datasource/sdk/AuthSdkSourceTest.kt +++ b/app/src/test/java/com/x8bit/bitwarden/data/auth/datasource/sdk/AuthSdkSourceTest.kt @@ -6,9 +6,11 @@ import com.bitwarden.core.MasterPasswordPolicyOptions import com.bitwarden.core.RegisterKeyResponse import com.bitwarden.crypto.HashPurpose import com.bitwarden.crypto.Kdf +import com.bitwarden.crypto.TrustDeviceResponse import com.bitwarden.sdk.ClientAuth import com.bitwarden.sdk.ClientPlatform import com.x8bit.bitwarden.data.auth.datasource.sdk.model.PasswordStrength +import com.x8bit.bitwarden.data.platform.util.asFailure import com.x8bit.bitwarden.data.platform.util.asSuccess import io.mockk.coEvery import io.mockk.coVerify @@ -27,6 +29,33 @@ class AuthSdkSourceTest { clientPlatform = clientPlatform, ) + @Test + fun `getTrustDevice with trustDevice success should return success with correct data`() = + runBlocking { + val expectedResult = mockk() + coEvery { clientAuth.trustDevice() } returns expectedResult + + val result = authSkdSource.getTrustDevice() + + assertEquals(expectedResult.asSuccess(), result) + coVerify(exactly = 1) { + clientAuth.trustDevice() + } + } + + @Test + fun `getTrustDevice with trustDevice exception should return a failure`() = runBlocking { + val error = Throwable("Fail") + coEvery { clientAuth.trustDevice() } throws error + + val result = authSkdSource.getTrustDevice() + + assertEquals(error.asFailure(), result) + coVerify(exactly = 1) { + clientAuth.trustDevice() + } + } + @Test fun `getNewAuthRequest should call SDK and return a Result with correct data`() = runBlocking { val email = "test@gmail.com"