diff --git a/app/src/main/java/com/x8bit/bitwarden/data/autofill/fido2/manager/Fido2CredentialManager.kt b/app/src/main/java/com/x8bit/bitwarden/data/autofill/fido2/manager/Fido2CredentialManager.kt index 93283a2271..24f883713e 100644 --- a/app/src/main/java/com/x8bit/bitwarden/data/autofill/fido2/manager/Fido2CredentialManager.kt +++ b/app/src/main/java/com/x8bit/bitwarden/data/autofill/fido2/manager/Fido2CredentialManager.kt @@ -1,10 +1,10 @@ package com.x8bit.bitwarden.data.autofill.fido2.manager import com.bitwarden.vault.CipherView -import com.x8bit.bitwarden.data.autofill.fido2.datasource.network.model.PublicKeyCredentialCreationOptions import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2CredentialRequest import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2RegisterCredentialResult import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2ValidateOriginResult +import com.x8bit.bitwarden.data.autofill.fido2.model.PasskeyAttestationOptions /** * Responsible for managing FIDO 2 credential registration and authentication. @@ -25,11 +25,11 @@ interface Fido2CredentialManager { ): Fido2ValidateOriginResult /** - * Attempt to extract FIDO 2 passkey creation options from the system [requestJson], or null. + * Attempt to extract FIDO 2 passkey attestation options from the system [requestJson], or null. */ - fun getPasskeyCreateOptionsOrNull( + fun getPasskeyAttestationOptionsOrNull( requestJson: String, - ): PublicKeyCredentialCreationOptions? + ): PasskeyAttestationOptions? /** * Register a new FIDO 2 credential to a users vault. diff --git a/app/src/main/java/com/x8bit/bitwarden/data/autofill/fido2/manager/Fido2CredentialManagerImpl.kt b/app/src/main/java/com/x8bit/bitwarden/data/autofill/fido2/manager/Fido2CredentialManagerImpl.kt index 3bc6783789..67c453c745 100644 --- a/app/src/main/java/com/x8bit/bitwarden/data/autofill/fido2/manager/Fido2CredentialManagerImpl.kt +++ b/app/src/main/java/com/x8bit/bitwarden/data/autofill/fido2/manager/Fido2CredentialManagerImpl.kt @@ -5,11 +5,11 @@ import com.bitwarden.fido.ClientData import com.bitwarden.sdk.Fido2CredentialStore import com.bitwarden.vault.CipherView import com.x8bit.bitwarden.data.autofill.fido2.datasource.network.model.DigitalAssetLinkResponseJson -import com.x8bit.bitwarden.data.autofill.fido2.datasource.network.model.PublicKeyCredentialCreationOptions import com.x8bit.bitwarden.data.autofill.fido2.datasource.network.service.DigitalAssetLinkService import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2CredentialRequest import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2RegisterCredentialResult import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2ValidateOriginResult +import com.x8bit.bitwarden.data.autofill.fido2.model.PasskeyAttestationOptions import com.x8bit.bitwarden.data.platform.manager.AssetManager import com.x8bit.bitwarden.data.platform.util.asFailure import com.x8bit.bitwarden.data.platform.util.asSuccess @@ -93,11 +93,11 @@ class Fido2CredentialManagerImpl( } } - override fun getPasskeyCreateOptionsOrNull( + override fun getPasskeyAttestationOptionsOrNull( requestJson: String, - ): PublicKeyCredentialCreationOptions? = + ): PasskeyAttestationOptions? = try { - json.decodeFromString(requestJson) + json.decodeFromString(requestJson) } catch (e: SerializationException) { null } catch (e: IllegalArgumentException) { @@ -194,7 +194,7 @@ class Fido2CredentialManagerImpl( private fun String.getRpId(json: Json): Result { return try { json - .decodeFromString(this) + .decodeFromString(this) .relyingParty .id .asSuccess() diff --git a/app/src/main/java/com/x8bit/bitwarden/data/autofill/fido2/datasource/network/model/PublicKeyCredentialCreationOptions.kt b/app/src/main/java/com/x8bit/bitwarden/data/autofill/fido2/model/PasskeyAttestationOptions.kt similarity index 97% rename from app/src/main/java/com/x8bit/bitwarden/data/autofill/fido2/datasource/network/model/PublicKeyCredentialCreationOptions.kt rename to app/src/main/java/com/x8bit/bitwarden/data/autofill/fido2/model/PasskeyAttestationOptions.kt index a6bcb7fb72..bf284b9446 100644 --- a/app/src/main/java/com/x8bit/bitwarden/data/autofill/fido2/datasource/network/model/PublicKeyCredentialCreationOptions.kt +++ b/app/src/main/java/com/x8bit/bitwarden/data/autofill/fido2/model/PasskeyAttestationOptions.kt @@ -1,4 +1,4 @@ -package com.x8bit.bitwarden.data.autofill.fido2.datasource.network.model +package com.x8bit.bitwarden.data.autofill.fido2.model import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable @@ -7,7 +7,7 @@ import kotlinx.serialization.Serializable * Models a FIDO 2 credential creation request options received from a Relying Party (RP). */ @Serializable -data class PublicKeyCredentialCreationOptions( +data class PasskeyAttestationOptions( @SerialName("authenticatorSelection") val authenticatorSelection: AuthenticatorSelectionCriteria, @SerialName("challenge") diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditViewModel.kt b/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditViewModel.kt index 29589a2500..49855fefc3 100644 --- a/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditViewModel.kt +++ b/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditViewModel.kt @@ -8,10 +8,10 @@ import com.x8bit.bitwarden.R import com.x8bit.bitwarden.data.auth.repository.AuthRepository import com.x8bit.bitwarden.data.auth.repository.model.BreachCountResult import com.x8bit.bitwarden.data.auth.repository.model.UserState -import com.x8bit.bitwarden.data.autofill.fido2.datasource.network.model.PublicKeyCredentialCreationOptions.AuthenticatorSelectionCriteria.UserVerificationRequirement import com.x8bit.bitwarden.data.autofill.fido2.manager.Fido2CredentialManager import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2CredentialRequest import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2RegisterCredentialResult +import com.x8bit.bitwarden.data.autofill.fido2.model.PasskeyAttestationOptions.AuthenticatorSelectionCriteria.UserVerificationRequirement import com.x8bit.bitwarden.data.autofill.util.isActiveWithFido2Credentials import com.x8bit.bitwarden.data.platform.manager.PolicyManager import com.x8bit.bitwarden.data.platform.manager.SpecialCircumstanceManager @@ -116,10 +116,10 @@ class VaultAddEditViewModel @Inject constructor( .specialCircumstance ?.toFido2RequestOrNull() - val fido2CreationOptions = fido2CreationRequest + val fido2AttestationOptions = fido2CreationRequest ?.let { request -> fido2CredentialManager - .getPasskeyCreateOptionsOrNull(request.requestJson) + .getPasskeyAttestationOptionsOrNull(request.requestJson) } val dialogState = @@ -142,7 +142,7 @@ class VaultAddEditViewModel @Inject constructor( ?.toDefaultAddTypeContent(isIndividualVaultDisabled) ?: fido2CreationRequest ?.toDefaultAddTypeContent( - creationOptions = fido2CreationOptions, + attestationOptions = fido2AttestationOptions, isIndividualVaultDisabled = isIndividualVaultDisabled, ) ?: VaultAddEditState.ViewState.Content( @@ -157,8 +157,8 @@ class VaultAddEditViewModel @Inject constructor( }, dialog = dialogState, // Set special conditions for autofill and fido2 save - shouldShowCloseButton = autofillSaveItem == null && fido2CreationOptions == null, - shouldExitOnSave = autofillSaveItem != null || fido2CreationOptions != null, + shouldShowCloseButton = autofillSaveItem == null && fido2AttestationOptions == null, + shouldExitOnSave = autofillSaveItem != null || fido2AttestationOptions != null, ) }, ) { @@ -423,7 +423,7 @@ class VaultAddEditViewModel @Inject constructor( } val createOptions = fido2CredentialManager - .getPasskeyCreateOptionsOrNull(request.requestJson) + .getPasskeyAttestationOptionsOrNull(request.requestJson) ?: run { showFido2ErrorDialog() return diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/addedit/util/Fido2CredentialRequestExtensions.kt b/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/addedit/util/Fido2CredentialRequestExtensions.kt index 65593a3763..0072510b65 100644 --- a/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/addedit/util/Fido2CredentialRequestExtensions.kt +++ b/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/addedit/util/Fido2CredentialRequestExtensions.kt @@ -1,7 +1,7 @@ package com.x8bit.bitwarden.ui.vault.feature.addedit.util -import com.x8bit.bitwarden.data.autofill.fido2.datasource.network.model.PublicKeyCredentialCreationOptions import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2CredentialRequest +import com.x8bit.bitwarden.data.autofill.fido2.model.PasskeyAttestationOptions import com.x8bit.bitwarden.data.platform.util.toUriOrNull import com.x8bit.bitwarden.ui.platform.base.util.toAndroidAppUriString import com.x8bit.bitwarden.ui.vault.feature.addedit.VaultAddEditState @@ -13,7 +13,7 @@ import java.util.UUID * [VaultAddEditState.ViewState.Content] during FIDO 2 credential creation. */ fun Fido2CredentialRequest.toDefaultAddTypeContent( - creationOptions: PublicKeyCredentialCreationOptions?, + attestationOptions: PasskeyAttestationOptions?, isIndividualVaultDisabled: Boolean, ): VaultAddEditState.ViewState.Content { @@ -23,12 +23,12 @@ fun Fido2CredentialRequest.toDefaultAddTypeContent( ?: packageName .toAndroidAppUriString() - val rpName = creationOptions + val rpName = attestationOptions ?.relyingParty ?.name .orEmpty() - val username = creationOptions + val username = attestationOptions ?.user ?.name .orEmpty() diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/itemlisting/VaultItemListingViewModel.kt b/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/itemlisting/VaultItemListingViewModel.kt index 63c4702b0e..ad48ae9b20 100644 --- a/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/itemlisting/VaultItemListingViewModel.kt +++ b/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/itemlisting/VaultItemListingViewModel.kt @@ -8,11 +8,11 @@ import com.bitwarden.vault.CipherView import com.x8bit.bitwarden.R import com.x8bit.bitwarden.data.auth.repository.AuthRepository import com.x8bit.bitwarden.data.auth.repository.model.ValidatePasswordResult -import com.x8bit.bitwarden.data.autofill.fido2.datasource.network.model.PublicKeyCredentialCreationOptions.AuthenticatorSelectionCriteria.UserVerificationRequirement import com.x8bit.bitwarden.data.autofill.fido2.manager.Fido2CredentialManager import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2CredentialRequest import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2RegisterCredentialResult import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2ValidateOriginResult +import com.x8bit.bitwarden.data.autofill.fido2.model.PasskeyAttestationOptions.AuthenticatorSelectionCriteria.UserVerificationRequirement import com.x8bit.bitwarden.data.autofill.manager.AutofillSelectionManager import com.x8bit.bitwarden.data.autofill.model.AutofillSelectionData import com.x8bit.bitwarden.data.autofill.util.isActiveWithFido2Credentials @@ -447,13 +447,13 @@ class VaultItemListingViewModel @Inject constructor( credentialRequest: Fido2CredentialRequest, cipherView: CipherView, ) { - val createOptions = fido2CredentialManager - .getPasskeyCreateOptionsOrNull(credentialRequest.requestJson) + val attestationOptions = fido2CredentialManager + .getPasskeyAttestationOptionsOrNull(credentialRequest.requestJson) ?: run { showFido2ErrorDialog() return } - when (createOptions.authenticatorSelection.userVerification) { + when (attestationOptions.authenticatorSelection.userVerification) { UserVerificationRequirement.DISCOURAGED -> { registerFido2CredentialToCipher( request = credentialRequest, diff --git a/app/src/test/java/com/x8bit/bitwarden/data/autofill/fido2/manager/Fido2CredentialManagerTest.kt b/app/src/test/java/com/x8bit/bitwarden/data/autofill/fido2/manager/Fido2CredentialManagerTest.kt index dc1dac7ddf..ea765acf83 100644 --- a/app/src/test/java/com/x8bit/bitwarden/data/autofill/fido2/manager/Fido2CredentialManagerTest.kt +++ b/app/src/test/java/com/x8bit/bitwarden/data/autofill/fido2/manager/Fido2CredentialManagerTest.kt @@ -7,12 +7,12 @@ import androidx.credentials.provider.CallingAppInfo import com.bitwarden.fido.ClientData import com.bitwarden.sdk.Fido2CredentialStore import com.x8bit.bitwarden.data.autofill.fido2.datasource.network.model.DigitalAssetLinkResponseJson -import com.x8bit.bitwarden.data.autofill.fido2.datasource.network.model.PublicKeyCredentialCreationOptions import com.x8bit.bitwarden.data.autofill.fido2.datasource.network.service.DigitalAssetLinkService import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2AttestationResponse import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2CredentialRequest import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2RegisterCredentialResult import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2ValidateOriginResult +import com.x8bit.bitwarden.data.autofill.fido2.model.PasskeyAttestationOptions import com.x8bit.bitwarden.data.autofill.fido2.model.createMockFido2CredentialRequest import com.x8bit.bitwarden.data.platform.manager.AssetManager import com.x8bit.bitwarden.data.platform.util.asFailure @@ -21,7 +21,7 @@ import com.x8bit.bitwarden.data.vault.datasource.sdk.VaultSdkSource import com.x8bit.bitwarden.data.vault.datasource.sdk.model.RegisterFido2CredentialRequest import com.x8bit.bitwarden.data.vault.datasource.sdk.model.createMockCipherView import com.x8bit.bitwarden.data.vault.datasource.sdk.model.createMockPublicKeyAttestationResponse -import com.x8bit.bitwarden.ui.vault.feature.addedit.util.createMockPublicKeyCredentialCreationOptions +import com.x8bit.bitwarden.ui.vault.feature.addedit.util.createMockPasskeyAttestationOptions import io.mockk.coEvery import io.mockk.coVerify import io.mockk.every @@ -55,8 +55,8 @@ class Fido2CredentialManagerTest { } private val json = mockk { every { - decodeFromString(any()) - } returns createMockPublicKeyCredentialCreationOptions(number = 1) + decodeFromString(any()) + } returns createMockPasskeyAttestationOptions(number = 1) } private val mockPrivilegedCallingAppInfo = mockk { every { packageName } returns "com.x8bit.bitwarden" @@ -184,7 +184,7 @@ class Fido2CredentialManagerTest { @Test fun `validateOrigin should return error when request cannot be decoded`() = runTest { every { - json.decodeFromString(any()) + json.decodeFromString(any()) } throws SerializationException() assertEquals( @@ -197,7 +197,7 @@ class Fido2CredentialManagerTest { fun `validateOrigin should return error when request cannot be cast to object type`() = runTest { every { - json.decodeFromString(any()) + json.decodeFromString(any()) } throws IllegalArgumentException() assertEquals( @@ -266,11 +266,11 @@ class Fido2CredentialManagerTest { } @Test - fun `getPasskeyCreateOptionsOrNull should return passkey options when deserialized`() = + fun `getPasskeyAttestationOptionsOrNull should return passkey options when deserialized`() = runTest { assertEquals( - createMockPublicKeyCredentialCreationOptions(number = 1), - fido2CredentialManager.getPasskeyCreateOptionsOrNull( + createMockPasskeyAttestationOptions(number = 1), + fido2CredentialManager.getPasskeyAttestationOptionsOrNull( requestJson = "", ), ) @@ -280,10 +280,10 @@ class Fido2CredentialManagerTest { fun `getPasskeyCreateOptionsOrNull should return null when deserialization fails`() = runTest { every { - json.decodeFromString(any()) + json.decodeFromString(any()) } throws SerializationException() assertNull( - fido2CredentialManager.getPasskeyCreateOptionsOrNull( + fido2CredentialManager.getPasskeyAttestationOptionsOrNull( requestJson = "", ), ) @@ -293,10 +293,10 @@ class Fido2CredentialManagerTest { @Test fun `getPasskeyCreateOptionsOrNull should return null when IllegalArgumentException is thrown`() { every { - json.decodeFromString(any()) + json.decodeFromString(any()) } throws IllegalArgumentException() - assertNull(fido2CredentialManager.getPasskeyCreateOptionsOrNull(requestJson = "")) + assertNull(fido2CredentialManager.getPasskeyAttestationOptionsOrNull(requestJson = "")) } @Suppress("MaxLineLength") diff --git a/app/src/test/java/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditViewModelTest.kt b/app/src/test/java/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditViewModelTest.kt index 00617fd38c..fdc6bdb6ae 100644 --- a/app/src/test/java/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditViewModelTest.kt +++ b/app/src/test/java/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditViewModelTest.kt @@ -15,10 +15,10 @@ import com.x8bit.bitwarden.data.auth.repository.model.BreachCountResult import com.x8bit.bitwarden.data.auth.repository.model.Organization import com.x8bit.bitwarden.data.auth.repository.model.UserState import com.x8bit.bitwarden.data.auth.repository.model.VaultUnlockType -import com.x8bit.bitwarden.data.autofill.fido2.datasource.network.model.PublicKeyCredentialCreationOptions.AuthenticatorSelectionCriteria.UserVerificationRequirement import com.x8bit.bitwarden.data.autofill.fido2.manager.Fido2CredentialManager import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2CredentialRequest import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2RegisterCredentialResult +import com.x8bit.bitwarden.data.autofill.fido2.model.PasskeyAttestationOptions.AuthenticatorSelectionCriteria.UserVerificationRequirement import com.x8bit.bitwarden.data.autofill.fido2.model.createMockFido2CredentialRequest import com.x8bit.bitwarden.data.autofill.model.AutofillSaveItem import com.x8bit.bitwarden.data.autofill.model.AutofillSelectionData @@ -54,7 +54,7 @@ import com.x8bit.bitwarden.ui.vault.feature.addedit.model.CustomFieldAction import com.x8bit.bitwarden.ui.vault.feature.addedit.model.CustomFieldType import com.x8bit.bitwarden.ui.vault.feature.addedit.model.UriItem import com.x8bit.bitwarden.ui.vault.feature.addedit.model.toCustomField -import com.x8bit.bitwarden.ui.vault.feature.addedit.util.createMockPublicKeyCredentialCreationOptions +import com.x8bit.bitwarden.ui.vault.feature.addedit.util.createMockPasskeyAttestationOptions import com.x8bit.bitwarden.ui.vault.feature.addedit.util.toDefaultAddTypeContent import com.x8bit.bitwarden.ui.vault.feature.addedit.util.toViewState import com.x8bit.bitwarden.ui.vault.model.VaultAddEditType @@ -326,7 +326,7 @@ class VaultAddEditViewModelTest : BaseViewModelTest() { fido2CredentialRequest = fido2CredentialRequest, ) val fido2ContentState = fido2CredentialRequest.toDefaultAddTypeContent( - creationOptions = createMockPublicKeyCredentialCreationOptions(number = 1), + attestationOptions = createMockPasskeyAttestationOptions(number = 1), isIndividualVaultDisabled = false, ) val vaultAddEditType = VaultAddEditType.AddItem(VaultItemCipherType.LOGIN) @@ -732,7 +732,7 @@ class VaultAddEditViewModelTest : BaseViewModelTest() { val mockCreateResult = Fido2RegisterCredentialResult.Success( registrationResponse = "mockRegistrationResponse", ) - val mockCreateOptions = createMockPublicKeyCredentialCreationOptions( + val mockAttestationOptions = createMockPasskeyAttestationOptions( number = 1, userVerificationRequirement = UserVerificationRequirement.REQUIRED, ) @@ -745,10 +745,10 @@ class VaultAddEditViewModelTest : BaseViewModelTest() { ) } returns mockCreateResult every { - fido2CredentialManager.getPasskeyCreateOptionsOrNull( + fido2CredentialManager.getPasskeyAttestationOptionsOrNull( requestJson = fido2CredentialRequest.requestJson, ) - } returns mockCreateOptions + } returns mockAttestationOptions every { authRepository.activeUserId } returns "mockUserId" turbineScope { @@ -811,7 +811,7 @@ class VaultAddEditViewModelTest : BaseViewModelTest() { ), ) val mockCreateResult = Fido2RegisterCredentialResult.Success("mockResponse") - val mockCreateOptions = createMockPublicKeyCredentialCreationOptions( + val mockAttestationOptions = createMockPasskeyAttestationOptions( number = 1, userVerificationRequirement = UserVerificationRequirement.DISCOURAGED, ) @@ -823,10 +823,10 @@ class VaultAddEditViewModelTest : BaseViewModelTest() { ) } returns mockCreateResult every { - fido2CredentialManager.getPasskeyCreateOptionsOrNull( + fido2CredentialManager.getPasskeyAttestationOptionsOrNull( requestJson = fido2CredentialRequest.requestJson, ) - } returns mockCreateOptions + } returns mockAttestationOptions every { authRepository.activeUserId } returns mockUserId turbineScope { @@ -904,7 +904,7 @@ class VaultAddEditViewModelTest : BaseViewModelTest() { } verify(exactly = 0) { - fido2CredentialManager.getPasskeyCreateOptionsOrNull(any()) + fido2CredentialManager.getPasskeyAttestationOptionsOrNull(any()) } } @@ -927,7 +927,7 @@ class VaultAddEditViewModelTest : BaseViewModelTest() { .copy(shouldExitOnSave = true) every { - fido2CredentialManager.getPasskeyCreateOptionsOrNull( + fido2CredentialManager.getPasskeyAttestationOptionsOrNull( requestJson = fido2CredentialRequest.requestJson, ) } returns null @@ -971,10 +971,10 @@ class VaultAddEditViewModelTest : BaseViewModelTest() { .copy(shouldExitOnSave = true) every { - fido2CredentialManager.getPasskeyCreateOptionsOrNull( + fido2CredentialManager.getPasskeyAttestationOptionsOrNull( requestJson = fido2CredentialRequest.requestJson, ) - } returns createMockPublicKeyCredentialCreationOptions( + } returns createMockPasskeyAttestationOptions( number = 1, userVerificationRequirement = UserVerificationRequirement.PREFERRED, ) @@ -1017,10 +1017,10 @@ class VaultAddEditViewModelTest : BaseViewModelTest() { .copy(shouldExitOnSave = true) every { - fido2CredentialManager.getPasskeyCreateOptionsOrNull( + fido2CredentialManager.getPasskeyAttestationOptionsOrNull( requestJson = fido2CredentialRequest.requestJson, ) - } returns createMockPublicKeyCredentialCreationOptions( + } returns createMockPasskeyAttestationOptions( number = 1, userVerificationRequirement = UserVerificationRequirement.REQUIRED, ) @@ -1062,10 +1062,10 @@ class VaultAddEditViewModelTest : BaseViewModelTest() { fido2CredentialRequest = fido2CredentialRequest, ) every { - fido2CredentialManager.getPasskeyCreateOptionsOrNull( + fido2CredentialManager.getPasskeyAttestationOptionsOrNull( requestJson = fido2CredentialRequest.requestJson, ) - } returns createMockPublicKeyCredentialCreationOptions( + } returns createMockPasskeyAttestationOptions( number = 1, userVerificationRequirement = null, ) @@ -1545,8 +1545,8 @@ class VaultAddEditViewModelTest : BaseViewModelTest() { } returns stateWithName.viewState every { fido2CredentialManager.isUserVerified } returns false every { - fido2CredentialManager.getPasskeyCreateOptionsOrNull(any()) - } returns createMockPublicKeyCredentialCreationOptions( + fido2CredentialManager.getPasskeyAttestationOptionsOrNull(any()) + } returns createMockPasskeyAttestationOptions( number = 1, userVerificationRequirement = UserVerificationRequirement.REQUIRED, ) @@ -1565,7 +1565,7 @@ class VaultAddEditViewModelTest : BaseViewModelTest() { coVerify { fido2CredentialManager.isUserVerified - fido2CredentialManager.getPasskeyCreateOptionsOrNull(mockFidoRequest.requestJson) + fido2CredentialManager.getPasskeyAttestationOptionsOrNull(mockFidoRequest.requestJson) } } diff --git a/app/src/test/java/com/x8bit/bitwarden/ui/vault/feature/addedit/util/Fido2CredentialRequestExtensionsTest.kt b/app/src/test/java/com/x8bit/bitwarden/ui/vault/feature/addedit/util/Fido2CredentialRequestExtensionsTest.kt index 097edf2cd3..94d76e5962 100644 --- a/app/src/test/java/com/x8bit/bitwarden/ui/vault/feature/addedit/util/Fido2CredentialRequestExtensionsTest.kt +++ b/app/src/test/java/com/x8bit/bitwarden/ui/vault/feature/addedit/util/Fido2CredentialRequestExtensionsTest.kt @@ -55,7 +55,7 @@ class Fido2CredentialRequestExtensionsTest { origin = null, ) .toDefaultAddTypeContent( - creationOptions = createMockPublicKeyCredentialCreationOptions(1), + attestationOptions = createMockPasskeyAttestationOptions(1), isIndividualVaultDisabled = false, ), ) @@ -91,7 +91,7 @@ class Fido2CredentialRequestExtensionsTest { origin = "www.test.com", ) .toDefaultAddTypeContent( - creationOptions = createMockPublicKeyCredentialCreationOptions(number = 1), + attestationOptions = createMockPasskeyAttestationOptions(number = 1), isIndividualVaultDisabled = false, ), ) diff --git a/app/src/test/java/com/x8bit/bitwarden/ui/vault/feature/addedit/util/PublicKeyCredentialCreationOptionsTestHelpers.kt b/app/src/test/java/com/x8bit/bitwarden/ui/vault/feature/addedit/util/PublicKeyCredentialCreationOptionsTestHelpers.kt index 68186c3f66..e4ff1bb9b4 100644 --- a/app/src/test/java/com/x8bit/bitwarden/ui/vault/feature/addedit/util/PublicKeyCredentialCreationOptionsTestHelpers.kt +++ b/app/src/test/java/com/x8bit/bitwarden/ui/vault/feature/addedit/util/PublicKeyCredentialCreationOptionsTestHelpers.kt @@ -1,37 +1,37 @@ package com.x8bit.bitwarden.ui.vault.feature.addedit.util -import com.x8bit.bitwarden.data.autofill.fido2.datasource.network.model.PublicKeyCredentialCreationOptions +import com.x8bit.bitwarden.data.autofill.fido2.model.PasskeyAttestationOptions /** - * Returns a mock FIDO 2 [PublicKeyCredentialCreationOptions] object to simulate a credential + * Returns a mock FIDO 2 [PasskeyAttestationOptions] object to simulate a credential * creation request. */ @Suppress("MaxLineLength") -fun createMockPublicKeyCredentialCreationOptions( +fun createMockPasskeyAttestationOptions( number: Int, - userVerificationRequirement: PublicKeyCredentialCreationOptions.AuthenticatorSelectionCriteria.UserVerificationRequirement? = null, -) = PublicKeyCredentialCreationOptions( - authenticatorSelection = PublicKeyCredentialCreationOptions + userVerificationRequirement: PasskeyAttestationOptions.AuthenticatorSelectionCriteria.UserVerificationRequirement? = null, +) = PasskeyAttestationOptions( + authenticatorSelection = PasskeyAttestationOptions .AuthenticatorSelectionCriteria(userVerification = userVerificationRequirement), challenge = "mockPublicKeyCredentialCreationOptionsChallenge-$number", excludeCredentials = listOf( - PublicKeyCredentialCreationOptions.PublicKeyCredentialDescriptor( + PasskeyAttestationOptions.PublicKeyCredentialDescriptor( type = "mockPublicKeyCredentialDescriptorType-$number", id = "mockPublicKeyCredentialDescriptorId-$number", transports = listOf("mockPublicKeyCredentialDescriptorTransports-$number"), ), ), pubKeyCredParams = listOf( - PublicKeyCredentialCreationOptions.PublicKeyCredentialParameters( + PasskeyAttestationOptions.PublicKeyCredentialParameters( type = "PublicKeyCredentialParametersType-$number", alg = number.toLong(), ), ), - relyingParty = PublicKeyCredentialCreationOptions.PublicKeyCredentialRpEntity( + relyingParty = PasskeyAttestationOptions.PublicKeyCredentialRpEntity( name = "mockPublicKeyCredentialRpEntityName-$number", id = "mockPublicKeyCredentialRpEntity-$number", ), - user = PublicKeyCredentialCreationOptions.PublicKeyCredentialUserEntity( + user = PasskeyAttestationOptions.PublicKeyCredentialUserEntity( name = "mockPublicKeyCredentialUserEntityName-$number", id = "mockPublicKeyCredentialUserEntityId-$number", displayName = "mockPublicKeyCredentialUserEntityDisplayName-$number", diff --git a/app/src/test/java/com/x8bit/bitwarden/ui/vault/feature/itemlisting/VaultItemListingViewModelTest.kt b/app/src/test/java/com/x8bit/bitwarden/ui/vault/feature/itemlisting/VaultItemListingViewModelTest.kt index 6a221eeb67..ee6d7f9d8d 100644 --- a/app/src/test/java/com/x8bit/bitwarden/ui/vault/feature/itemlisting/VaultItemListingViewModelTest.kt +++ b/app/src/test/java/com/x8bit/bitwarden/ui/vault/feature/itemlisting/VaultItemListingViewModelTest.kt @@ -10,11 +10,11 @@ import com.x8bit.bitwarden.data.auth.repository.AuthRepository import com.x8bit.bitwarden.data.auth.repository.model.SwitchAccountResult import com.x8bit.bitwarden.data.auth.repository.model.UserState import com.x8bit.bitwarden.data.auth.repository.model.ValidatePasswordResult -import com.x8bit.bitwarden.data.autofill.fido2.datasource.network.model.PublicKeyCredentialCreationOptions.AuthenticatorSelectionCriteria.UserVerificationRequirement import com.x8bit.bitwarden.data.autofill.fido2.manager.Fido2CredentialManager import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2CredentialRequest import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2RegisterCredentialResult import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2ValidateOriginResult +import com.x8bit.bitwarden.data.autofill.fido2.model.PasskeyAttestationOptions.AuthenticatorSelectionCriteria.UserVerificationRequirement import com.x8bit.bitwarden.data.autofill.fido2.model.createMockFido2CredentialRequest import com.x8bit.bitwarden.data.autofill.manager.AutofillSelectionManager import com.x8bit.bitwarden.data.autofill.manager.AutofillSelectionManagerImpl @@ -51,7 +51,7 @@ import com.x8bit.bitwarden.ui.platform.base.util.concat import com.x8bit.bitwarden.ui.platform.components.model.AccountSummary import com.x8bit.bitwarden.ui.platform.components.model.IconData import com.x8bit.bitwarden.ui.platform.feature.search.model.SearchType -import com.x8bit.bitwarden.ui.vault.feature.addedit.util.createMockPublicKeyCredentialCreationOptions +import com.x8bit.bitwarden.ui.vault.feature.addedit.util.createMockPasskeyAttestationOptions import com.x8bit.bitwarden.ui.vault.feature.itemlisting.model.ListingItemOverflowAction import com.x8bit.bitwarden.ui.vault.feature.itemlisting.util.createMockDisplayItemForCipher import com.x8bit.bitwarden.ui.vault.feature.vault.model.VaultFilterType @@ -380,7 +380,7 @@ class VaultItemListingViewModelTest : BaseViewModelTest() { sendViewList = emptyList(), ), ) - every { fido2CredentialManager.getPasskeyCreateOptionsOrNull(any()) } returns null + every { fido2CredentialManager.getPasskeyAttestationOptionsOrNull(any()) } returns null val viewModel = createVaultItemListingViewModel() viewModel.trySendAction(VaultItemListingsAction.ItemClick(cipherView.id.orEmpty())) @@ -416,8 +416,8 @@ class VaultItemListingViewModelTest : BaseViewModelTest() { ), ) every { - fido2CredentialManager.getPasskeyCreateOptionsOrNull(any()) - } returns createMockPublicKeyCredentialCreationOptions( + fido2CredentialManager.getPasskeyAttestationOptionsOrNull(any()) + } returns createMockPasskeyAttestationOptions( number = 1, userVerificationRequirement = UserVerificationRequirement.REQUIRED, ) @@ -459,8 +459,8 @@ class VaultItemListingViewModelTest : BaseViewModelTest() { ), ) every { - fido2CredentialManager.getPasskeyCreateOptionsOrNull(any()) - } returns createMockPublicKeyCredentialCreationOptions( + fido2CredentialManager.getPasskeyAttestationOptionsOrNull(any()) + } returns createMockPasskeyAttestationOptions( number = 1, userVerificationRequirement = UserVerificationRequirement.REQUIRED, ) @@ -513,8 +513,8 @@ class VaultItemListingViewModelTest : BaseViewModelTest() { ), ) every { - fido2CredentialManager.getPasskeyCreateOptionsOrNull(any()) - } returns createMockPublicKeyCredentialCreationOptions( + fido2CredentialManager.getPasskeyAttestationOptionsOrNull(any()) + } returns createMockPasskeyAttestationOptions( number = 1, userVerificationRequirement = UserVerificationRequirement.DISCOURAGED, ) @@ -556,8 +556,8 @@ class VaultItemListingViewModelTest : BaseViewModelTest() { ), ) every { - fido2CredentialManager.getPasskeyCreateOptionsOrNull(any()) - } returns createMockPublicKeyCredentialCreationOptions( + fido2CredentialManager.getPasskeyAttestationOptionsOrNull(any()) + } returns createMockPasskeyAttestationOptions( number = 1, userVerificationRequirement = UserVerificationRequirement.REQUIRED, ) @@ -2371,8 +2371,8 @@ class VaultItemListingViewModelTest : BaseViewModelTest() { ), ) every { - fido2CredentialManager.getPasskeyCreateOptionsOrNull(any()) - } returns createMockPublicKeyCredentialCreationOptions( + fido2CredentialManager.getPasskeyAttestationOptionsOrNull(any()) + } returns createMockPasskeyAttestationOptions( number = 1, userVerificationRequirement = UserVerificationRequirement.REQUIRED, )