From 0fe8ad2776d69c3cb42fd72057341bf47676e98e Mon Sep 17 00:00:00 2001 From: Taras Smakula <tarassmakula@gmail.com> Date: Wed, 1 Nov 2023 16:14:55 +0200 Subject: [PATCH] Implement in DefaultAuthService --- .../auth/DefaultAuthenticationService.kt | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) 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 e852c611..aa5774e5 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 @@ -28,6 +28,7 @@ import org.matrix.android.sdk.api.auth.data.Credentials import org.matrix.android.sdk.api.auth.data.HomeServerConnectionConfig import org.matrix.android.sdk.api.auth.data.LoginFlowResult import org.matrix.android.sdk.api.auth.data.LoginFlowTypes +import org.matrix.android.sdk.api.auth.data.SessionParams 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 @@ -448,4 +449,56 @@ internal class DefaultAuthenticationService @Inject constructor( .addSocketFactory(homeServerConnectionConfig) .build() } + + //Added to initiate auth without GET /login + override suspend fun initiateAuth(homeServerConnectionConfig: HomeServerConnectionConfig): String { + val result = runCatching { + getHomeServerUserFromWellKnown(homeServerConnectionConfig) + } + return result.fold( + { + val alteredHomeServerConnectionConfig = homeServerConnectionConfig.copy( + homeServerUriBase = Uri.parse(it) + ) + + pendingSessionData = PendingSessionData(alteredHomeServerConnectionConfig) + .also { data -> pendingSessionStore.savePendingSessionData(data) } + it + }, + { + if (it is UnrecognizedCertificateException) { + throw Failure.UnrecognizedCertificateFailure(homeServerConnectionConfig.homeServerUriBase.toString(), it.fingerprint) + } else { + throw it + } + } + ) + } + + //Added to initiate auth without GET /login + private suspend fun getHomeServerUserFromWellKnown(homeServerConnectionConfig: HomeServerConnectionConfig): String { + val domain = homeServerConnectionConfig.homeServerUri.host + ?: throw Failure.OtherServerError("", HttpsURLConnection.HTTP_NOT_FOUND /* 404 */) + + return when (val wellKnownResult = getWellknownTask.execute(GetWellknownTask.Params(domain, homeServerConnectionConfig))) { + is WellknownResult.Prompt -> wellKnownResult.homeServerUrl + else -> throw Failure.OtherServerError("", HttpsURLConnection.HTTP_NOT_FOUND /* 404 */) + } + } + + //Added for switch user + override suspend fun switchToSessionWithId(id: String) { + sessionManager.setActiveSessionAsLast(id) + } + + //Added for switch user + override fun getAllAuthSessionsParams(): List<SessionParams> = sessionManager.getAllSessionParams() + + //Added for switch user + override fun createSessionFromParams(params: SessionParams): Session = sessionManager.getOrCreateSession(params) + + //Added for switch user + override suspend fun removeSession(sessionId: String) { + sessionManager.removeSession(sessionId) + } } -- GitLab