[PM-15057] Rename Fido2CredentialRequest to Fido2CreateCredentialRequest (#4362)

This commit is contained in:
Patrick Honkonen
2024-11-22 15:49:00 +00:00
committed by GitHub
parent dbb006d745
commit 249dbdaaf8
23 changed files with 170 additions and 170 deletions
@@ -325,7 +325,7 @@ class MainViewModel @Inject constructor(
fido2CredentialManager.isUserVerified = false
specialCircumstanceManager.specialCircumstance =
SpecialCircumstance.Fido2Save(
fido2CredentialRequest = fido2CredentialRequestData,
fido2CreateCredentialRequest = fido2CredentialRequestData,
)
// Switch accounts if the selected user is not the active user.
@@ -4,7 +4,7 @@ import androidx.credentials.provider.CallingAppInfo
import com.bitwarden.vault.CipherView
import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2CredentialAssertionRequest
import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2CredentialAssertionResult
import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2CredentialRequest
import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2CreateCredentialRequest
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.PasskeyAssertionOptions
@@ -53,7 +53,7 @@ interface Fido2CredentialManager {
*/
suspend fun registerFido2Credential(
userId: String,
fido2CredentialRequest: Fido2CredentialRequest,
fido2CreateCredentialRequest: Fido2CreateCredentialRequest,
selectedCipherView: CipherView,
): Fido2RegisterCredentialResult
@@ -10,7 +10,7 @@ import com.x8bit.bitwarden.data.autofill.fido2.datasource.network.model.DigitalA
import com.x8bit.bitwarden.data.autofill.fido2.datasource.network.service.DigitalAssetLinkService
import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2CredentialAssertionRequest
import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2CredentialAssertionResult
import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2CredentialRequest
import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2CreateCredentialRequest
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.PasskeyAssertionOptions
@@ -53,31 +53,31 @@ class Fido2CredentialManagerImpl(
override suspend fun registerFido2Credential(
userId: String,
fido2CredentialRequest: Fido2CredentialRequest,
fido2CreateCredentialRequest: Fido2CreateCredentialRequest,
selectedCipherView: CipherView,
): Fido2RegisterCredentialResult {
val clientData = if (fido2CredentialRequest.callingAppInfo.isOriginPopulated()) {
fido2CredentialRequest
val clientData = if (fido2CreateCredentialRequest.callingAppInfo.isOriginPopulated()) {
fido2CreateCredentialRequest
.callingAppInfo
.getAppSigningSignatureFingerprint()
?.let { ClientData.DefaultWithCustomHash(hash = it) }
?: return Fido2RegisterCredentialResult.Error
} else {
ClientData.DefaultWithExtraData(
androidPackageName = fido2CredentialRequest
androidPackageName = fido2CreateCredentialRequest
.callingAppInfo
.packageName,
)
}
val assetLinkUrl = fido2CredentialRequest
val assetLinkUrl = fido2CreateCredentialRequest
.origin
?: getOriginUrlFromAttestationOptionsOrNull(fido2CredentialRequest.requestJson)
?: getOriginUrlFromAttestationOptionsOrNull(fido2CreateCredentialRequest.requestJson)
?: return Fido2RegisterCredentialResult.Error
val origin = Origin.Android(
UnverifiedAssetLink(
packageName = fido2CredentialRequest.packageName,
sha256CertFingerprint = fido2CredentialRequest
packageName = fido2CreateCredentialRequest.packageName,
sha256CertFingerprint = fido2CreateCredentialRequest
.callingAppInfo
.getSignatureFingerprintAsHexString()
?: return Fido2RegisterCredentialResult.Error,
@@ -91,7 +91,7 @@ class Fido2CredentialManagerImpl(
request = RegisterFido2CredentialRequest(
userId = userId,
origin = origin,
requestJson = """{"publicKey": ${fido2CredentialRequest.requestJson}}""",
requestJson = """{"publicKey": ${fido2CreateCredentialRequest.requestJson}}""",
clientData = clientData,
selectedCipherView = selectedCipherView,
// User verification is handled prior to engaging the SDK. We always respond
@@ -14,7 +14,7 @@ import kotlinx.parcelize.Parcelize
* @property callingAppInfo Information about the application that initiated the request.
*/
@Parcelize
data class Fido2CredentialRequest(
data class Fido2CreateCredentialRequest(
val userId: String,
val requestJson: String,
val packageName: String,
@@ -7,7 +7,7 @@ import androidx.credentials.GetPublicKeyCredentialOption
import androidx.credentials.provider.BeginGetPublicKeyCredentialOption
import androidx.credentials.provider.PendingIntentHandler
import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2CredentialAssertionRequest
import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2CredentialRequest
import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2CreateCredentialRequest
import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2GetCredentialsRequest
import com.x8bit.bitwarden.data.platform.util.isBuildVersionBelow
import com.x8bit.bitwarden.ui.platform.manager.intent.EXTRA_KEY_CIPHER_ID
@@ -15,10 +15,10 @@ import com.x8bit.bitwarden.ui.platform.manager.intent.EXTRA_KEY_CREDENTIAL_ID
import com.x8bit.bitwarden.ui.platform.manager.intent.EXTRA_KEY_USER_ID
/**
* Checks if this [Intent] contains a [Fido2CredentialRequest] related to an ongoing FIDO 2
* Checks if this [Intent] contains a [Fido2CreateCredentialRequest] related to an ongoing FIDO 2
* credential creation process.
*/
fun Intent.getFido2CredentialRequestOrNull(): Fido2CredentialRequest? {
fun Intent.getFido2CredentialRequestOrNull(): Fido2CreateCredentialRequest? {
if (isBuildVersionBelow(Build.VERSION_CODES.UPSIDE_DOWN_CAKE)) return null
val systemRequest = PendingIntentHandler
@@ -33,7 +33,7 @@ fun Intent.getFido2CredentialRequestOrNull(): Fido2CredentialRequest? {
val userId = getStringExtra(EXTRA_KEY_USER_ID)
?: return null
return Fido2CredentialRequest(
return Fido2CreateCredentialRequest(
userId = userId,
requestJson = createPublicKeyRequest.requestJson,
packageName = systemRequest.callingAppInfo.packageName,
@@ -2,7 +2,7 @@ package com.x8bit.bitwarden.data.platform.manager.model
import android.os.Parcelable
import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2CredentialAssertionRequest
import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2CredentialRequest
import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2CreateCredentialRequest
import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2GetCredentialsRequest
import com.x8bit.bitwarden.data.autofill.model.AutofillSaveItem
import com.x8bit.bitwarden.data.autofill.model.AutofillSelectionData
@@ -65,7 +65,7 @@ sealed class SpecialCircumstance : Parcelable {
*/
@Parcelize
data class Fido2Save(
val fido2CredentialRequest: Fido2CredentialRequest,
val fido2CreateCredentialRequest: Fido2CreateCredentialRequest,
) : SpecialCircumstance()
/**
@@ -1,7 +1,7 @@
package com.x8bit.bitwarden.data.platform.manager.util
import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2CredentialAssertionRequest
import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2CredentialRequest
import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2CreateCredentialRequest
import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2GetCredentialsRequest
import com.x8bit.bitwarden.data.autofill.model.AutofillSaveItem
import com.x8bit.bitwarden.data.autofill.model.AutofillSelectionData
@@ -27,11 +27,11 @@ fun SpecialCircumstance.toAutofillSelectionDataOrNull(): AutofillSelectionData?
}
/**
* Returns [Fido2CredentialRequest] when contained in the given [SpecialCircumstance].
* Returns [Fido2CreateCredentialRequest] when contained in the given [SpecialCircumstance].
*/
fun SpecialCircumstance.toFido2RequestOrNull(): Fido2CredentialRequest? =
fun SpecialCircumstance.toFido2RequestOrNull(): Fido2CreateCredentialRequest? =
when (this) {
is SpecialCircumstance.Fido2Save -> this.fido2CredentialRequest
is SpecialCircumstance.Fido2Save -> this.fido2CreateCredentialRequest
else -> null
}
@@ -8,7 +8,7 @@ import com.x8bit.bitwarden.data.auth.repository.model.AuthState
import com.x8bit.bitwarden.data.auth.repository.model.UserState
import com.x8bit.bitwarden.data.auth.repository.util.parseJwtTokenDataOrNull
import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2CredentialAssertionRequest
import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2CredentialRequest
import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2CreateCredentialRequest
import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2GetCredentialsRequest
import com.x8bit.bitwarden.data.autofill.model.AutofillSaveItem
import com.x8bit.bitwarden.data.autofill.model.AutofillSelectionData
@@ -133,7 +133,7 @@ class RootNavViewModel @Inject constructor(
is SpecialCircumstance.Fido2Save -> {
RootNavState.VaultUnlockedForFido2Save(
activeUserId = userState.activeUserId,
fido2CredentialRequest = specialCircumstance.fido2CredentialRequest,
fido2CreateCredentialRequest = specialCircumstance.fido2CreateCredentialRequest,
)
}
@@ -286,12 +286,12 @@ sealed class RootNavState : Parcelable {
*
* @param activeUserId ID of the active user. Indirectly used to notify [RootNavViewModel] the
* active user has changed.
* @param fido2CredentialRequest System request containing FIDO credential data.
* @param fido2CreateCredentialRequest System request containing FIDO credential data.
*/
@Parcelize
data class VaultUnlockedForFido2Save(
val activeUserId: String,
val fido2CredentialRequest: Fido2CredentialRequest,
val fido2CreateCredentialRequest: Fido2CreateCredentialRequest,
) : RootNavState()
/**
@@ -12,7 +12,7 @@ import com.x8bit.bitwarden.data.auth.repository.model.ValidatePasswordResult
import com.x8bit.bitwarden.data.auth.repository.model.ValidatePinResult
import com.x8bit.bitwarden.data.auth.repository.model.VaultUnlockType
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.Fido2CreateCredentialRequest
import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2RegisterCredentialResult
import com.x8bit.bitwarden.data.autofill.fido2.model.UserVerificationRequirement
import com.x8bit.bitwarden.data.autofill.util.isActiveWithFido2Credentials
@@ -449,7 +449,7 @@ class VaultAddEditViewModel @Inject constructor(
}
private fun handleFido2RequestSpecialCircumstance(
request: Fido2CredentialRequest,
request: Fido2CreateCredentialRequest,
cipherView: CipherView,
) {
if (cipherView.isActiveWithFido2Credentials) {
@@ -462,7 +462,7 @@ class VaultAddEditViewModel @Inject constructor(
}
private fun registerFido2Credential(
request: Fido2CredentialRequest,
request: Fido2CreateCredentialRequest,
cipherView: CipherView,
) {
@@ -494,7 +494,7 @@ class VaultAddEditViewModel @Inject constructor(
}
private fun registerFido2CredentialToCipher(
request: Fido2CredentialRequest,
request: Fido2CreateCredentialRequest,
cipherView: CipherView,
) {
viewModelScope.launch {
@@ -506,7 +506,7 @@ class VaultAddEditViewModel @Inject constructor(
val result: Fido2RegisterCredentialResult =
fido2CredentialManager.registerFido2Credential(
userId = userId,
fido2CredentialRequest = request,
fido2CreateCredentialRequest = request,
selectedCipherView = cipherView,
)
sendAction(
@@ -1,6 +1,6 @@
package com.x8bit.bitwarden.ui.vault.feature.addedit.util
import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2CredentialRequest
import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2CreateCredentialRequest
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
@@ -12,7 +12,7 @@ import java.util.UUID
* Returns pre-filled content that may be used for an "add" type
* [VaultAddEditState.ViewState.Content] during FIDO 2 credential creation.
*/
fun Fido2CredentialRequest.toDefaultAddTypeContent(
fun Fido2CreateCredentialRequest.toDefaultAddTypeContent(
attestationOptions: PasskeyAttestationOptions?,
isIndividualVaultDisabled: Boolean,
): VaultAddEditState.ViewState.Content {
@@ -15,7 +15,7 @@ import com.x8bit.bitwarden.data.autofill.accessibility.manager.AccessibilitySele
import com.x8bit.bitwarden.data.autofill.fido2.manager.Fido2CredentialManager
import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2CredentialAssertionRequest
import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2CredentialAssertionResult
import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2CredentialRequest
import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2CreateCredentialRequest
import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2GetCredentialsRequest
import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2GetCredentialsResult
import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2RegisterCredentialResult
@@ -133,7 +133,7 @@ class VaultItemListingViewModel @Inject constructor(
autofillSelectionData = specialCircumstance?.toAutofillSelectionDataOrNull(),
hasMasterPassword = userState.activeAccount.hasMasterPassword,
totpData = specialCircumstance?.toTotpDataOrNull(),
fido2CredentialRequest = fido2CredentialRequest,
fido2CreateCredentialRequest = fido2CredentialRequest,
fido2CredentialAssertionRequest = specialCircumstance?.toFido2AssertionRequestOrNull(),
fido2GetCredentialsRequest = specialCircumstance?.toFido2GetCredentialsRequestOrNull(),
isPremium = userState.activeAccount.isPremium,
@@ -156,7 +156,7 @@ class VaultItemListingViewModel @Inject constructor(
viewModelScope.launch {
state
.fido2CredentialRequest
.fido2CreateCredentialRequest
?.let { request ->
sendAction(
VaultItemListingsAction.Internal.Fido2RegisterCredentialRequestReceive(
@@ -625,7 +625,7 @@ class VaultItemListingViewModel @Inject constructor(
private fun registerFido2Credential(cipherView: CipherView) {
val credentialRequest = state
.fido2CredentialRequest
.fido2CreateCredentialRequest
?: run {
// This scenario should not occur because `isFido2Creation` is false when
// `fido2CredentialRequest` is null. We show the FIDO 2 error dialog to inform
@@ -653,7 +653,7 @@ class VaultItemListingViewModel @Inject constructor(
}
private fun performUserVerificationIfRequired(
credentialRequest: Fido2CredentialRequest,
credentialRequest: Fido2CreateCredentialRequest,
cipherView: CipherView,
) {
val attestationOptions = fido2CredentialManager
@@ -691,7 +691,7 @@ class VaultItemListingViewModel @Inject constructor(
}
private fun registerFido2CredentialToCipher(
request: Fido2CredentialRequest,
request: Fido2CreateCredentialRequest,
cipherView: CipherView,
) {
val activeUserId = authRepository.activeUserId
@@ -703,7 +703,7 @@ class VaultItemListingViewModel @Inject constructor(
val result: Fido2RegisterCredentialResult =
fido2CredentialManager.registerFido2Credential(
userId = activeUserId,
fido2CredentialRequest = request,
fido2CreateCredentialRequest = request,
selectedCipherView = cipherView,
)
sendAction(
@@ -826,7 +826,7 @@ class VaultItemListingViewModel @Inject constructor(
private fun handleDismissFido2ErrorDialogClick() {
clearDialogState()
when {
state.fido2CredentialRequest != null -> {
state.fido2CreateCredentialRequest != null -> {
sendEvent(
VaultItemListingEvent.CompleteFido2Registration(
result = Fido2RegisterCredentialResult.Error,
@@ -1575,7 +1575,7 @@ class VaultItemListingViewModel @Inject constructor(
baseIconUrl = state.baseIconUrl,
isIconLoadingDisabled = state.isIconLoadingDisabled,
autofillSelectionData = state.autofillSelectionData,
fido2CreationData = state.fido2CredentialRequest,
fido2CreationData = state.fido2CreateCredentialRequest,
fido2CredentialAutofillViews = vaultData
.fido2CredentialAutofillViewList,
totpData = state.totpData,
@@ -1636,7 +1636,7 @@ class VaultItemListingViewModel @Inject constructor(
*/
@Suppress("MaxLineLength")
private suspend fun DataState<VaultData>.filterForFido2CreationIfNecessary(): DataState<VaultData> {
val request = state.fido2CredentialRequest ?: return this
val request = state.fido2CreateCredentialRequest ?: return this
return this.map { vaultData ->
val matchUri = request.origin
?: request.packageName
@@ -1739,7 +1739,7 @@ data class VaultItemListingState(
private val isPullToRefreshSettingEnabled: Boolean,
val totpData: TotpData? = null,
val autofillSelectionData: AutofillSelectionData? = null,
val fido2CredentialRequest: Fido2CredentialRequest? = null,
val fido2CreateCredentialRequest: Fido2CreateCredentialRequest? = null,
val fido2CredentialAssertionRequest: Fido2CredentialAssertionRequest? = null,
val fido2GetCredentialsRequest: Fido2GetCredentialsRequest? = null,
val hasMasterPassword: Boolean,
@@ -1763,7 +1763,7 @@ data class VaultItemListingState(
* Whether or not this represents a listing screen for FIDO2 creation.
*/
val isFido2Creation: Boolean
get() = fido2CredentialRequest != null
get() = fido2CreateCredentialRequest != null
/**
* Whether or not this represents a listing screen for totp.
@@ -1778,7 +1778,7 @@ data class VaultItemListingState(
?.uri
?.toHostOrPathOrNull()
?.let { R.string.items_for_uri.asText(it) }
?: fido2CredentialRequest
?: fido2CreateCredentialRequest
?.callingAppInfo
?.getFido2RpIdOrNull()
?.let { R.string.items_for_uri.asText(it) }
@@ -2549,7 +2549,7 @@ sealed class VaultItemListingsAction {
* Indicates that a FIDO 2 credential registration has been received.
*/
data class Fido2RegisterCredentialRequestReceive(
val request: Fido2CredentialRequest,
val request: Fido2CreateCredentialRequest,
) : Internal()
/**
@@ -12,7 +12,7 @@ import com.bitwarden.vault.CipherView
import com.bitwarden.vault.CollectionView
import com.bitwarden.vault.FolderView
import com.x8bit.bitwarden.R
import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2CredentialRequest
import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2CreateCredentialRequest
import com.x8bit.bitwarden.data.autofill.model.AutofillSelectionData
import com.x8bit.bitwarden.data.autofill.util.isActiveWithFido2Credentials
import com.x8bit.bitwarden.data.platform.util.subtitle
@@ -107,7 +107,7 @@ fun VaultData.toViewState(
baseIconUrl: String,
isIconLoadingDisabled: Boolean,
autofillSelectionData: AutofillSelectionData?,
fido2CreationData: Fido2CredentialRequest?,
fido2CreationData: Fido2CreateCredentialRequest?,
fido2CredentialAutofillViews: List<Fido2CredentialAutofillView>?,
totpData: TotpData?,
isPremiumUser: Boolean,
@@ -17,7 +17,7 @@ import com.x8bit.bitwarden.data.autofill.accessibility.manager.AccessibilitySele
import com.x8bit.bitwarden.data.autofill.accessibility.manager.AccessibilitySelectionManagerImpl
import com.x8bit.bitwarden.data.autofill.fido2.manager.Fido2CredentialManager
import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2CredentialAssertionRequest
import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2CredentialRequest
import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2CreateCredentialRequest
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
@@ -602,19 +602,19 @@ class MainViewModelTest : BaseViewModelTest() {
@Test
fun `on ReceiveFirstIntent with fido2 request data should set the special circumstance to Fido2Save`() {
val viewModel = createViewModel()
val fido2CredentialRequest = Fido2CredentialRequest(
val fido2CreateCredentialRequest = Fido2CreateCredentialRequest(
userId = DEFAULT_USER_STATE.activeUserId,
requestJson = """{"mockRequestJson":1}""",
packageName = "com.x8bit.bitwarden",
signingInfo = SigningInfo(),
origin = "mockOrigin",
)
val fido2Intent = createMockIntent(mockFido2CredentialRequest = fido2CredentialRequest)
val fido2Intent = createMockIntent(mockFido2CreateCredentialRequest = fido2CreateCredentialRequest)
coEvery {
fido2CredentialManager.validateOrigin(
fido2CredentialRequest.callingAppInfo,
fido2CredentialRequest.requestJson,
fido2CreateCredentialRequest.callingAppInfo,
fido2CreateCredentialRequest.requestJson,
)
} returns Fido2ValidateOriginResult.Success
@@ -626,7 +626,7 @@ class MainViewModelTest : BaseViewModelTest() {
assertEquals(
SpecialCircumstance.Fido2Save(
fido2CredentialRequest = fido2CredentialRequest,
fido2CreateCredentialRequest = fido2CreateCredentialRequest,
),
specialCircumstanceManager.specialCircumstance,
)
@@ -636,7 +636,7 @@ class MainViewModelTest : BaseViewModelTest() {
fun `on ReceiveFirstIntent with fido2 request data should set the user to unverified`() {
val viewModel = createViewModel()
val fido2Intent = createMockIntent(
mockFido2CredentialRequest = createMockFido2CredentialRequest(number = 1),
mockFido2CreateCredentialRequest = createMockFido2CredentialRequest(number = 1),
)
viewModel.trySendAction(
@@ -655,18 +655,18 @@ class MainViewModelTest : BaseViewModelTest() {
fun `on ReceiveFirstIntent with fido2 request data should switch users if active user is not selected`() {
mutableUserStateFlow.value = DEFAULT_USER_STATE
val viewModel = createViewModel()
val fido2CredentialRequest = Fido2CredentialRequest(
val fido2CreateCredentialRequest = Fido2CreateCredentialRequest(
userId = "selectedUserId",
requestJson = """{"mockRequestJson":1}""",
packageName = "com.x8bit.bitwarden",
signingInfo = SigningInfo(),
origin = "mockOrigin",
)
val mockIntent = createMockIntent(mockFido2CredentialRequest = fido2CredentialRequest)
val mockIntent = createMockIntent(mockFido2CreateCredentialRequest = fido2CreateCredentialRequest)
coEvery {
fido2CredentialManager.validateOrigin(
fido2CredentialRequest.callingAppInfo,
fido2CredentialRequest.requestJson,
fido2CreateCredentialRequest.callingAppInfo,
fido2CreateCredentialRequest.requestJson,
)
} returns Fido2ValidateOriginResult.Success
@@ -676,25 +676,25 @@ class MainViewModelTest : BaseViewModelTest() {
),
)
verify(exactly = 1) { authRepository.switchAccount(fido2CredentialRequest.userId) }
verify(exactly = 1) { authRepository.switchAccount(fido2CreateCredentialRequest.userId) }
}
@Suppress("MaxLineLength")
@Test
fun `on ReceiveFirstIntent with fido2 request data should not switch users if active user is selected`() {
val viewModel = createViewModel()
val fido2CredentialRequest = Fido2CredentialRequest(
val fido2CreateCredentialRequest = Fido2CreateCredentialRequest(
userId = DEFAULT_USER_STATE.activeUserId,
requestJson = """{"mockRequestJson":1}""",
packageName = "com.x8bit.bitwarden",
signingInfo = SigningInfo(),
origin = "mockOrigin",
)
val mockIntent = createMockIntent(mockFido2CredentialRequest = fido2CredentialRequest)
val mockIntent = createMockIntent(mockFido2CreateCredentialRequest = fido2CreateCredentialRequest)
coEvery {
fido2CredentialManager.validateOrigin(
fido2CredentialRequest.callingAppInfo,
fido2CredentialRequest.requestJson,
fido2CreateCredentialRequest.callingAppInfo,
fido2CreateCredentialRequest.requestJson,
)
} returns Fido2ValidateOriginResult.Success
@@ -704,7 +704,7 @@ class MainViewModelTest : BaseViewModelTest() {
),
)
verify(exactly = 0) { authRepository.switchAccount(fido2CredentialRequest.userId) }
verify(exactly = 0) { authRepository.switchAccount(fido2CreateCredentialRequest.userId) }
}
@Suppress("MaxLineLength")
@@ -1078,7 +1078,7 @@ private fun createMockIntent(
mockAutofillSelectionData: AutofillSelectionData? = null,
mockCompleteRegistrationData: CompleteRegistrationData? = null,
mockFido2CredentialAssertionRequest: Fido2CredentialAssertionRequest? = null,
mockFido2CredentialRequest: Fido2CredentialRequest? = null,
mockFido2CreateCredentialRequest: Fido2CreateCredentialRequest? = null,
mockFido2GetCredentialsRequest: Fido2GetCredentialsRequest? = null,
mockIsMyVaultShortcut: Boolean = false,
mockIsPasswordGeneratorShortcut: Boolean = false,
@@ -1091,7 +1091,7 @@ private fun createMockIntent(
every { getAutofillSelectionDataOrNull() } returns mockAutofillSelectionData
every { getCompleteRegistrationDataIntentOrNull() } returns mockCompleteRegistrationData
every { getFido2AssertionRequestOrNull() } returns mockFido2CredentialAssertionRequest
every { getFido2CredentialRequestOrNull() } returns mockFido2CredentialRequest
every { getFido2CredentialRequestOrNull() } returns mockFido2CreateCredentialRequest
every { getFido2GetCredentialsRequestOrNull() } returns mockFido2GetCredentialsRequest
every { isMyVaultShortcut } returns mockIsMyVaultShortcut
every { isPasswordGeneratorShortcut } returns mockIsPasswordGeneratorShortcut
@@ -14,7 +14,7 @@ import com.x8bit.bitwarden.data.autofill.fido2.datasource.network.service.Digita
import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2AttestationResponse
import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2CredentialAssertionRequest
import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2CredentialAssertionResult
import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2CredentialRequest
import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2CreateCredentialRequest
import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2PublicKeyCredential
import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2RegisterCredentialResult
import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2ValidateOriginResult
@@ -85,7 +85,7 @@ class Fido2CredentialManagerTest {
every { isOriginPopulated() } returns true
every { getOrigin(any()) } returns DEFAULT_PACKAGE_NAME
}
private val mockPrivilegedAppRequest = mockk<Fido2CredentialRequest> {
private val mockPrivilegedAppRequest = mockk<Fido2CreateCredentialRequest> {
every { callingAppInfo } returns mockPrivilegedCallingAppInfo
every { requestJson } returns "{}"
}
@@ -98,7 +98,7 @@ class Fido2CredentialManagerTest {
signingInfo = mockSigningInfo,
origin = null,
)
private val mockUnprivilegedAppRequest = mockk<Fido2CredentialRequest> {
private val mockUnprivilegedAppRequest = mockk<Fido2CreateCredentialRequest> {
every { callingAppInfo } returns mockUnprivilegedCallingAppInfo
every { requestJson } returns "{}"
}
@@ -419,7 +419,7 @@ class Fido2CredentialManagerTest {
fido2CredentialManager.registerFido2Credential(
userId = "mockUserId",
fido2CredentialRequest = mockFido2CreateCredentialRequest,
fido2CreateCredentialRequest = mockFido2CreateCredentialRequest,
selectedCipherView = mockCipherView,
)
@@ -457,7 +457,7 @@ class Fido2CredentialManagerTest {
fido2CredentialManager.registerFido2Credential(
userId = "mockUserId",
fido2CredentialRequest = mockFido2Request,
fido2CreateCredentialRequest = mockFido2Request,
selectedCipherView = createMockCipherView(1),
)
}
@@ -492,7 +492,7 @@ class Fido2CredentialManagerTest {
fido2CredentialManager.registerFido2Credential(
userId = "mockUserId",
fido2CredentialRequest = mockFido2CreateCredentialRequest,
fido2CreateCredentialRequest = mockFido2CreateCredentialRequest,
selectedCipherView = mockCipherView,
)
@@ -532,7 +532,7 @@ class Fido2CredentialManagerTest {
fido2CredentialManager.registerFido2Credential(
userId = "mockUserId",
fido2CredentialRequest = mockFido2CreateCredentialRequest,
fido2CreateCredentialRequest = mockFido2CreateCredentialRequest,
selectedCipherView = mockCipherView,
)
@@ -562,7 +562,7 @@ class Fido2CredentialManagerTest {
val result = fido2CredentialManager.registerFido2Credential(
userId = "mockUserId",
fido2CredentialRequest = mockFido2CredentialRequest,
fido2CreateCredentialRequest = mockFido2CredentialRequest,
selectedCipherView = createMockCipherView(number = 1),
)
@@ -586,7 +586,7 @@ class Fido2CredentialManagerTest {
val result = fido2CredentialManager.registerFido2Credential(
userId = "mockUserId",
fido2CredentialRequest = mockFido2CredentialRequest,
fido2CreateCredentialRequest = mockFido2CredentialRequest,
selectedCipherView = createMockCipherView(number = 1),
)
@@ -611,7 +611,7 @@ class Fido2CredentialManagerTest {
val result = fido2CredentialManager.registerFido2Credential(
userId = "mockUserId",
fido2CredentialRequest = mockFido2CredentialRequest,
fido2CreateCredentialRequest = mockFido2CredentialRequest,
selectedCipherView = createMockCipherView(number = 1),
)
@@ -654,7 +654,7 @@ class Fido2CredentialManagerTest {
val result = fido2CredentialManager.registerFido2Credential(
userId = "mockUserId",
fido2CredentialRequest = mockFido2CredentialRequest,
fido2CreateCredentialRequest = mockFido2CredentialRequest,
selectedCipherView = createMockCipherView(number = 1),
)
@@ -680,7 +680,7 @@ class Fido2CredentialManagerTest {
val result = fido2CredentialManager.registerFido2Credential(
userId = "activeUserId",
fido2CredentialRequest = mockAssertionRequest,
fido2CreateCredentialRequest = mockAssertionRequest,
selectedCipherView = mockSelectedCipher,
)
@@ -3,14 +3,14 @@ package com.x8bit.bitwarden.data.autofill.fido2.model
import android.content.pm.SigningInfo
/**
* Creates a mock [Fido2CredentialRequest] with a given [number].
* Creates a mock [Fido2CreateCredentialRequest] with a given [number].
*/
fun createMockFido2CredentialRequest(
number: Int,
origin: String? = null,
signingInfo: SigningInfo = SigningInfo(),
): Fido2CredentialRequest =
Fido2CredentialRequest(
): Fido2CreateCredentialRequest =
Fido2CreateCredentialRequest(
userId = "mockUserId-$number",
requestJson = """{"request": {"number": $number}}""",
packageName = "com.x8bit.bitwarden",
@@ -15,7 +15,7 @@ import androidx.credentials.provider.PendingIntentHandler
import androidx.credentials.provider.ProviderCreateCredentialRequest
import androidx.credentials.provider.ProviderGetCredentialRequest
import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2CredentialAssertionRequest
import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2CredentialRequest
import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2CreateCredentialRequest
import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2GetCredentialsRequest
import com.x8bit.bitwarden.data.platform.util.isBuildVersionBelow
import com.x8bit.bitwarden.ui.platform.manager.intent.EXTRA_KEY_CIPHER_ID
@@ -77,7 +77,7 @@ class Fido2IntentUtilsTest {
val createRequest = intent.getFido2CredentialRequestOrNull()
assertEquals(
Fido2CredentialRequest(
Fido2CreateCredentialRequest(
userId = "mockUserId",
requestJson = mockCallingRequest.requestJson,
packageName = mockCallingAppInfo.packageName,
@@ -1,7 +1,7 @@
package com.x8bit.bitwarden.data.platform.manager.util
import android.content.pm.SigningInfo
import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2CredentialRequest
import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2CreateCredentialRequest
import com.x8bit.bitwarden.data.autofill.fido2.model.createMockFido2CredentialAssertionRequest
import com.x8bit.bitwarden.data.autofill.fido2.model.createMockFido2GetCredentialsRequest
import com.x8bit.bitwarden.data.autofill.model.AutofillSaveItem
@@ -45,7 +45,7 @@ class SpecialCircumstanceExtensionsTest {
shouldFinishWhenComplete = true,
),
SpecialCircumstance.Fido2Save(
fido2CredentialRequest = mockk(),
fido2CreateCredentialRequest = mockk(),
),
SpecialCircumstance.Fido2Assertion(
fido2AssertionRequest = mockk(),
@@ -95,7 +95,7 @@ class SpecialCircumstanceExtensionsTest {
shouldFinishWhenComplete = true,
),
SpecialCircumstance.Fido2Save(
fido2CredentialRequest = mockk(),
fido2CreateCredentialRequest = mockk(),
),
SpecialCircumstance.Fido2Assertion(
fido2AssertionRequest = mockk(),
@@ -146,7 +146,7 @@ class SpecialCircumstanceExtensionsTest {
@Test
fun `toFido2RequestOrNull should return a non-null value for Fido2Save`() {
val fido2CredentialRequest = Fido2CredentialRequest(
val fido2CreateCredentialRequest = Fido2CreateCredentialRequest(
userId = "mockUserId",
requestJson = "mockRequestJson",
packageName = "mockPackageName",
@@ -154,10 +154,10 @@ class SpecialCircumstanceExtensionsTest {
origin = "mockOrigin",
)
assertEquals(
fido2CredentialRequest,
fido2CreateCredentialRequest,
SpecialCircumstance
.Fido2Save(
fido2CredentialRequest = fido2CredentialRequest,
fido2CreateCredentialRequest = fido2CreateCredentialRequest,
)
.toFido2RequestOrNull(),
)
@@ -198,7 +198,7 @@ class SpecialCircumstanceExtensionsTest {
shouldFinishWhenComplete = true,
),
SpecialCircumstance.Fido2Save(
fido2CredentialRequest = mockk(),
fido2CreateCredentialRequest = mockk(),
),
SpecialCircumstance.Fido2GetCredentials(
fido2GetCredentialsRequest = mockk(),
@@ -245,7 +245,7 @@ class SpecialCircumstanceExtensionsTest {
shouldFinishWhenComplete = true,
),
SpecialCircumstance.Fido2Save(
fido2CredentialRequest = mockk(),
fido2CreateCredentialRequest = mockk(),
),
SpecialCircumstance.Fido2Assertion(
fido2AssertionRequest = mockk(),
@@ -198,7 +198,7 @@ class RootNavScreenTest : BaseComposeTest() {
rootNavStateFlow.value =
RootNavState.VaultUnlockedForFido2Save(
activeUserId = "activeUserId",
fido2CredentialRequest = mockk(),
fido2CreateCredentialRequest = mockk(),
)
composeTestRule.runOnIdle {
fakeNavHostController.assertLastNavigation(
@@ -8,7 +8,7 @@ import com.x8bit.bitwarden.data.auth.repository.model.JwtTokenDataJson
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.util.parseJwtTokenDataOrNull
import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2CredentialRequest
import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2CreateCredentialRequest
import com.x8bit.bitwarden.data.autofill.fido2.model.createMockFido2CredentialAssertionRequest
import com.x8bit.bitwarden.data.autofill.fido2.model.createMockFido2GetCredentialsRequest
import com.x8bit.bitwarden.data.autofill.model.AutofillSaveItem
@@ -662,7 +662,7 @@ class RootNavViewModelTest : BaseViewModelTest() {
@Suppress("MaxLineLength")
@Test
fun `when the active user has an unlocked vault but there is a Fido2Save special circumstance the nav state should be VaultUnlockedForFido2Save`() {
val fido2CredentialRequest = Fido2CredentialRequest(
val fido2CreateCredentialRequest = Fido2CreateCredentialRequest(
userId = "activeUserId",
requestJson = "{}",
packageName = "com.x8bit.bitwarden",
@@ -670,7 +670,7 @@ class RootNavViewModelTest : BaseViewModelTest() {
origin = "mockOrigin",
)
specialCircumstanceManager.specialCircumstance =
SpecialCircumstance.Fido2Save(fido2CredentialRequest)
SpecialCircumstance.Fido2Save(fido2CreateCredentialRequest)
mutableUserStateFlow.tryEmit(
UserState(
activeUserId = "activeUserId",
@@ -703,7 +703,7 @@ class RootNavViewModelTest : BaseViewModelTest() {
assertEquals(
RootNavState.VaultUnlockedForFido2Save(
activeUserId = "activeUserId",
fido2CredentialRequest = fido2CredentialRequest,
fido2CreateCredentialRequest = fido2CreateCredentialRequest,
),
viewModel.stateFlow.value,
)
@@ -18,7 +18,7 @@ import com.x8bit.bitwarden.data.auth.repository.model.ValidatePasswordResult
import com.x8bit.bitwarden.data.auth.repository.model.ValidatePinResult
import com.x8bit.bitwarden.data.auth.repository.model.VaultUnlockType
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.Fido2CreateCredentialRequest
import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2RegisterCredentialResult
import com.x8bit.bitwarden.data.autofill.fido2.model.UserVerificationRequirement
import com.x8bit.bitwarden.data.autofill.fido2.model.createMockFido2CredentialRequest
@@ -344,7 +344,7 @@ class VaultAddEditViewModelTest : BaseViewModelTest() {
@Test
fun `initial add state should be correct when fido2 save`() = runTest {
val fido2CredentialRequest = Fido2CredentialRequest(
val fido2CreateCredentialRequest = Fido2CreateCredentialRequest(
userId = "mockUserId-1",
requestJson = "mockRequestJson-1",
packageName = "mockPackageName-1",
@@ -352,9 +352,9 @@ class VaultAddEditViewModelTest : BaseViewModelTest() {
origin = null,
)
specialCircumstanceManager.specialCircumstance = SpecialCircumstance.Fido2Save(
fido2CredentialRequest = fido2CredentialRequest,
fido2CreateCredentialRequest = fido2CreateCredentialRequest,
)
val fido2ContentState = fido2CredentialRequest.toDefaultAddTypeContent(
val fido2ContentState = fido2CreateCredentialRequest.toDefaultAddTypeContent(
attestationOptions = createMockPasskeyAttestationOptions(number = 1),
isIndividualVaultDisabled = false,
)
@@ -766,7 +766,7 @@ class VaultAddEditViewModelTest : BaseViewModelTest() {
@Test
fun `in add mode during fido2 registration, SaveClick should show saving dialog, and request user verification when required`() =
runTest {
val fido2CredentialRequest = Fido2CredentialRequest(
val fido2CreateCredentialRequest = Fido2CreateCredentialRequest(
userId = "mockUserId",
requestJson = "mockRequestJson",
packageName = "mockPackageName",
@@ -775,7 +775,7 @@ class VaultAddEditViewModelTest : BaseViewModelTest() {
)
specialCircumstanceManager.specialCircumstance =
SpecialCircumstance.Fido2Save(
fido2CredentialRequest = fido2CredentialRequest,
fido2CreateCredentialRequest = fido2CreateCredentialRequest,
)
val stateWithSavingDialog = createVaultAddItemState(
vaultAddEditType = VaultAddEditType.AddItem(VaultItemCipherType.LOGIN),
@@ -818,12 +818,12 @@ class VaultAddEditViewModelTest : BaseViewModelTest() {
fido2CredentialManager.registerFido2Credential(
userId = "mockUserId",
selectedCipherView = any(),
fido2CredentialRequest = fido2CredentialRequest,
fido2CreateCredentialRequest = fido2CreateCredentialRequest,
)
} returns mockCreateResult
every {
fido2CredentialManager.getPasskeyAttestationOptionsOrNull(
requestJson = fido2CredentialRequest.requestJson,
requestJson = fido2CreateCredentialRequest.requestJson,
)
} returns mockAttestationOptions
every { authRepository.activeUserId } returns "mockUserId"
@@ -845,7 +845,7 @@ class VaultAddEditViewModelTest : BaseViewModelTest() {
fun `in add mode during fido2, SaveClick should show saving dialog, remove it once item is saved, skip user verification when not required, and emit ExitApp`() =
runTest {
val mockUserId = "mockUserId"
val fido2CredentialRequest = Fido2CredentialRequest(
val fido2CreateCredentialRequest = Fido2CreateCredentialRequest(
userId = mockUserId,
requestJson = "mockRequestJson",
packageName = "mockPackageName",
@@ -854,7 +854,7 @@ class VaultAddEditViewModelTest : BaseViewModelTest() {
)
specialCircumstanceManager.specialCircumstance =
SpecialCircumstance.Fido2Save(
fido2CredentialRequest = fido2CredentialRequest,
fido2CreateCredentialRequest = fido2CreateCredentialRequest,
)
val stateWithSavingDialog = createVaultAddItemState(
vaultAddEditType = VaultAddEditType.AddItem(VaultItemCipherType.LOGIN),
@@ -893,12 +893,12 @@ class VaultAddEditViewModelTest : BaseViewModelTest() {
fido2CredentialManager.registerFido2Credential(
userId = mockUserId,
selectedCipherView = any(),
fido2CredentialRequest = fido2CredentialRequest,
fido2CreateCredentialRequest = fido2CreateCredentialRequest,
)
} returns mockCreateResult
every {
fido2CredentialManager.getPasskeyAttestationOptionsOrNull(
requestJson = fido2CredentialRequest.requestJson,
requestJson = fido2CreateCredentialRequest.requestJson,
)
} returns mockAttestationOptions
every { authRepository.activeUserId } returns mockUserId
@@ -921,7 +921,7 @@ class VaultAddEditViewModelTest : BaseViewModelTest() {
fido2CredentialManager.registerFido2Credential(
userId = mockUserId,
selectedCipherView = any(),
fido2CredentialRequest = fido2CredentialRequest,
fido2CreateCredentialRequest = fido2CreateCredentialRequest,
)
}
}
@@ -934,7 +934,7 @@ class VaultAddEditViewModelTest : BaseViewModelTest() {
val fido2CredentialRequest = createMockFido2CredentialRequest(number = 1)
specialCircumstanceManager.specialCircumstance =
SpecialCircumstance.Fido2Save(
fido2CredentialRequest = fido2CredentialRequest,
fido2CreateCredentialRequest = fido2CredentialRequest,
)
val stateWithName = createVaultAddItemState(
vaultAddEditType = VaultAddEditType.AddItem(VaultItemCipherType.LOGIN),
@@ -959,7 +959,7 @@ class VaultAddEditViewModelTest : BaseViewModelTest() {
coEvery {
fido2CredentialManager.registerFido2Credential(
userId = fido2CredentialRequest.userId,
fido2CredentialRequest = fido2CredentialRequest,
fido2CreateCredentialRequest = fido2CredentialRequest,
selectedCipherView = any(),
)
} returns Fido2RegisterCredentialResult.Success(registrationResponse = "mockResponse")
@@ -969,7 +969,7 @@ class VaultAddEditViewModelTest : BaseViewModelTest() {
coVerify {
fido2CredentialManager.registerFido2Credential(
userId = fido2CredentialRequest.userId,
fido2CredentialRequest = fido2CredentialRequest,
fido2CreateCredentialRequest = fido2CredentialRequest,
selectedCipherView = any(),
)
}
@@ -986,7 +986,7 @@ class VaultAddEditViewModelTest : BaseViewModelTest() {
val fido2CredentialRequest = createMockFido2CredentialRequest(number = 1)
specialCircumstanceManager.specialCircumstance =
SpecialCircumstance.Fido2Save(
fido2CredentialRequest = fido2CredentialRequest,
fido2CreateCredentialRequest = fido2CredentialRequest,
)
val stateWithName = createVaultAddItemState(
vaultAddEditType = VaultAddEditType.AddItem(VaultItemCipherType.LOGIN),
@@ -1030,7 +1030,7 @@ class VaultAddEditViewModelTest : BaseViewModelTest() {
val fido2CredentialRequest = createMockFido2CredentialRequest(number = 1)
specialCircumstanceManager.specialCircumstance =
SpecialCircumstance.Fido2Save(
fido2CredentialRequest = fido2CredentialRequest,
fido2CreateCredentialRequest = fido2CredentialRequest,
)
val stateWithName = createVaultAddItemState(
vaultAddEditType = VaultAddEditType.AddItem(VaultItemCipherType.LOGIN),
@@ -1075,7 +1075,7 @@ class VaultAddEditViewModelTest : BaseViewModelTest() {
val fido2CredentialRequest = createMockFido2CredentialRequest(number = 1)
specialCircumstanceManager.specialCircumstance =
SpecialCircumstance.Fido2Save(
fido2CredentialRequest = fido2CredentialRequest,
fido2CreateCredentialRequest = fido2CredentialRequest,
)
val stateWithName = createVaultAddItemState(
vaultAddEditType = VaultAddEditType.AddItem(VaultItemCipherType.LOGIN),
@@ -1801,7 +1801,7 @@ class VaultAddEditViewModelTest : BaseViewModelTest() {
val mockFido2CredentialRequest = createMockFido2CredentialRequest(number = 1)
specialCircumstanceManager.specialCircumstance = SpecialCircumstance.Fido2Save(
fido2CredentialRequest = mockFido2CredentialRequest,
fido2CreateCredentialRequest = mockFido2CredentialRequest,
)
every {
cipherView.toViewState(
@@ -1851,12 +1851,12 @@ class VaultAddEditViewModelTest : BaseViewModelTest() {
)
val mockFidoRequest = createMockFido2CredentialRequest(number = 1)
specialCircumstanceManager.specialCircumstance = SpecialCircumstance.Fido2Save(
fido2CredentialRequest = mockFidoRequest,
fido2CreateCredentialRequest = mockFidoRequest,
)
coEvery {
fido2CredentialManager.registerFido2Credential(
userId = mockFidoRequest.userId,
fido2CredentialRequest = mockFidoRequest,
fido2CreateCredentialRequest = mockFidoRequest,
selectedCipherView = any(),
)
} returns Fido2RegisterCredentialResult.Success("mockResponse")
@@ -1890,7 +1890,7 @@ class VaultAddEditViewModelTest : BaseViewModelTest() {
fido2CredentialManager.isUserVerified
fido2CredentialManager.registerFido2Credential(
userId = mockFidoRequest.userId,
fido2CredentialRequest = mockFidoRequest,
fido2CreateCredentialRequest = mockFidoRequest,
selectedCipherView = any(),
)
}
@@ -1922,7 +1922,7 @@ class VaultAddEditViewModelTest : BaseViewModelTest() {
)
val mockFidoRequest = createMockFido2CredentialRequest(number = 1)
specialCircumstanceManager.specialCircumstance = SpecialCircumstance.Fido2Save(
fido2CredentialRequest = mockFidoRequest,
fido2CreateCredentialRequest = mockFidoRequest,
)
every {
cipherView.toViewState(
@@ -4084,7 +4084,7 @@ class VaultAddEditViewModelTest : BaseViewModelTest() {
registrationResponse = "mockResponse",
)
specialCircumstanceManager.specialCircumstance = SpecialCircumstance.Fido2Save(
fido2CredentialRequest = mockRequest,
fido2CreateCredentialRequest = mockRequest,
)
every { authRepository.activeUserId } returns "activeUserId"
coEvery {
@@ -4102,7 +4102,7 @@ class VaultAddEditViewModelTest : BaseViewModelTest() {
fido2CredentialManager.isUserVerified = true
fido2CredentialManager.registerFido2Credential(
userId = any(),
fido2CredentialRequest = mockRequest,
fido2CreateCredentialRequest = mockRequest,
selectedCipherView = any(),
)
}
@@ -4126,7 +4126,7 @@ class VaultAddEditViewModelTest : BaseViewModelTest() {
val mockRequest = createMockFido2CredentialRequest(number = 1)
val mockResult = Fido2RegisterCredentialResult.Error
specialCircumstanceManager.specialCircumstance = SpecialCircumstance.Fido2Save(
fido2CredentialRequest = mockRequest,
fido2CreateCredentialRequest = mockRequest,
)
every { authRepository.activeUserId } returns "activeUserId"
coEvery {
@@ -4165,7 +4165,7 @@ class VaultAddEditViewModelTest : BaseViewModelTest() {
registrationResponse = "mockResponse",
)
specialCircumstanceManager.specialCircumstance = SpecialCircumstance.Fido2Save(
fido2CredentialRequest = mockRequest,
fido2CreateCredentialRequest = mockRequest,
)
every { authRepository.activeUserId } returns "activeUserId"
coEvery {
@@ -4202,7 +4202,7 @@ class VaultAddEditViewModelTest : BaseViewModelTest() {
val mockRequest = createMockFido2CredentialRequest(number = 1)
val mockResult = Fido2RegisterCredentialResult.Cancelled
specialCircumstanceManager.specialCircumstance = SpecialCircumstance.Fido2Save(
fido2CredentialRequest = mockRequest,
fido2CreateCredentialRequest = mockRequest,
)
every { authRepository.activeUserId } returns "activeUserId"
coEvery {
@@ -1,7 +1,7 @@
package com.x8bit.bitwarden.ui.vault.feature.addedit.util
import android.content.pm.SigningInfo
import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2CredentialRequest
import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2CreateCredentialRequest
import com.x8bit.bitwarden.ui.vault.feature.addedit.VaultAddEditState
import com.x8bit.bitwarden.ui.vault.feature.addedit.model.UriItem
import io.mockk.every
@@ -47,7 +47,7 @@ class Fido2CredentialRequestExtensionsTest {
),
),
),
Fido2CredentialRequest(
Fido2CreateCredentialRequest(
userId = "mockUserId-1",
requestJson = "mockRequestJson-1",
packageName = "mockPackageName-1",
@@ -83,7 +83,7 @@ class Fido2CredentialRequestExtensionsTest {
),
),
),
Fido2CredentialRequest(
Fido2CreateCredentialRequest(
userId = "mockUserId-1",
requestJson = "mockRequestJson-1",
packageName = "mockPackageName-1",
@@ -19,7 +19,7 @@ import com.x8bit.bitwarden.data.autofill.accessibility.manager.AccessibilitySele
import com.x8bit.bitwarden.data.autofill.accessibility.manager.AccessibilitySelectionManagerImpl
import com.x8bit.bitwarden.data.autofill.fido2.manager.Fido2CredentialManager
import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2CredentialAssertionResult
import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2CredentialRequest
import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2CreateCredentialRequest
import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2GetCredentialsRequest
import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2RegisterCredentialResult
import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2ValidateOriginResult
@@ -195,7 +195,7 @@ class VaultItemListingViewModelTest : BaseViewModelTest() {
@Test
fun `initial dialog state should be correct when fido2Request is present`() = runTest {
val fido2CredentialRequest = Fido2CredentialRequest(
val fido2CreateCredentialRequest = Fido2CreateCredentialRequest(
"mockUserId",
"{}",
"com.x8bit.bitwarden",
@@ -203,7 +203,7 @@ class VaultItemListingViewModelTest : BaseViewModelTest() {
origin = null,
)
specialCircumstanceManager.specialCircumstance = SpecialCircumstance.Fido2Save(
fido2CredentialRequest = fido2CredentialRequest,
fido2CreateCredentialRequest = fido2CreateCredentialRequest,
)
val viewModel = createVaultItemListingViewModel()
@@ -211,7 +211,7 @@ class VaultItemListingViewModelTest : BaseViewModelTest() {
viewModel.stateFlow.test {
assertEquals(
initialState.copy(
fido2CredentialRequest = fido2CredentialRequest,
fido2CreateCredentialRequest = fido2CreateCredentialRequest,
dialogState = VaultItemListingState.DialogState.Loading(
message = R.string.loading.asText(),
),
@@ -449,7 +449,7 @@ class VaultItemListingViewModelTest : BaseViewModelTest() {
fun `ItemClick for vault item during FIDO 2 registration should show FIDO 2 error dialog when cipherView is null`() {
val cipherView = createMockCipherView(number = 1)
specialCircumstanceManager.specialCircumstance = SpecialCircumstance.Fido2Save(
fido2CredentialRequest = createMockFido2CredentialRequest(number = 1),
fido2CreateCredentialRequest = createMockFido2CredentialRequest(number = 1),
)
mutableVaultDataStateFlow.value = DataState.Loaded(
data = VaultData(
@@ -478,7 +478,7 @@ class VaultItemListingViewModelTest : BaseViewModelTest() {
setupMockUri()
val cipherView = createMockCipherView(number = 1)
specialCircumstanceManager.specialCircumstance = SpecialCircumstance.Fido2Save(
fido2CredentialRequest = createMockFido2CredentialRequest(number = 1),
fido2CreateCredentialRequest = createMockFido2CredentialRequest(number = 1),
)
mutableVaultDataStateFlow.value = DataState.Loaded(
data = VaultData(
@@ -513,7 +513,7 @@ class VaultItemListingViewModelTest : BaseViewModelTest() {
fido2Credentials = createMockSdkFido2CredentialList(number = 1),
)
specialCircumstanceManager.specialCircumstance = SpecialCircumstance.Fido2Save(
fido2CredentialRequest = createMockFido2CredentialRequest(number = 1),
fido2CreateCredentialRequest = createMockFido2CredentialRequest(number = 1),
)
mutableVaultDataStateFlow.value = DataState.Loaded(
data = VaultData(
@@ -556,7 +556,7 @@ class VaultItemListingViewModelTest : BaseViewModelTest() {
setupMockUri()
val cipherView = createMockCipherView(number = 1, fido2Credentials = null)
specialCircumstanceManager.specialCircumstance = SpecialCircumstance.Fido2Save(
fido2CredentialRequest = createMockFido2CredentialRequest(number = 1),
fido2CreateCredentialRequest = createMockFido2CredentialRequest(number = 1),
)
mutableVaultDataStateFlow.value = DataState.Loaded(
data = VaultData(
@@ -606,7 +606,7 @@ class VaultItemListingViewModelTest : BaseViewModelTest() {
val cipherView = createMockCipherView(number = 1)
val mockFido2CredentialRequest = createMockFido2CredentialRequest(number = 1)
specialCircumstanceManager.specialCircumstance = SpecialCircumstance.Fido2Save(
fido2CredentialRequest = mockFido2CredentialRequest,
fido2CreateCredentialRequest = mockFido2CredentialRequest,
)
mutableVaultDataStateFlow.value = DataState.Loaded(
data = VaultData(
@@ -636,7 +636,7 @@ class VaultItemListingViewModelTest : BaseViewModelTest() {
coVerify {
fido2CredentialManager.registerFido2Credential(
userId = DEFAULT_USER_STATE.activeUserId,
fido2CredentialRequest = mockFido2CredentialRequest,
fido2CreateCredentialRequest = mockFido2CredentialRequest,
selectedCipherView = cipherView,
)
}
@@ -649,7 +649,7 @@ class VaultItemListingViewModelTest : BaseViewModelTest() {
val cipherView = createMockCipherView(number = 1)
val mockFido2CredentialRequest = createMockFido2CredentialRequest(number = 1)
specialCircumstanceManager.specialCircumstance = SpecialCircumstance.Fido2Save(
fido2CredentialRequest = mockFido2CredentialRequest,
fido2CreateCredentialRequest = mockFido2CredentialRequest,
)
mutableVaultDataStateFlow.value = DataState.Loaded(
data = VaultData(
@@ -681,7 +681,7 @@ class VaultItemListingViewModelTest : BaseViewModelTest() {
coVerify(exactly = 1) {
fido2CredentialManager.registerFido2Credential(
userId = DEFAULT_USER_STATE.activeUserId,
fido2CredentialRequest = mockFido2CredentialRequest,
fido2CreateCredentialRequest = mockFido2CredentialRequest,
selectedCipherView = cipherView,
)
}
@@ -1567,7 +1567,7 @@ class VaultItemListingViewModelTest : BaseViewModelTest() {
mockFilteredCiphers = listOf(cipherView1)
val fido2CredentialRequest = Fido2CredentialRequest(
val fido2CreateCredentialRequest = Fido2CreateCredentialRequest(
userId = "activeUserId",
requestJson = "{}",
packageName = "com.x8bit.bitwarden",
@@ -1577,7 +1577,7 @@ class VaultItemListingViewModelTest : BaseViewModelTest() {
specialCircumstanceManager.specialCircumstance =
SpecialCircumstance.Fido2Save(
fido2CredentialRequest = fido2CredentialRequest,
fido2CreateCredentialRequest = fido2CreateCredentialRequest,
)
val dataState = DataState.Loaded(
data = VaultData(
@@ -1611,7 +1611,7 @@ class VaultItemListingViewModelTest : BaseViewModelTest() {
displayFolderList = emptyList(),
),
)
.copy(fido2CredentialRequest = fido2CredentialRequest),
.copy(fido2CreateCredentialRequest = fido2CreateCredentialRequest),
viewModel.stateFlow.value,
)
coVerify {
@@ -2149,7 +2149,7 @@ class VaultItemListingViewModelTest : BaseViewModelTest() {
@Test
fun `Fido2Request should be evaluated before observing vault data`() {
val fido2CredentialRequest = Fido2CredentialRequest(
val fido2CreateCredentialRequest = Fido2CreateCredentialRequest(
"mockUserId",
"{}",
"com.x8bit.bitwarden",
@@ -2157,7 +2157,7 @@ class VaultItemListingViewModelTest : BaseViewModelTest() {
origin = "com.x8bit.bitwarden",
)
specialCircumstanceManager.specialCircumstance = SpecialCircumstance.Fido2Save(
fido2CredentialRequest,
fido2CreateCredentialRequest,
)
createVaultItemListingViewModel()
@@ -2171,13 +2171,13 @@ class VaultItemListingViewModelTest : BaseViewModelTest() {
@Test
fun `Fido2ValidateOriginResult should update dialog state on Unknown error`() = runTest {
val mockCallingAppInfo = mockk<CallingAppInfo>(relaxed = true)
val mock = mockk<Fido2CredentialRequest> {
val mock = mockk<Fido2CreateCredentialRequest> {
every { callingAppInfo } returns mockCallingAppInfo
every { requestJson } returns "{}"
}
specialCircumstanceManager.specialCircumstance = SpecialCircumstance.Fido2Save(
fido2CredentialRequest = mock,
fido2CreateCredentialRequest = mock,
)
coEvery {
@@ -2199,7 +2199,7 @@ class VaultItemListingViewModelTest : BaseViewModelTest() {
@Test
fun `Fido2ValidateOriginResult should update dialog state on PrivilegedAppNotAllowed error`() =
runTest {
val fido2CredentialRequest = Fido2CredentialRequest(
val fido2CreateCredentialRequest = Fido2CreateCredentialRequest(
userId = "mockUserId",
requestJson = "{}",
packageName = "com.x8bit.bitwarden",
@@ -2208,7 +2208,7 @@ class VaultItemListingViewModelTest : BaseViewModelTest() {
)
specialCircumstanceManager.specialCircumstance = SpecialCircumstance.Fido2Save(
fido2CredentialRequest = fido2CredentialRequest,
fido2CreateCredentialRequest = fido2CreateCredentialRequest,
)
coEvery {
@@ -2230,7 +2230,7 @@ class VaultItemListingViewModelTest : BaseViewModelTest() {
@Test
fun `Fido2ValidateOriginResult should update dialog state on PrivilegedAppSignatureNotFound error`() =
runTest {
val fido2CredentialRequest = Fido2CredentialRequest(
val fido2CreateCredentialRequest = Fido2CreateCredentialRequest(
userId = "mockUserId",
requestJson = "{}",
packageName = "com.x8bit.bitwarden",
@@ -2239,7 +2239,7 @@ class VaultItemListingViewModelTest : BaseViewModelTest() {
)
specialCircumstanceManager.specialCircumstance = SpecialCircumstance.Fido2Save(
fido2CredentialRequest = fido2CredentialRequest,
fido2CreateCredentialRequest = fido2CreateCredentialRequest,
)
coEvery {
@@ -2261,7 +2261,7 @@ class VaultItemListingViewModelTest : BaseViewModelTest() {
@Test
fun `Fido2ValidateOriginResult should update dialog state on PasskeyNotSupportedForApp error`() =
runTest {
val fido2CredentialRequest = Fido2CredentialRequest(
val fido2CreateCredentialRequest = Fido2CreateCredentialRequest(
userId = "mockUserId",
requestJson = "{}",
packageName = "com.x8bit.bitwarden",
@@ -2270,7 +2270,7 @@ class VaultItemListingViewModelTest : BaseViewModelTest() {
)
specialCircumstanceManager.specialCircumstance = SpecialCircumstance.Fido2Save(
fido2CredentialRequest = fido2CredentialRequest,
fido2CreateCredentialRequest = fido2CreateCredentialRequest,
)
coEvery {
@@ -2292,7 +2292,7 @@ class VaultItemListingViewModelTest : BaseViewModelTest() {
@Test
fun `Fido2ValidateOriginResult should update dialog state on ApplicationNotFound error`() =
runTest {
val fido2CredentialRequest = Fido2CredentialRequest(
val fido2CreateCredentialRequest = Fido2CreateCredentialRequest(
userId = "mockUserId",
requestJson = "{}",
packageName = "com.x8bit.bitwarden",
@@ -2301,7 +2301,7 @@ class VaultItemListingViewModelTest : BaseViewModelTest() {
)
specialCircumstanceManager.specialCircumstance = SpecialCircumstance.Fido2Save(
fido2CredentialRequest = fido2CredentialRequest,
fido2CreateCredentialRequest = fido2CreateCredentialRequest,
)
coEvery {
@@ -2323,7 +2323,7 @@ class VaultItemListingViewModelTest : BaseViewModelTest() {
@Test
fun `Fido2ValidateOriginResult should update dialog state on AssetLinkNotFound error`() =
runTest {
val fido2CredentialRequest = Fido2CredentialRequest(
val fido2CreateCredentialRequest = Fido2CreateCredentialRequest(
userId = "mockUserId",
requestJson = "{}",
packageName = "com.x8bit.bitwarden",
@@ -2332,7 +2332,7 @@ class VaultItemListingViewModelTest : BaseViewModelTest() {
)
specialCircumstanceManager.specialCircumstance = SpecialCircumstance.Fido2Save(
fido2CredentialRequest = fido2CredentialRequest,
fido2CreateCredentialRequest = fido2CreateCredentialRequest,
)
coEvery {
@@ -2354,7 +2354,7 @@ class VaultItemListingViewModelTest : BaseViewModelTest() {
@Test
fun `Fido2ValidateOriginResult should update dialog state on ApplicationNotVerified error`() =
runTest {
val fido2CredentialRequest = Fido2CredentialRequest(
val fido2CreateCredentialRequest = Fido2CreateCredentialRequest(
userId = "mockUserId",
requestJson = "{}",
packageName = "com.x8bit.bitwarden",
@@ -2363,7 +2363,7 @@ class VaultItemListingViewModelTest : BaseViewModelTest() {
)
specialCircumstanceManager.specialCircumstance = SpecialCircumstance.Fido2Save(
fido2CredentialRequest = fido2CredentialRequest,
fido2CreateCredentialRequest = fido2CreateCredentialRequest,
)
coEvery {
@@ -3275,7 +3275,7 @@ class VaultItemListingViewModelTest : BaseViewModelTest() {
runTest {
val mockRequest = createMockFido2CredentialRequest(number = 1)
specialCircumstanceManager.specialCircumstance = SpecialCircumstance.Fido2Save(
fido2CredentialRequest = mockRequest,
fido2CreateCredentialRequest = mockRequest,
)
coEvery {
fido2CredentialManager.registerFido2Credential(
@@ -3298,7 +3298,7 @@ class VaultItemListingViewModelTest : BaseViewModelTest() {
fido2CredentialManager.isUserVerified = true
fido2CredentialManager.registerFido2Credential(
userId = DEFAULT_ACCOUNT.userId,
fido2CredentialRequest = mockRequest,
fido2CreateCredentialRequest = mockRequest,
selectedCipherView = any(),
)
}
@@ -3933,7 +3933,7 @@ class VaultItemListingViewModelTest : BaseViewModelTest() {
setupMockUri()
val cipherView = createMockCipherView(number = 1)
specialCircumstanceManager.specialCircumstance = SpecialCircumstance.Fido2Save(
fido2CredentialRequest = createMockFido2CredentialRequest(number = 1),
fido2CreateCredentialRequest = createMockFido2CredentialRequest(number = 1),
)
mutableVaultDataStateFlow.value = DataState.Loaded(
data = VaultData(
@@ -3967,7 +3967,7 @@ class VaultItemListingViewModelTest : BaseViewModelTest() {
setupMockUri()
val cipherView = createMockCipherView(number = 1)
specialCircumstanceManager.specialCircumstance = SpecialCircumstance.Fido2Save(
fido2CredentialRequest = createMockFido2CredentialRequest(number = 1),
fido2CreateCredentialRequest = createMockFido2CredentialRequest(number = 1),
)
mutableVaultDataStateFlow.value = DataState.Loaded(
data = VaultData(
@@ -4076,7 +4076,7 @@ class VaultItemListingViewModelTest : BaseViewModelTest() {
autofillSelectionData = null,
policyDisablesSend = false,
hasMasterPassword = true,
fido2CredentialRequest = null,
fido2CreateCredentialRequest = null,
isPremium = true,
isRefreshing = false,
)
@@ -8,7 +8,7 @@ import com.bitwarden.vault.CipherType
import com.bitwarden.vault.CipherView
import com.bitwarden.vault.FolderView
import com.x8bit.bitwarden.R
import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2CredentialRequest
import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2CreateCredentialRequest
import com.x8bit.bitwarden.data.autofill.model.AutofillSelectionData
import com.x8bit.bitwarden.data.platform.repository.model.Environment
import com.x8bit.bitwarden.data.platform.repository.util.baseIconUrl
@@ -792,7 +792,7 @@ class VaultItemListingDataExtensionsTest {
baseIconUrl = Environment.Us.environmentUrlData.baseIconUrl,
isIconLoadingDisabled = false,
autofillSelectionData = null,
fido2CreationData = Fido2CredentialRequest(
fido2CreationData = Fido2CreateCredentialRequest(
userId = "",
requestJson = "",
packageName = "",