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 1afae8c1727341e3cc52c7d5bcc1a4040110155c..ad5a43e8b73161b0322d65bb13fe2bb668449955 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 aa5774e5798ed26a3d18e25248771dad2152b001..d3b3b923fe84f9c59978edf05cf8d36abece1013 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 + } }