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