When logging out from Pin code screen, logout from all the sessions.
This commit is contained in:
parent
a2d728d29e
commit
be61b89bfb
6 changed files with 146 additions and 20 deletions
|
|
@ -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")
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue