mirror of
https://github.com/bitwarden/android.git
synced 2024-10-31 07:05:35 +03:00
initial scaffolding
This commit is contained in:
parent
36a718753d
commit
c7d7ed6cb9
5 changed files with 42 additions and 1 deletions
|
@ -1,5 +1,6 @@
|
|||
package com.x8bit.bitwarden.data.vault.datasource.disk
|
||||
|
||||
import com.bitwarden.vault.CipherView
|
||||
import com.x8bit.bitwarden.data.vault.datasource.network.model.SyncResponseJson
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
|
||||
|
@ -9,6 +10,11 @@ import kotlinx.coroutines.flow.Flow
|
|||
@Suppress("TooManyFunctions")
|
||||
interface VaultDiskSource {
|
||||
|
||||
/**
|
||||
* Saves a cipher to the offline data source for the given [userId].
|
||||
*/
|
||||
suspend fun saveOfflineCipher(userId: String, cipher: CipherView)
|
||||
|
||||
/**
|
||||
* Saves a cipher to the data source for the given [userId].
|
||||
*/
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
package com.x8bit.bitwarden.data.vault.datasource.disk
|
||||
|
||||
import com.bitwarden.vault.CipherView
|
||||
import com.x8bit.bitwarden.data.platform.manager.dispatcher.DispatcherManager
|
||||
import com.x8bit.bitwarden.data.platform.repository.util.bufferedMutableSharedFlow
|
||||
import com.x8bit.bitwarden.data.vault.datasource.disk.dao.CiphersDao
|
||||
|
@ -30,6 +31,7 @@ import kotlinx.serialization.json.Json
|
|||
*/
|
||||
@Suppress("TooManyFunctions", "LongParameterList")
|
||||
class VaultDiskSourceImpl(
|
||||
private val offlineCiphersDao: CiphersDao,
|
||||
private val ciphersDao: CiphersDao,
|
||||
private val collectionsDao: CollectionsDao,
|
||||
private val domainsDao: DomainsDao,
|
||||
|
@ -45,6 +47,11 @@ class VaultDiskSourceImpl(
|
|||
private val forceFolderFlow = bufferedMutableSharedFlow<List<SyncResponseJson.Folder>>()
|
||||
private val forceSendFlow = bufferedMutableSharedFlow<List<SyncResponseJson.Send>>()
|
||||
|
||||
override suspend fun saveOfflineCipher(userId: String, cipher: CipherView) {
|
||||
TODO("Not yet implemented")
|
||||
|
||||
}
|
||||
|
||||
override suspend fun saveCipher(userId: String, cipher: SyncResponseJson.Cipher) {
|
||||
ciphersDao.insertCiphers(
|
||||
ciphers = listOf(
|
||||
|
|
|
@ -16,6 +16,13 @@ import com.x8bit.bitwarden.data.vault.repository.model.UpdateCipherResult
|
|||
*/
|
||||
@Suppress("TooManyFunctions")
|
||||
interface CipherManager {
|
||||
/**
|
||||
* Attempt to create a cipher in the offline repository
|
||||
*/
|
||||
suspend fun createOfflineCipher(
|
||||
cipherView: CipherView
|
||||
): CreateCipherResult
|
||||
|
||||
/**
|
||||
* Attempt to create a cipher.
|
||||
*/
|
||||
|
|
|
@ -46,6 +46,20 @@ class CipherManagerImpl(
|
|||
) : CipherManager {
|
||||
private val activeUserId: String? get() = authDiskSource.userState?.activeUserId
|
||||
|
||||
override suspend fun createOfflineCipher(cipherView: CipherView): CreateCipherResult {
|
||||
val userId = activeUserId ?: return CreateCipherResult.Error
|
||||
|
||||
return vaultSdkSource.encryptCipher(
|
||||
userId = userId,
|
||||
cipherView = cipherView
|
||||
)
|
||||
.flatMap { vaultDiskSource.saveOfflineCipher(userId = userId, cipher = it) }
|
||||
.fold(
|
||||
onFailure = { CreateCipherResult.Error },
|
||||
onSuccess = { CreateCipherResult.Success }
|
||||
)
|
||||
}
|
||||
|
||||
override suspend fun createCipher(cipherView: CipherView): CreateCipherResult {
|
||||
val userId = activeUserId ?: return CreateCipherResult.Error
|
||||
return vaultSdkSource
|
||||
|
|
|
@ -1858,7 +1858,7 @@ class VaultAddEditViewModel @Inject constructor(
|
|||
|
||||
@Suppress("MaxLineLength")
|
||||
private suspend fun VaultAddEditState.ViewState.Content.createCipherForAddAndCloneItemStates(): CreateCipherResult {
|
||||
return common.selectedOwner?.collections
|
||||
val result = common.selectedOwner?.collections
|
||||
?.filter { it.isSelected }
|
||||
?.map { it.id }
|
||||
?.let {
|
||||
|
@ -1868,6 +1868,13 @@ class VaultAddEditViewModel @Inject constructor(
|
|||
)
|
||||
}
|
||||
?: vaultRepository.createCipher(cipherView = toCipherView())
|
||||
|
||||
if (result is CreateCipherResult.Error) {
|
||||
// TODO: Ask for permission to store locally
|
||||
vaultRepository.createOfflineCipher(cipherView = toCipherView())
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private fun List<VaultAddEditState.Owner>.toUpdatedOwners(
|
||||
|
|
Loading…
Reference in a new issue