[PM-15906] Implement single tap passkey flows (#4547)

This commit is contained in:
Patrick Honkonen
2025-01-23 11:38:36 -05:00
committed by GitHub
parent bf60f8f9e3
commit e9159cc8c1
22 changed files with 286 additions and 98 deletions

View File

@@ -22,10 +22,10 @@ import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2CredentialAssertionReq
import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2GetCredentialsRequest
import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2ValidateOriginResult
import com.x8bit.bitwarden.data.autofill.fido2.model.createMockFido2CredentialAssertionRequest
import com.x8bit.bitwarden.data.autofill.fido2.model.createMockFido2CredentialRequest
import com.x8bit.bitwarden.data.autofill.fido2.model.createMockFido2CreateCredentialRequest
import com.x8bit.bitwarden.data.autofill.fido2.model.createMockFido2GetCredentialsRequest
import com.x8bit.bitwarden.data.autofill.fido2.util.getFido2AssertionRequestOrNull
import com.x8bit.bitwarden.data.autofill.fido2.util.getFido2CredentialRequestOrNull
import com.x8bit.bitwarden.data.autofill.fido2.util.getFido2CreateCredentialRequestOrNull
import com.x8bit.bitwarden.data.autofill.fido2.util.getFido2GetCredentialsRequestOrNull
import com.x8bit.bitwarden.data.autofill.manager.AutofillSelectionManager
import com.x8bit.bitwarden.data.autofill.manager.AutofillSelectionManagerImpl
@@ -139,7 +139,7 @@ class MainViewModelTest : BaseViewModelTest() {
Intent::getAutofillSelectionDataOrNull,
Intent::getCompleteRegistrationDataIntentOrNull,
Intent::getFido2AssertionRequestOrNull,
Intent::getFido2CredentialRequestOrNull,
Intent::getFido2CreateCredentialRequestOrNull,
Intent::getFido2GetCredentialsRequestOrNull,
Intent::isAddTotpLoginItemFromAuthenticator,
)
@@ -159,7 +159,7 @@ class MainViewModelTest : BaseViewModelTest() {
Intent::getAutofillSelectionDataOrNull,
Intent::getCompleteRegistrationDataIntentOrNull,
Intent::getFido2AssertionRequestOrNull,
Intent::getFido2CredentialRequestOrNull,
Intent::getFido2CreateCredentialRequestOrNull,
Intent::getFido2GetCredentialsRequestOrNull,
Intent::isAddTotpLoginItemFromAuthenticator,
)
@@ -647,6 +647,7 @@ class MainViewModelTest : BaseViewModelTest() {
packageName = "com.x8bit.bitwarden",
signingInfo = SigningInfo(),
origin = "mockOrigin",
isUserVerified = true,
)
val fido2Intent = createMockIntent(
mockFido2CreateCredentialRequest = fido2CreateCredentialRequest,
@@ -673,11 +674,13 @@ class MainViewModelTest : BaseViewModelTest() {
)
}
@Suppress("MaxLineLength")
@Test
fun `on ReceiveFirstIntent with fido2 request data should set the user to unverified`() {
fun `on ReceiveFirstIntent with fido2 create request data should set the user verification based on request`() {
val viewModel = createViewModel()
val createCredentialRequest = createMockFido2CreateCredentialRequest(number = 1)
val fido2Intent = createMockIntent(
mockFido2CreateCredentialRequest = createMockFido2CredentialRequest(number = 1),
mockFido2CreateCredentialRequest = createCredentialRequest,
)
viewModel.trySendAction(
@@ -687,7 +690,7 @@ class MainViewModelTest : BaseViewModelTest() {
)
verify {
fido2CredentialManager.isUserVerified = false
fido2CredentialManager.isUserVerified = createCredentialRequest.isUserVerified ?: false
}
}
@@ -702,6 +705,7 @@ class MainViewModelTest : BaseViewModelTest() {
packageName = "com.x8bit.bitwarden",
signingInfo = SigningInfo(),
origin = "mockOrigin",
isUserVerified = true,
)
val mockIntent = createMockIntent(
mockFido2CreateCredentialRequest = fido2CreateCredentialRequest,
@@ -732,6 +736,7 @@ class MainViewModelTest : BaseViewModelTest() {
packageName = "com.x8bit.bitwarden",
signingInfo = SigningInfo(),
origin = "mockOrigin",
isUserVerified = true,
)
val mockIntent = createMockIntent(
mockFido2CreateCredentialRequest = fido2CreateCredentialRequest,
@@ -1139,7 +1144,7 @@ private fun createMockIntent(
every { getAutofillSelectionDataOrNull() } returns mockAutofillSelectionData
every { getCompleteRegistrationDataIntentOrNull() } returns mockCompleteRegistrationData
every { getFido2AssertionRequestOrNull() } returns mockFido2CredentialAssertionRequest
every { getFido2CredentialRequestOrNull() } returns mockFido2CreateCredentialRequest
every { getFido2CreateCredentialRequestOrNull() } returns mockFido2CreateCredentialRequest
every { getFido2GetCredentialsRequestOrNull() } returns mockFido2GetCredentialsRequest
every { isMyVaultShortcut } returns mockIsMyVaultShortcut
every { isPasswordGeneratorShortcut } returns mockIsPasswordGeneratorShortcut