When logging out from Pin code screen, logout from all the sessions.

This commit is contained in:
Benoit Marty 2025-09-18 09:44:02 +02:00
parent a2d728d29e
commit be61b89bfb
6 changed files with 146 additions and 20 deletions

View file

@ -12,22 +12,31 @@ import dev.zacsweers.metro.ContributesBinding
import dev.zacsweers.metro.Inject
import io.element.android.features.logout.api.LogoutUseCase
import io.element.android.libraries.matrix.api.MatrixClientProvider
import io.element.android.libraries.matrix.api.auth.MatrixAuthenticationService
import io.element.android.libraries.matrix.api.core.SessionId
import io.element.android.libraries.sessionstorage.api.SessionStore
import timber.log.Timber
@ContributesBinding(AppScope::class)
@Inject
class DefaultLogoutUseCase(
private val authenticationService: MatrixAuthenticationService,
private val sessionStore: SessionStore,
private val matrixClientProvider: MatrixClientProvider,
) : LogoutUseCase {
override suspend fun logout(ignoreSdkError: Boolean) {
val currentSession = authenticationService.getLatestSessionId()
if (currentSession != null) {
matrixClientProvider.getOrRestore(currentSession)
.getOrThrow()
.logout(userInitiated = true, ignoreSdkError = true)
} else {
error("No session to sign out")
}
override suspend fun logoutAll(ignoreSdkError: Boolean) {
sessionStore.getAllSessions()
.map { sessionData ->
SessionId(sessionData.userId)
}
.forEach { sessionId ->
Timber.d("Logging out sessionId: $sessionId")
matrixClientProvider.getOrRestore(sessionId).fold(
onSuccess = { client ->
client.logout(userInitiated = true, ignoreSdkError = ignoreSdkError)
},
onFailure = { error ->
Timber.e(error, "Failed to get or restore MatrixClient for sessionId: $sessionId")
}
)
}
}
}