Skip to content

Commit

Permalink
refactor: unify access token refreshing logic [WPB-5038] (#2336)
Browse files Browse the repository at this point in the history
  • Loading branch information
vitorhugods committed Oct 17, 2023
1 parent b5090d9 commit 0f2a5d0
Show file tree
Hide file tree
Showing 5 changed files with 12 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ import com.wire.kalium.logic.CoreLogic
import com.wire.kalium.logic.configuration.server.ServerConfig
import com.wire.kalium.logic.data.user.UserId
import com.wire.kalium.logic.feature.auth.AddAuthenticatedUserUseCase
import com.wire.kalium.logic.feature.auth.AuthTokens
import com.wire.kalium.logic.feature.auth.AccountTokens
import com.wire.kalium.logic.feature.auth.sso.SSOLoginSessionResult
import com.wire.kalium.logic.functional.Either
import com.wire.kalium.logic.functional.flatMap
Expand Down Expand Up @@ -59,7 +59,7 @@ class MigrateActiveAccountsUseCase @Inject constructor(
)
val isDataComplete = isDataComplete(serverConfig, activeAccount)
val ssoId = activeAccount.ssoId?.let { ssoId -> mapper.fromScalaSsoID(ssoId) }
val authTokensEither: Either<CoreFailure, AuthTokens> = if (isDataComplete) {
val accountTokensEither: Either<CoreFailure, AccountTokens> = if (isDataComplete) {
// when the data is complete it means the user has a domain and an access token
// which make the following double bang operator safe
val domain = if (!activeAccount.domain.isNullOrBlank()) {
Expand All @@ -70,7 +70,7 @@ class MigrateActiveAccountsUseCase @Inject constructor(

val userId = UserId(activeAccount.id, domain)
Either.Right(
AuthTokens(
AccountTokens(
userId = userId,
accessToken = activeAccount.accessToken?.token!!,
tokenType = activeAccount.accessToken.tokenType,
Expand All @@ -85,7 +85,7 @@ class MigrateActiveAccountsUseCase @Inject constructor(
)
}

val accountResult = authTokensEither.flatMap { authTokens ->
val accountResult = accountTokensEither.flatMap { authTokens ->
val addAccountResult = coreLogic.globalScope {
addAuthenticatedAccount(
serverConfigId = serverConfig.id,
Expand Down Expand Up @@ -117,13 +117,13 @@ class MigrateActiveAccountsUseCase @Inject constructor(
private suspend fun handleMissingData(
serverConfig: ServerConfig,
refreshToken: String,
): Either<CoreFailure, AuthTokens> = coreLogic.authenticationScope(serverConfig) {
): Either<CoreFailure, AccountTokens> = coreLogic.authenticationScope(serverConfig) {
ssoLoginScope.getLoginSession(refreshToken)
}.let {
when (it) {
is SSOLoginSessionResult.Failure.Generic -> Either.Left(it.genericFailure)
SSOLoginSessionResult.Failure.InvalidCookie -> Either.Left(MigrationFailure.InvalidRefreshToken)
is SSOLoginSessionResult.Success -> Either.Right(it.authTokens)
is SSOLoginSessionResult.Success -> Either.Right(it.accountTokens)
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -235,7 +235,7 @@ class LoginSSOViewModel @Inject constructor(
}
}
val storedUserId = addAuthenticatedUser(
authTokens = ssoLoginResult.authTokens,
authTokens = ssoLoginResult.accountTokens,
ssoId = ssoLoginResult.ssoId,
serverConfigId = serverConfigId,
proxyCredentials = ssoLoginResult.proxyCredentials,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ import com.wire.kalium.logic.data.id.QualifiedIdMapper
import com.wire.kalium.logic.data.user.SsoId
import com.wire.kalium.logic.data.user.UserId
import com.wire.kalium.logic.feature.auth.AddAuthenticatedUserUseCase
import com.wire.kalium.logic.feature.auth.AuthTokens
import com.wire.kalium.logic.feature.auth.AccountTokens
import com.wire.kalium.logic.feature.auth.AuthenticationResult
import com.wire.kalium.logic.feature.auth.AuthenticationScope
import com.wire.kalium.logic.feature.auth.LoginUseCase
Expand Down Expand Up @@ -497,7 +497,7 @@ class LoginEmailViewModelTest {
isValid = true, DeviceType.Desktop, "label", null, null
)
val SSO_ID: SsoId = SsoId("scim_id", null, null)
val AUTH_TOKEN = AuthTokens(
val AUTH_TOKEN = AccountTokens(
userId = UserId("user_id", "domain"),
accessToken = "access_token",
refreshToken = "refresh_token",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ import com.wire.kalium.logic.data.id.QualifiedID
import com.wire.kalium.logic.data.user.SsoId
import com.wire.kalium.logic.data.user.UserId
import com.wire.kalium.logic.feature.auth.AddAuthenticatedUserUseCase
import com.wire.kalium.logic.feature.auth.AuthTokens
import com.wire.kalium.logic.feature.auth.AccountTokens
import com.wire.kalium.logic.feature.auth.AuthenticationScope
import com.wire.kalium.logic.feature.auth.DomainLookupUseCase
import com.wire.kalium.logic.feature.auth.ValidateEmailUseCase
Expand Down Expand Up @@ -80,7 +80,6 @@ import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.extension.ExtendWith
import java.io.IOException
import org.mockito.Mockito.verify

@OptIn(ExperimentalCoroutinesApi::class)
@ExtendWith(CoroutineTestExtension::class)
Expand Down Expand Up @@ -525,7 +524,7 @@ class LoginSSOViewModelTest {
null
)
val SSO_ID: SsoId = SsoId("scim_id", null, null)
val AUTH_TOKEN = AuthTokens(
val AUTH_TOKEN = AccountTokens(
userId = UserId("user_id", "domain"),
accessToken = "access_token",
refreshToken = "refresh_token",
Expand Down
2 changes: 1 addition & 1 deletion kalium
Submodule kalium updated 44 files
+1 βˆ’1 android/src/main/kotlin/com/wire/kalium/presentation/MainActivity.kt
+3 βˆ’3 cryptography/src/commonJvmAndroid/kotlin/com.wire.kalium.cryptography/E2EIClientImpl.kt
+56 βˆ’24 cryptography/src/commonJvmAndroid/kotlin/com.wire.kalium.cryptography/MLSClientImpl.kt
+5 βˆ’2 cryptography/src/commonJvmAndroid/kotlin/com.wire.kalium.cryptography/ProteusClientCoreCryptoImpl.kt
+0 βˆ’2 cryptography/src/commonTest/kotlin/com/wire/kalium/cryptography/E2EIClientTest.kt
+1 βˆ’1 gradle/libs.versions.toml
+6 βˆ’6 logic/src/commonMain/kotlin/com/wire/kalium/logic/data/auth/login/LoginRepository.kt
+6 βˆ’6 logic/src/commonMain/kotlin/com/wire/kalium/logic/data/register/RegisterAccountRepository.kt
+12 βˆ’12 logic/src/commonMain/kotlin/com/wire/kalium/logic/data/session/SessionMapper.kt
+5 βˆ’5 logic/src/commonMain/kotlin/com/wire/kalium/logic/data/session/SessionRepository.kt
+39 βˆ’0 logic/src/commonMain/kotlin/com/wire/kalium/logic/data/session/token/AccessToken.kt
+90 βˆ’0 logic/src/commonMain/kotlin/com/wire/kalium/logic/data/session/token/AccessTokenRepository.kt
+39 βˆ’0 logic/src/commonMain/kotlin/com/wire/kalium/logic/data/session/token/AccessTokenRepositoryFactory.kt
+44 βˆ’17 logic/src/commonMain/kotlin/com/wire/kalium/logic/feature/UserSessionScope.kt
+8 βˆ’8 logic/src/commonMain/kotlin/com/wire/kalium/logic/feature/auth/AddAuthenticatedUserUseCase.kt
+21 βˆ’5 logic/src/commonMain/kotlin/com/wire/kalium/logic/feature/auth/AuthSession.kt
+1 βˆ’1 logic/src/commonMain/kotlin/com/wire/kalium/logic/feature/auth/LoginUseCase.kt
+7 βˆ’3 logic/src/commonMain/kotlin/com/wire/kalium/logic/feature/auth/sso/GetSSOLoginSessionUseCase.kt
+2 βˆ’2 logic/src/commonMain/kotlin/com/wire/kalium/logic/feature/register/RegisterAccountUseCase.kt
+8 βˆ’13 logic/src/commonMain/kotlin/com/wire/kalium/logic/feature/session/UpgradeCurrentSessionUseCase.kt
+64 βˆ’0 logic/src/commonMain/kotlin/com/wire/kalium/logic/feature/session/token/AccessTokenRefresher.kt
+47 βˆ’0 logic/src/commonMain/kotlin/com/wire/kalium/logic/feature/session/token/AccessTokenRefresherFactory.kt
+30 βˆ’34 logic/src/commonMain/kotlin/com/wire/kalium/logic/network/SessionManagerImpl.kt
+11 βˆ’12 logic/src/commonTest/kotlin/com/wire/kalium/logic/data/register/RegisterAccountRepositoryTest.kt
+8 βˆ’8 logic/src/commonTest/kotlin/com/wire/kalium/logic/data/session/SessionMapperTest.kt
+21 βˆ’9 logic/src/commonTest/kotlin/com/wire/kalium/logic/feature/auth/AddAuthenticatedUserUseCaseTest.kt
+3 βˆ’3 logic/src/commonTest/kotlin/com/wire/kalium/logic/feature/auth/LoginUseCaseTest.kt
+2 βˆ’2 logic/src/commonTest/kotlin/com/wire/kalium/logic/feature/register/RegisterAccountUseCaseTest.kt
+141 βˆ’0 logic/src/commonTest/kotlin/com/wire/kalium/logic/feature/session/token/AccessTokenRefresherTest.kt
+112 βˆ’0 logic/src/commonTest/kotlin/com/wire/kalium/logic/network/SessionManagerTest.kt
+1 βˆ’1 monkeys/src/main/kotlin/com/wire/kalium/monkeys/conversation/Monkey.kt
+4 βˆ’1 network/src/commonMain/kotlin/com/wire/kalium/network/api/base/authenticated/AccessTokenApi.kt
+8 βˆ’0 network/src/commonMain/kotlin/com/wire/kalium/network/api/base/model/Tokens.kt
+16 βˆ’5 network/src/commonMain/kotlin/com/wire/kalium/network/networkContainer/AuthenticatedNetworkContainer.kt
+30 βˆ’0 network/src/commonMain/kotlin/com/wire/kalium/network/session/FailureToRefreshTokenException.kt
+13 βˆ’4 network/src/commonMain/kotlin/com/wire/kalium/network/session/SessionManager.kt
+6 βˆ’2 network/src/commonTest/kotlin/com/wire/kalium/api/ApiTest.kt
+5 βˆ’12 network/src/commonTest/kotlin/com/wire/kalium/api/TestSessionManagerV0.kt
+85 βˆ’22 network/src/commonTest/kotlin/com/wire/kalium/api/common/SessionManagerIntegrationTest.kt
+2 βˆ’1 persistence/src/androidMain/kotlin/com/wire/kalium/persistence/kmmSettings/GlobalPrefProvider.kt
+2 βˆ’1 persistence/src/appleMain/kotlin/com/wire/kalium/persistence/kmmSettings/GlobalPrefProvider.kt
+21 βˆ’7 persistence/src/commonMain/kotlin/com/wire/kalium/persistence/client/AuthTokenStorage.kt
+1 βˆ’2 persistence/src/commonTest/kotlin/com/wire/kalium/persistence/client/AuthTokenStorageTest.kt
+2 βˆ’1 persistence/src/jvmMain/kotlin/com/wire/kalium/persistence/kmmSettings/GlobalPrefProvider.kt

0 comments on commit 0f2a5d0

Please sign in to comment.