mirror of
https://github.com/bitwarden/android.git
synced 2025-12-11 04:39:19 -06:00
🍒 [PM-24205] Fix Fido2CredentialStore to save new credentials correctly (#5604)
This commit is contained in:
parent
df2acadea0
commit
3d220cf765
@ -2,6 +2,7 @@ package com.x8bit.bitwarden.data.vault.datasource.sdk.di
|
||||
|
||||
import com.bitwarden.data.manager.DispatcherManager
|
||||
import com.bitwarden.sdk.Fido2CredentialStore
|
||||
import com.x8bit.bitwarden.data.auth.repository.AuthRepository
|
||||
import com.x8bit.bitwarden.data.platform.manager.FeatureFlagManager
|
||||
import com.x8bit.bitwarden.data.platform.manager.SdkClientManager
|
||||
import com.x8bit.bitwarden.data.platform.manager.sdk.SdkRepositoryFactory
|
||||
@ -50,8 +51,12 @@ object VaultSdkModule {
|
||||
@Provides
|
||||
@Singleton
|
||||
fun providesFido2CredentialStore(
|
||||
authRepository: AuthRepository,
|
||||
vaultSdkSource: VaultSdkSource,
|
||||
vaultRepository: VaultRepository,
|
||||
): Fido2CredentialStore = Fido2CredentialStoreImpl(
|
||||
authRepository = authRepository,
|
||||
vaultSdkSource = vaultSdkSource,
|
||||
vaultRepository = vaultRepository,
|
||||
)
|
||||
}
|
||||
|
||||
@ -5,8 +5,11 @@ import com.bitwarden.sdk.Fido2CredentialStore
|
||||
import com.bitwarden.vault.CipherListView
|
||||
import com.bitwarden.vault.CipherView
|
||||
import com.bitwarden.vault.EncryptionContext
|
||||
import com.x8bit.bitwarden.data.auth.repository.AuthRepository
|
||||
import com.x8bit.bitwarden.data.autofill.util.isActiveWithFido2Credentials
|
||||
import com.x8bit.bitwarden.data.autofill.util.login
|
||||
import com.x8bit.bitwarden.data.platform.error.NoActiveUserException
|
||||
import com.x8bit.bitwarden.data.vault.datasource.sdk.VaultSdkSource
|
||||
import com.x8bit.bitwarden.data.vault.manager.model.GetCipherResult
|
||||
import com.x8bit.bitwarden.data.vault.repository.VaultRepository
|
||||
import com.x8bit.bitwarden.data.vault.repository.model.SyncVaultDataResult
|
||||
@ -17,6 +20,8 @@ import timber.log.Timber
|
||||
*/
|
||||
@OmitFromCoverage
|
||||
class Fido2CredentialStoreImpl(
|
||||
private val authRepository: AuthRepository,
|
||||
private val vaultSdkSource: VaultSdkSource,
|
||||
private val vaultRepository: VaultRepository,
|
||||
) : Fido2CredentialStore {
|
||||
|
||||
@ -79,18 +84,17 @@ class Fido2CredentialStoreImpl(
|
||||
* Save the provided [cred] to the users vault.
|
||||
*/
|
||||
override suspend fun saveCredential(cred: EncryptionContext) {
|
||||
vaultRepository.getCipher(cred.cipher.id.orEmpty())
|
||||
.toCipherViewOrNull()
|
||||
?.let { cipherView ->
|
||||
cipherView.id
|
||||
?.let { cipherId ->
|
||||
vaultRepository.updateCipher(
|
||||
cipherId = cipherId,
|
||||
cipherView = cipherView,
|
||||
)
|
||||
}
|
||||
?: vaultRepository.createCipher(cipherView = cipherView)
|
||||
vaultSdkSource
|
||||
.decryptCipher(
|
||||
userId = authRepository.activeUserId ?: throw NoActiveUserException(),
|
||||
cipher = cred.cipher,
|
||||
)
|
||||
.map { decryptedCipherView ->
|
||||
decryptedCipherView.id
|
||||
?.let { vaultRepository.updateCipher(it, decryptedCipherView) }
|
||||
?: vaultRepository.createCipher(decryptedCipherView)
|
||||
}
|
||||
.onFailure { throw it }
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user