mirror of
https://github.com/bitwarden/android.git
synced 2025-03-16 03:08:50 +03:00
Refactor PublicKeyCredentialCreationOptions (#3584)
This commit is contained in:
parent
1fdfbac7b7
commit
8a381d8682
11 changed files with 84 additions and 84 deletions
|
@ -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.
|
||||
|
|
|
@ -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<PublicKeyCredentialCreationOptions>(requestJson)
|
||||
json.decodeFromString<PasskeyAttestationOptions>(requestJson)
|
||||
} catch (e: SerializationException) {
|
||||
null
|
||||
} catch (e: IllegalArgumentException) {
|
||||
|
@ -194,7 +194,7 @@ class Fido2CredentialManagerImpl(
|
|||
private fun String.getRpId(json: Json): Result<String> {
|
||||
return try {
|
||||
json
|
||||
.decodeFromString<PublicKeyCredentialCreationOptions>(this)
|
||||
.decodeFromString<PasskeyAttestationOptions>(this)
|
||||
.relyingParty
|
||||
.id
|
||||
.asSuccess()
|
||||
|
|
|
@ -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")
|
|
@ -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
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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<Json> {
|
||||
every {
|
||||
decodeFromString<PublicKeyCredentialCreationOptions>(any())
|
||||
} returns createMockPublicKeyCredentialCreationOptions(number = 1)
|
||||
decodeFromString<PasskeyAttestationOptions>(any())
|
||||
} returns createMockPasskeyAttestationOptions(number = 1)
|
||||
}
|
||||
private val mockPrivilegedCallingAppInfo = mockk<CallingAppInfo> {
|
||||
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<PublicKeyCredentialCreationOptions>(any())
|
||||
json.decodeFromString<PasskeyAttestationOptions>(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<PublicKeyCredentialCreationOptions>(any())
|
||||
json.decodeFromString<PasskeyAttestationOptions>(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<PublicKeyCredentialCreationOptions>(any())
|
||||
json.decodeFromString<PasskeyAttestationOptions>(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<PublicKeyCredentialCreationOptions>(any())
|
||||
json.decodeFromString<PasskeyAttestationOptions>(any())
|
||||
} throws IllegalArgumentException()
|
||||
|
||||
assertNull(fido2CredentialManager.getPasskeyCreateOptionsOrNull(requestJson = ""))
|
||||
assertNull(fido2CredentialManager.getPasskeyAttestationOptionsOrNull(requestJson = ""))
|
||||
}
|
||||
|
||||
@Suppress("MaxLineLength")
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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,
|
||||
),
|
||||
)
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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,
|
||||
)
|
||||
|
|
Loading…
Add table
Reference in a new issue