Set Settings defaults on login and clear them on logout (#537)

This commit is contained in:
Brian Yencho
2024-01-08 13:31:46 -06:00
committed by Álison Fernandes
parent e863559c12
commit acb5fce448
6 changed files with 118 additions and 1 deletions

View File

@@ -33,6 +33,7 @@ import com.x8bit.bitwarden.data.auth.util.KdfParamsConstants.DEFAULT_PBKDF2_ITER
import com.x8bit.bitwarden.data.auth.util.toSdkParams
import com.x8bit.bitwarden.data.platform.manager.dispatcher.DispatcherManager
import com.x8bit.bitwarden.data.platform.repository.EnvironmentRepository
import com.x8bit.bitwarden.data.platform.repository.SettingsRepository
import com.x8bit.bitwarden.data.platform.repository.util.bufferedMutableSharedFlow
import com.x8bit.bitwarden.data.platform.util.asFailure
import com.x8bit.bitwarden.data.platform.util.flatMap
@@ -62,6 +63,7 @@ class AuthRepositoryImpl constructor(
private val authSdkSource: AuthSdkSource,
private val authDiskSource: AuthDiskSource,
private val environmentRepository: EnvironmentRepository,
private val settingsRepository: SettingsRepository,
private val vaultRepository: VaultRepository,
dispatcherManager: DispatcherManager,
) : AuthRepository {
@@ -210,6 +212,9 @@ class AuthRepositoryImpl constructor(
userId = userStateJson.activeUserId,
privateKey = loginResponse.privateKey,
)
settingsRepository.setDefaultsIfNecessary(
userId = userStateJson.activeUserId,
)
vaultRepository.sync()
specialCircumstance = null
LoginResult.Success
@@ -275,6 +280,9 @@ class AuthRepositoryImpl constructor(
authDiskSource.userState = null
}
// Clear settings
settingsRepository.clearData(userId)
// Delete all the vault data
vaultRepository.deleteVaultData(userId)

View File

@@ -9,6 +9,7 @@ import com.x8bit.bitwarden.data.auth.repository.AuthRepository
import com.x8bit.bitwarden.data.auth.repository.AuthRepositoryImpl
import com.x8bit.bitwarden.data.platform.manager.dispatcher.DispatcherManager
import com.x8bit.bitwarden.data.platform.repository.EnvironmentRepository
import com.x8bit.bitwarden.data.platform.repository.SettingsRepository
import com.x8bit.bitwarden.data.vault.repository.VaultRepository
import dagger.Module
import dagger.Provides
@@ -33,6 +34,7 @@ object AuthRepositoryModule {
authDiskSource: AuthDiskSource,
dispatchers: DispatcherManager,
environmentRepository: EnvironmentRepository,
settingsRepository: SettingsRepository,
vaultRepository: VaultRepository,
): AuthRepository = AuthRepositoryImpl(
accountsService = accountsService,
@@ -42,6 +44,7 @@ object AuthRepositoryModule {
haveIBeenPwnedService = haveIBeenPwnedService,
dispatcherManager = dispatchers,
environmentRepository = environmentRepository,
settingsRepository = settingsRepository,
vaultRepository = vaultRepository,
)
}

View File

@@ -18,6 +18,17 @@ interface SettingsRepository {
*/
var vaultTimeoutAction: VaultTimeoutAction
/**
* Clears all the settings data for the given user.
*/
fun clearData(userId: String)
/**
* Sets default values for various settings for the given [userId] if necessary. This is
* typically used when logging into a new account.
*/
fun setDefaultsIfNecessary(userId: String)
/**
* Gets updates for the [VaultTimeout] associated with the given [userId].
*/

View File

@@ -51,6 +51,27 @@ class SettingsRepositoryImpl(
)
}
override fun clearData(userId: String) {
settingsDiskSource.apply {
storeVaultTimeoutInMinutes(
userId = userId,
vaultTimeoutInMinutes = null,
)
storeVaultTimeoutAction(
userId = userId,
vaultTimeoutAction = null,
)
}
}
override fun setDefaultsIfNecessary(userId: String) {
// Set Vault Settings defaults
if (!isVaultTimeoutActionSet(userId = userId)) {
storeVaultTimeout(userId, VaultTimeout.ThirtyMinutes)
storeVaultTimeoutAction(userId, VaultTimeoutAction.LOCK)
}
}
override fun getVaultTimeoutStateFlow(userId: String): StateFlow<VaultTimeout> =
settingsDiskSource
.getVaultTimeoutInMinutesFlow(userId = userId)