Skip to content

Commit

Permalink
fix: SessionManager missing session error (#2228) (#2229)
Browse files Browse the repository at this point in the history
* fix: SessionManager missing session error

* detekt

* add test

* detekt

Co-authored-by: Mohamad Jaara <mohamad.jaara@wire.com>
  • Loading branch information
github-actions[bot] and MohamadJaara authored Nov 16, 2023
1 parent 3a9836b commit 78a0841
Show file tree
Hide file tree
Showing 5 changed files with 36 additions and 17 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,10 @@ internal class LogoutUseCaseImpl @Suppress("LongParameterList") constructor(
endCallUseCase(it.conversationId)
}

logoutRepository.logout()
if (reason != LogoutReason.SESSION_EXPIRED) {
logoutRepository.logout()
}

sessionRepository.logout(userId = userId, reason)
logoutRepository.onLogout(reason)
userSessionWorkScheduler.cancelScheduledSendingOfPendingMessages()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,18 +66,14 @@ class SessionManagerImpl internal constructor(

private var serverConfig: ServerConfigDTO? = null

override suspend fun session(): SessionDTO = withContext(coroutineContext) {
override suspend fun session(): SessionDTO? = withContext(coroutineContext) {
wrapStorageRequest { tokenStorage.getToken(userId.toDao()) }
.map { sessionMapper.fromEntityToSessionDTO(it) }
.fold(
.nullableFold(
{
error(
"""SESSION MANAGER:
|"error": "missing user session",
|"cause": "$it" """.trimMargin()
)
logout(LogoutReason.SESSION_EXPIRED)
null
}, { session ->
kaliumLogger.i("_TOKEN_ FOUND SESSION = $session")
session
}
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -82,9 +82,7 @@ class LogoutUseCaseTest {
verify(arrangement.deregisterTokenUseCase)
.suspendFunction(arrangement.deregisterTokenUseCase::invoke)
.wasInvoked(exactly = once)
verify(arrangement.logoutRepository)
.suspendFunction(arrangement.logoutRepository::logout)
.wasInvoked(exactly = once)

verify(arrangement.sessionRepository)
.suspendFunction(arrangement.sessionRepository::logout)
.with(any(), eq(reason))
Expand Down Expand Up @@ -211,6 +209,10 @@ class LogoutUseCaseTest {
logoutUseCase.invoke(reason)
arrangement.globalTestScope.advanceUntilIdle()

verify(arrangement.logoutRepository)
.suspendFunction(arrangement.logoutRepository::logout)
.wasNotInvoked()

verify(arrangement.clearClientDataUseCase)
.suspendFunction(arrangement.clearClientDataUseCase::invoke)
.wasInvoked(exactly = once)
Expand Down Expand Up @@ -238,9 +240,14 @@ class LogoutUseCaseTest {
logoutUseCase.invoke(reason)
arrangement.globalTestScope.advanceUntilIdle()

verify(arrangement.logoutRepository)
.suspendFunction(arrangement.logoutRepository::logout)
.wasInvoked(exactly = once)

verify(arrangement.clearClientDataUseCase)
.suspendFunction(arrangement.clearClientDataUseCase::invoke)
.wasInvoked(exactly = once)

verify(arrangement.clearUserDataUseCase)
.suspendFunction(arrangement.clearUserDataUseCase::invoke)
.wasNotInvoked()
Expand Down Expand Up @@ -271,6 +278,10 @@ class LogoutUseCaseTest {
logoutUseCase.invoke(reason)
arrangement.globalTestScope.advanceUntilIdle()

verify(arrangement.logoutRepository)
.suspendFunction(arrangement.logoutRepository::logout)
.wasInvoked(exactly = once)

verify(arrangement.clearClientDataUseCase)
.suspendFunction(arrangement.clearClientDataUseCase::invoke)
.wasNotInvoked()
Expand Down Expand Up @@ -307,6 +318,10 @@ class LogoutUseCaseTest {
logoutUseCase.invoke(reason)
arrangement.globalTestScope.advanceUntilIdle()

verify(arrangement.logoutRepository)
.suspendFunction(arrangement.logoutRepository::logout)
.wasInvoked(exactly = once)

verify(arrangement.observeEstablishedCallsUseCase)
.suspendFunction(arrangement.observeEstablishedCallsUseCase::invoke)
.wasInvoked(exactly = once)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,6 @@ import com.wire.kalium.network.api.v2.authenticated.networkContainer.Authenticat
import com.wire.kalium.network.api.v3.authenticated.networkContainer.AuthenticatedNetworkContainerV3
import com.wire.kalium.network.api.v4.authenticated.networkContainer.AuthenticatedNetworkContainerV4
import com.wire.kalium.network.api.v5.authenticated.networkContainer.AuthenticatedNetworkContainerV5
import com.wire.kalium.network.kaliumLogger
import com.wire.kalium.network.session.CertificatePinning
import com.wire.kalium.network.session.SessionManager
import com.wire.kalium.network.tools.ServerConfigDTO
Expand Down Expand Up @@ -202,8 +201,9 @@ internal class AuthenticatedHttpClientProviderImpl(
}

private val loadToken: suspend () -> BearerTokens? = {
val session = sessionManager.session() ?: error("missing user session")
BearerTokens(accessToken = session.accessToken, refreshToken = session.refreshToken)
sessionManager.session()?.let { session ->
BearerTokens(accessToken = session.accessToken, refreshToken = session.refreshToken)
}
}

private val refreshToken: suspend RefreshTokensParams.() -> BearerTokens = {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,15 @@ import com.wire.kalium.network.exceptions.KaliumException
import com.wire.kalium.network.exceptions.NetworkErrorLabel

object CustomErrors {

private const val MISSING_REFRESH_TOKEN_CODE = -1
private const val MISSING_NONCE_CODE = -2

val MISSING_REFRESH_TOKEN =
NetworkResponse.Error(
KaliumException.ServerError(
ErrorResponse(
500,
MISSING_REFRESH_TOKEN_CODE,
"no cookie was found",
NetworkErrorLabel.KaliumCustom.MISSING_REFRESH_TOKEN
)
Expand All @@ -38,10 +42,11 @@ object CustomErrors {
NetworkResponse.Error(
KaliumException.ServerError(
ErrorResponse(
500,
MISSING_NONCE_CODE,
"no nonce found",
NetworkErrorLabel.KaliumCustom.MISSING_NONCE
)
)
)

}

0 comments on commit 78a0841

Please sign in to comment.