Skip to content

Commit cbc9c29

Browse files
PM-35654: bug: User switch should not occur on soft-logout (#6825)
1 parent d209235 commit cbc9c29

2 files changed

Lines changed: 3 additions & 24 deletions

File tree

app/src/main/kotlin/com/x8bit/bitwarden/data/auth/manager/UserLogoutManagerImpl.kt

Lines changed: 2 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,6 @@ class UserLogoutManagerImpl(
5757
val ableToSwitchToNewAccount = switchUserIfAvailable(
5858
currentUserId = userId,
5959
isSecurityStamp = isSecurityStamp,
60-
removeCurrentUserFromAccounts = true,
6160
)
6261

6362
if (!ableToSwitchToNewAccount) {
@@ -87,12 +86,6 @@ class UserLogoutManagerImpl(
8786
userId = userId,
8887
)
8988

90-
switchUserIfAvailable(
91-
currentUserId = userId,
92-
removeCurrentUserFromAccounts = false,
93-
isSecurityStamp = isSecurityStamp,
94-
)
95-
9689
clearData(userId = userId)
9790
mutableLogoutEventFlow.tryEmit(LogoutEvent(loggedOutUserId = userId))
9891

@@ -135,16 +128,14 @@ class UserLogoutManagerImpl(
135128

136129
private fun switchUserIfAvailable(
137130
currentUserId: String,
138-
removeCurrentUserFromAccounts: Boolean,
139131
isSecurityStamp: Boolean,
140132
): Boolean {
141133
val currentUserState = authDiskSource.userState ?: return false
142134

143135
val currentAccountsMap = currentUserState.accounts
144136

145137
// Remove the active user from the accounts map
146-
val updatedAccounts = currentAccountsMap
147-
.filterKeys { it != currentUserId }
138+
val updatedAccounts = currentAccountsMap.filterKeys { it != currentUserId }
148139

149140
// Check if there is a new active user
150141
return if (updatedAccounts.isNotEmpty()) {
@@ -163,11 +154,7 @@ class UserLogoutManagerImpl(
163154
// Update the user information and emit an updated token
164155
authDiskSource.userState = currentUserState.copy(
165156
activeUserId = updatedActiveUserId,
166-
accounts = if (removeCurrentUserFromAccounts) {
167-
updatedAccounts
168-
} else {
169-
currentAccountsMap
170-
},
157+
accounts = updatedAccounts,
171158
)
172159
true
173160
} else {

app/src/test/kotlin/com/x8bit/bitwarden/data/auth/manager/UserLogoutManagerTest.kt

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,6 @@ class UserLogoutManagerTest {
145145
val pinProtectedUserKeyEnvelope = "pinProtectedUserKeyEnvelope"
146146
val encryptedPin = "encryptedPin"
147147

148-
every { authDiskSource.userState } returns MULTI_USER_STATE
149148
every {
150149
settingsDiskSource.getVaultTimeoutInMinutes(userId = userId)
151150
} returns vaultTimeoutInMinutes
@@ -186,7 +185,6 @@ class UserLogoutManagerTest {
186185
userId = userId,
187186
vaultTimeoutAction = vaultTimeoutAction,
188187
)
189-
toastManager.show(messageId = BitwardenString.account_switched_automatically)
190188
settingsDiskSource.storeVaultTimeoutInMinutes(
191189
userId = userId,
192190
vaultTimeoutInMinutes = vaultTimeoutInMinutes,
@@ -208,15 +206,14 @@ class UserLogoutManagerTest {
208206
}
209207

210208
@Test
211-
fun `softLogout should switch active user but keep previous user in accounts list`() {
209+
fun `softLogout should clear user data but keep the user in accounts list`() {
212210
val userId = USER_ID_1
213211
val vaultTimeoutInMinutes = 360
214212
val vaultTimeoutAction = VaultTimeoutAction.LOGOUT
215213
val pinProtectedUserKey = "pinProtectedUserKey"
216214
val pinProtectedUserKeyEnvelope = "pinProtectedUserKeyEnvelope"
217215
val encryptedPin = "encryptedPin"
218216

219-
every { authDiskSource.userState } returns MULTI_USER_STATE
220217
every {
221218
settingsDiskSource.getVaultTimeoutInMinutes(userId = userId)
222219
} returns vaultTimeoutInMinutes
@@ -247,11 +244,6 @@ class UserLogoutManagerTest {
247244
userLogoutManager.softLogout(userId = userId, reason = LogoutReason.Timeout)
248245

249246
verify(exactly = 1) {
250-
authDiskSource.userState = UserStateJson(
251-
activeUserId = USER_ID_2,
252-
accounts = MULTI_USER_STATE.accounts,
253-
)
254-
toastManager.show(messageId = BitwardenString.account_switched_automatically)
255247
settingsDiskSource.storeVaultTimeoutInMinutes(
256248
userId = userId,
257249
vaultTimeoutInMinutes = vaultTimeoutInMinutes,

0 commit comments

Comments
 (0)