From 2db62fdb052691802dd37376620aff2b8a757c76 Mon Sep 17 00:00:00 2001 From: Taras Smakula <tarassmakula@gmail.com> Date: Fri, 17 Nov 2023 16:18:43 +0200 Subject: [PATCH] Implement refreshToken in DefaultAuthService --- .../sdk/api/auth/AuthenticationService.kt | 6 +++++ .../auth/DefaultAuthenticationService.kt | 27 +++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/auth/AuthenticationService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/auth/AuthenticationService.kt index 1afae8c1..ad5a43e8 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/auth/AuthenticationService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/auth/AuthenticationService.kt @@ -24,6 +24,7 @@ import org.matrix.android.sdk.api.auth.login.LoginWizard import org.matrix.android.sdk.api.auth.registration.RegistrationWizard import org.matrix.android.sdk.api.auth.wellknown.WellknownResult import org.matrix.android.sdk.api.session.Session +import org.matrix.android.sdk.internal.auth.login.RefreshedTokenInfo /** * This interface defines methods to authenticate or to create an account to a matrix server. @@ -165,4 +166,9 @@ interface AuthenticationService { * Added for switch user */ suspend fun removeSession(sessionId: String) + + /** + * Added for Circles + */ + suspend fun refreshToken(sessionId: String): RefreshedTokenInfo } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/DefaultAuthenticationService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/DefaultAuthenticationService.kt index aa5774e5..d3b3b923 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/DefaultAuthenticationService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/DefaultAuthenticationService.kt @@ -42,6 +42,8 @@ import org.matrix.android.sdk.internal.auth.db.PendingSessionData import org.matrix.android.sdk.internal.auth.login.DefaultLoginWizard import org.matrix.android.sdk.internal.auth.login.DirectLoginTask import org.matrix.android.sdk.internal.auth.login.QrLoginTokenTask +import org.matrix.android.sdk.internal.auth.login.RefreshTokenParams +import org.matrix.android.sdk.internal.auth.login.RefreshedTokenInfo import org.matrix.android.sdk.internal.auth.registration.DefaultRegistrationWizard import org.matrix.android.sdk.internal.auth.version.Versions import org.matrix.android.sdk.internal.auth.version.doesServerSupportLogoutDevices @@ -501,4 +503,29 @@ internal class DefaultAuthenticationService @Inject constructor( override suspend fun removeSession(sessionId: String) { sessionManager.removeSession(sessionId) } + + //Added for Circles + override suspend fun refreshToken(sessionId: String): RefreshedTokenInfo { + val sessionParams = sessionParamsStore.get(sessionId) ?: throw IllegalArgumentException( + "Session params for session $sessionId not found" + ) + val authAPI = buildAuthAPI(sessionParams.homeServerConnectionConfig) + + val sessionCredentials = sessionParamsStore.get(sessionId)?.credentials ?: throw IllegalArgumentException( + "Credentials for session $sessionId not found" + ) + val sessionRefreshToken = sessionCredentials.refreshToken ?: throw IllegalArgumentException( + "Refresh token for session $sessionId not found" + ) + val refreshTokenInfo = executeRequest(null) { + authAPI.refreshToken(RefreshTokenParams(sessionRefreshToken)) + } + val newCredentials = sessionCredentials.copy( + accessToken = refreshTokenInfo.accessToken, + refreshToken = refreshTokenInfo.refreshToken, + expiresInMs = refreshTokenInfo.expiresInMs + ) + sessionParamsStore.updateCredentials(newCredentials) + return refreshTokenInfo + } } -- GitLab