mirror of
https://github.com/bitwarden/android.git
synced 2025-12-11 04:39:19 -06:00
🍒 [PM-27806] Reverted changes to order of StorePolicies after sync (#6132)
This commit is contained in:
parent
bc74337eae
commit
317fd376a7
@ -14,6 +14,7 @@ import com.bitwarden.vault.DecryptCipherListResult
|
|||||||
import com.bitwarden.vault.FolderView
|
import com.bitwarden.vault.FolderView
|
||||||
import com.x8bit.bitwarden.data.auth.datasource.disk.AuthDiskSource
|
import com.x8bit.bitwarden.data.auth.datasource.disk.AuthDiskSource
|
||||||
import com.x8bit.bitwarden.data.auth.manager.UserLogoutManager
|
import com.x8bit.bitwarden.data.auth.manager.UserLogoutManager
|
||||||
|
import com.x8bit.bitwarden.data.auth.manager.UserStateManager
|
||||||
import com.x8bit.bitwarden.data.auth.repository.model.LogoutReason
|
import com.x8bit.bitwarden.data.auth.repository.model.LogoutReason
|
||||||
import com.x8bit.bitwarden.data.auth.repository.util.toUpdatedUserStateJson
|
import com.x8bit.bitwarden.data.auth.repository.util.toUpdatedUserStateJson
|
||||||
import com.x8bit.bitwarden.data.auth.repository.util.userSwitchingChangesFlow
|
import com.x8bit.bitwarden.data.auth.repository.util.userSwitchingChangesFlow
|
||||||
@ -78,6 +79,7 @@ class VaultSyncManagerImpl(
|
|||||||
private val vaultDiskSource: VaultDiskSource,
|
private val vaultDiskSource: VaultDiskSource,
|
||||||
private val vaultSdkSource: VaultSdkSource,
|
private val vaultSdkSource: VaultSdkSource,
|
||||||
private val userLogoutManager: UserLogoutManager,
|
private val userLogoutManager: UserLogoutManager,
|
||||||
|
private val userStateManager: UserStateManager,
|
||||||
private val vaultLockManager: VaultLockManager,
|
private val vaultLockManager: VaultLockManager,
|
||||||
private val clock: Clock,
|
private val clock: Clock,
|
||||||
databaseSchemeManager: DatabaseSchemeManager,
|
databaseSchemeManager: DatabaseSchemeManager,
|
||||||
@ -301,44 +303,46 @@ class VaultSyncManagerImpl(
|
|||||||
|
|
||||||
return syncService.sync().fold(
|
return syncService.sync().fold(
|
||||||
onSuccess = { syncResponse ->
|
onSuccess = { syncResponse ->
|
||||||
val localSecurityStamp = authDiskSource.userState?.activeAccount?.profile?.stamp
|
userStateManager.userStateTransaction {
|
||||||
val serverSecurityStamp = syncResponse.profile.securityStamp
|
val localSecurityStamp = authDiskSource.userState?.activeAccount?.profile?.stamp
|
||||||
// Log the user out if the stamps do not match
|
val serverSecurityStamp = syncResponse.profile.securityStamp
|
||||||
localSecurityStamp?.let {
|
// Log the user out if the stamps do not match
|
||||||
if (serverSecurityStamp != localSecurityStamp) {
|
localSecurityStamp?.let {
|
||||||
// Ensure UserLogoutManager is available
|
if (serverSecurityStamp != localSecurityStamp) {
|
||||||
userLogoutManager.softLogout(
|
// Ensure UserLogoutManager is available
|
||||||
userId = userId,
|
userLogoutManager.softLogout(
|
||||||
reason = LogoutReason.SecurityStamp,
|
userId = userId,
|
||||||
)
|
reason = LogoutReason.SecurityStamp,
|
||||||
return SyncVaultDataResult.Error(SecurityStampMismatchException())
|
)
|
||||||
|
return@userStateTransaction SyncVaultDataResult.Error(
|
||||||
|
SecurityStampMismatchException(),
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Update user information with additional information from sync response
|
||||||
|
authDiskSource.userState = authDiskSource.userState?.toUpdatedUserStateJson(
|
||||||
|
syncResponse = syncResponse,
|
||||||
|
)
|
||||||
|
|
||||||
|
unlockVaultForOrganizationsIfNecessary(syncResponse = syncResponse)
|
||||||
|
storeProfileData(syncResponse = syncResponse)
|
||||||
|
|
||||||
|
// Treat absent network policies as known empty data to
|
||||||
|
// distinguish between unknown null data.
|
||||||
|
authDiskSource.storePolicies(
|
||||||
|
userId = userId,
|
||||||
|
policies = syncResponse.policies.orEmpty(),
|
||||||
|
)
|
||||||
|
|
||||||
|
settingsDiskSource.storeLastSyncTime(
|
||||||
|
userId = userId,
|
||||||
|
lastSyncTime = clock.instant(),
|
||||||
|
)
|
||||||
|
vaultDiskSource.replaceVaultData(userId = userId, vault = syncResponse)
|
||||||
|
val itemsAvailable = syncResponse.ciphers?.isNotEmpty() == true
|
||||||
|
SyncVaultDataResult.Success(itemsAvailable = itemsAvailable)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Treat absent network policies as known empty data to
|
|
||||||
// distinguish between unknown null data.
|
|
||||||
// The user state update will trigger flows that depend on the latest policies.
|
|
||||||
// We must store the new policies first to prevent old data on UserState.
|
|
||||||
authDiskSource.storePolicies(
|
|
||||||
userId = userId,
|
|
||||||
policies = syncResponse.policies.orEmpty(),
|
|
||||||
)
|
|
||||||
|
|
||||||
// Update user information with additional information from sync response
|
|
||||||
authDiskSource.userState = authDiskSource.userState?.toUpdatedUserStateJson(
|
|
||||||
syncResponse = syncResponse,
|
|
||||||
)
|
|
||||||
|
|
||||||
unlockVaultForOrganizationsIfNecessary(syncResponse = syncResponse)
|
|
||||||
storeProfileData(syncResponse = syncResponse)
|
|
||||||
|
|
||||||
settingsDiskSource.storeLastSyncTime(
|
|
||||||
userId = userId,
|
|
||||||
lastSyncTime = clock.instant(),
|
|
||||||
)
|
|
||||||
vaultDiskSource.replaceVaultData(userId = userId, vault = syncResponse)
|
|
||||||
val itemsAvailable = syncResponse.ciphers?.isNotEmpty() == true
|
|
||||||
SyncVaultDataResult.Success(itemsAvailable = itemsAvailable)
|
|
||||||
},
|
},
|
||||||
onFailure = {
|
onFailure = {
|
||||||
updateVaultStateFlowsToError(throwable = it)
|
updateVaultStateFlowsToError(throwable = it)
|
||||||
|
|||||||
@ -13,6 +13,7 @@ import com.x8bit.bitwarden.data.auth.datasource.sdk.AuthSdkSource
|
|||||||
import com.x8bit.bitwarden.data.auth.manager.KdfManager
|
import com.x8bit.bitwarden.data.auth.manager.KdfManager
|
||||||
import com.x8bit.bitwarden.data.auth.manager.TrustedDeviceManager
|
import com.x8bit.bitwarden.data.auth.manager.TrustedDeviceManager
|
||||||
import com.x8bit.bitwarden.data.auth.manager.UserLogoutManager
|
import com.x8bit.bitwarden.data.auth.manager.UserLogoutManager
|
||||||
|
import com.x8bit.bitwarden.data.auth.manager.UserStateManager
|
||||||
import com.x8bit.bitwarden.data.platform.datasource.disk.SettingsDiskSource
|
import com.x8bit.bitwarden.data.platform.datasource.disk.SettingsDiskSource
|
||||||
import com.x8bit.bitwarden.data.platform.manager.AppStateManager
|
import com.x8bit.bitwarden.data.platform.manager.AppStateManager
|
||||||
import com.x8bit.bitwarden.data.platform.manager.DatabaseSchemeManager
|
import com.x8bit.bitwarden.data.platform.manager.DatabaseSchemeManager
|
||||||
@ -182,6 +183,7 @@ object VaultManagerModule {
|
|||||||
vaultDiskSource: VaultDiskSource,
|
vaultDiskSource: VaultDiskSource,
|
||||||
vaultSdkSource: VaultSdkSource,
|
vaultSdkSource: VaultSdkSource,
|
||||||
userLogoutManager: UserLogoutManager,
|
userLogoutManager: UserLogoutManager,
|
||||||
|
userStateManager: UserStateManager,
|
||||||
vaultLockManager: VaultLockManager,
|
vaultLockManager: VaultLockManager,
|
||||||
clock: Clock,
|
clock: Clock,
|
||||||
databaseSchemeManager: DatabaseSchemeManager,
|
databaseSchemeManager: DatabaseSchemeManager,
|
||||||
@ -194,6 +196,7 @@ object VaultManagerModule {
|
|||||||
vaultDiskSource = vaultDiskSource,
|
vaultDiskSource = vaultDiskSource,
|
||||||
vaultSdkSource = vaultSdkSource,
|
vaultSdkSource = vaultSdkSource,
|
||||||
userLogoutManager = userLogoutManager,
|
userLogoutManager = userLogoutManager,
|
||||||
|
userStateManager = userStateManager,
|
||||||
vaultLockManager = vaultLockManager,
|
vaultLockManager = vaultLockManager,
|
||||||
clock = clock,
|
clock = clock,
|
||||||
databaseSchemeManager = databaseSchemeManager,
|
databaseSchemeManager = databaseSchemeManager,
|
||||||
|
|||||||
@ -29,6 +29,7 @@ import com.x8bit.bitwarden.data.auth.datasource.disk.model.AccountTokensJson
|
|||||||
import com.x8bit.bitwarden.data.auth.datasource.disk.model.UserStateJson
|
import com.x8bit.bitwarden.data.auth.datasource.disk.model.UserStateJson
|
||||||
import com.x8bit.bitwarden.data.auth.datasource.disk.util.FakeAuthDiskSource
|
import com.x8bit.bitwarden.data.auth.datasource.disk.util.FakeAuthDiskSource
|
||||||
import com.x8bit.bitwarden.data.auth.manager.UserLogoutManager
|
import com.x8bit.bitwarden.data.auth.manager.UserLogoutManager
|
||||||
|
import com.x8bit.bitwarden.data.auth.manager.UserStateManager
|
||||||
import com.x8bit.bitwarden.data.auth.repository.model.LogoutReason
|
import com.x8bit.bitwarden.data.auth.repository.model.LogoutReason
|
||||||
import com.x8bit.bitwarden.data.platform.datasource.disk.SettingsDiskSource
|
import com.x8bit.bitwarden.data.platform.datasource.disk.SettingsDiskSource
|
||||||
import com.x8bit.bitwarden.data.platform.error.MissingPropertyException
|
import com.x8bit.bitwarden.data.platform.error.MissingPropertyException
|
||||||
@ -64,6 +65,7 @@ import io.mockk.just
|
|||||||
import io.mockk.mockk
|
import io.mockk.mockk
|
||||||
import io.mockk.mockkConstructor
|
import io.mockk.mockkConstructor
|
||||||
import io.mockk.runs
|
import io.mockk.runs
|
||||||
|
import io.mockk.slot
|
||||||
import io.mockk.unmockkConstructor
|
import io.mockk.unmockkConstructor
|
||||||
import io.mockk.verify
|
import io.mockk.verify
|
||||||
import kotlinx.coroutines.flow.Flow
|
import kotlinx.coroutines.flow.Flow
|
||||||
@ -126,6 +128,10 @@ class VaultSyncManagerTest {
|
|||||||
private val userLogoutManager: UserLogoutManager = mockk {
|
private val userLogoutManager: UserLogoutManager = mockk {
|
||||||
every { softLogout(any(), any()) } just runs
|
every { softLogout(any(), any()) } just runs
|
||||||
}
|
}
|
||||||
|
private val userStateManager: UserStateManager = mockk {
|
||||||
|
val blockSlot = slot<suspend () -> SyncVaultDataResult>()
|
||||||
|
coEvery { userStateTransaction(capture(blockSlot)) } coAnswers { blockSlot.captured() }
|
||||||
|
}
|
||||||
private val mutableFullSyncFlow = bufferedMutableSharedFlow<String>()
|
private val mutableFullSyncFlow = bufferedMutableSharedFlow<String>()
|
||||||
private val pushManager: PushManager = mockk {
|
private val pushManager: PushManager = mockk {
|
||||||
every { fullSyncFlow } returns mutableFullSyncFlow
|
every { fullSyncFlow } returns mutableFullSyncFlow
|
||||||
@ -142,6 +148,7 @@ class VaultSyncManagerTest {
|
|||||||
vaultDiskSource = vaultDiskSource,
|
vaultDiskSource = vaultDiskSource,
|
||||||
vaultSdkSource = vaultSdkSource,
|
vaultSdkSource = vaultSdkSource,
|
||||||
userLogoutManager = userLogoutManager,
|
userLogoutManager = userLogoutManager,
|
||||||
|
userStateManager = userStateManager,
|
||||||
vaultLockManager = vaultLockManager,
|
vaultLockManager = vaultLockManager,
|
||||||
clock = clock,
|
clock = clock,
|
||||||
databaseSchemeManager = databaseSchemeManager,
|
databaseSchemeManager = databaseSchemeManager,
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user