From 8ffd0b800711153801b94caf1d8d11327ca2c7c6 Mon Sep 17 00:00:00 2001
From: Taras Smakula <tarassmakula@gmail.com>
Date: Wed, 20 Mar 2024 14:07:41 +0200
Subject: [PATCH] Clean up password ds

---
 .../uia/stages/password/PasswordDataSource.kt | 40 ++++++++-----------
 .../uia/stages/password/PasswordFragment.kt   |  2 +-
 .../uia/stages/password/PasswordViewModel.kt  |  2 +-
 3 files changed, 18 insertions(+), 26 deletions(-)

diff --git a/auth/src/main/java/org/futo/circles/auth/feature/uia/stages/password/PasswordDataSource.kt b/auth/src/main/java/org/futo/circles/auth/feature/uia/stages/password/PasswordDataSource.kt
index 99ed81ded..9f78db94d 100644
--- a/auth/src/main/java/org/futo/circles/auth/feature/uia/stages/password/PasswordDataSource.kt
+++ b/auth/src/main/java/org/futo/circles/auth/feature/uia/stages/password/PasswordDataSource.kt
@@ -4,19 +4,18 @@ import android.content.Context
 import dagger.hilt.android.qualifiers.ApplicationContext
 import org.futo.circles.auth.R
 import org.futo.circles.auth.feature.uia.UIADataSource.Companion.DIRECT_LOGIN_PASSWORD_TYPE
-import org.futo.circles.auth.feature.uia.UIADataSource.Companion.LOGIN_BSSPEKE_OPRF_TYPE
-import org.futo.circles.auth.feature.uia.UIADataSource.Companion.LOGIN_PASSWORD_TYPE
 import org.futo.circles.auth.feature.uia.UIADataSource.Companion.ENROLL_BSSPEKE_OPRF_TYPE
 import org.futo.circles.auth.feature.uia.UIADataSource.Companion.ENROLL_BSSPEKE_SAVE_TYPE
 import org.futo.circles.auth.feature.uia.UIADataSource.Companion.ENROLL_PASSWORD_TYPE
+import org.futo.circles.auth.feature.uia.UIADataSource.Companion.LOGIN_BSSPEKE_OPRF_TYPE
 import org.futo.circles.auth.feature.uia.UIADataSource.Companion.LOGIN_BSSPEKE_VERIFY_TYPE
+import org.futo.circles.auth.feature.uia.UIADataSource.Companion.LOGIN_PASSWORD_TYPE
 import org.futo.circles.auth.feature.uia.UIADataSource.Companion.TYPE_PARAM_KEY
 import org.futo.circles.auth.feature.uia.UIADataSourceProvider
 import org.futo.circles.core.extensions.Response
 import org.futo.circles.core.extensions.createResult
 import org.futo.circles.core.provider.MatrixInstanceProvider
 import org.matrix.android.sdk.api.auth.registration.RegistrationResult
-import org.matrix.android.sdk.api.auth.registration.Stage
 import javax.inject.Inject
 
 class PasswordDataSource @Inject constructor(
@@ -29,41 +28,34 @@ class PasswordDataSource @Inject constructor(
     suspend fun processPasswordStage(password: String): Response<Unit> =
         when (uiaDataSource.getCurrentStageKey()) {
             LOGIN_BSSPEKE_OPRF_TYPE, ENROLL_BSSPEKE_OPRF_TYPE,
-            LOGIN_BSSPEKE_VERIFY_TYPE, ENROLL_BSSPEKE_SAVE_TYPE->
+            LOGIN_BSSPEKE_VERIFY_TYPE, ENROLL_BSSPEKE_SAVE_TYPE ->
                 bsSpekeStageDataSource.processPasswordStage(password)
 
-            ENROLL_PASSWORD_TYPE -> processRegistrationPasswordStage(password)
-            LOGIN_PASSWORD_TYPE -> processPasswordStageL(password)
+            ENROLL_PASSWORD_TYPE -> processCirclesPasswordStage(password, false)
+            LOGIN_PASSWORD_TYPE -> processCirclesPasswordStage(password, true)
             DIRECT_LOGIN_PASSWORD_TYPE -> processDirectPasswordStage(password)
             else -> throw IllegalArgumentException("Unsupported password stage")
         }
 
 
-    private suspend fun processRegistrationPasswordStage(password: String): Response<Unit> =
-        when (val result = uiaDataSource.performUIAStage(
+    private suspend fun processCirclesPasswordStage(
+        password: String,
+        isLogin: Boolean
+    ): Response<Unit> {
+        val type = if (isLogin) LOGIN_PASSWORD_TYPE else ENROLL_PASSWORD_TYPE
+        val passwordKey = if (isLogin) LOGIN_PASSWORD_PARAM_KEY else REGISTRATION_PASSWORD_PARAM_KEY
+
+        return when (val result = uiaDataSource.performUIAStage(
             mapOf(
-                TYPE_PARAM_KEY to ENROLL_PASSWORD_TYPE,
-                REGISTRATION_PASSWORD_PARAM_KEY to password
+                TYPE_PARAM_KEY to type,
+                passwordKey to password
             )
         )) {
             is Response.Success -> Response.Success(Unit)
             is Response.Error -> result
         }
-
-
-    private suspend fun processPasswordStageL(password: String): Response<Unit> {
-        val result = uiaDataSource.performUIAStage(
-            mapOf(
-                TYPE_PARAM_KEY to LOGIN_PASSWORD_TYPE,
-                LOGIN_PASSWORD_PARAM_KEY to password
-            ), password
-        )
-        return when (result) {
-            is Response.Success -> Response.Success(Unit)
-            is Response.Error -> result
-        }
     }
-
+    
     private suspend fun processDirectPasswordStage(password: String): Response<Unit> {
         val result = createResult {
             MatrixInstanceProvider.matrix.authenticationService().getLoginWizard().login(
diff --git a/auth/src/main/java/org/futo/circles/auth/feature/uia/stages/password/PasswordFragment.kt b/auth/src/main/java/org/futo/circles/auth/feature/uia/stages/password/PasswordFragment.kt
index a021c6bfc..d446f5aba 100644
--- a/auth/src/main/java/org/futo/circles/auth/feature/uia/stages/password/PasswordFragment.kt
+++ b/auth/src/main/java/org/futo/circles/auth/feature/uia/stages/password/PasswordFragment.kt
@@ -47,7 +47,7 @@ class PasswordFragment : ParentBackPressOwnerFragment(R.layout.fragment_password
                 setText(getString(if (isSignupMode()) R.string.set_password else R.string.log_in))
                 setOnClickListener {
                     startLoading(btnLogin)
-                    viewModel.loginWithPassword(tilPassword.getText())
+                    viewModel.processPasswordStage(tilPassword.getText())
                 }
             }
             tilPassword.editText?.apply {
diff --git a/auth/src/main/java/org/futo/circles/auth/feature/uia/stages/password/PasswordViewModel.kt b/auth/src/main/java/org/futo/circles/auth/feature/uia/stages/password/PasswordViewModel.kt
index 6db8e20dd..015471921 100644
--- a/auth/src/main/java/org/futo/circles/auth/feature/uia/stages/password/PasswordViewModel.kt
+++ b/auth/src/main/java/org/futo/circles/auth/feature/uia/stages/password/PasswordViewModel.kt
@@ -15,7 +15,7 @@ class PasswordViewModel @Inject constructor(
     private var isPasswordWarningConfirmed: Boolean = false
     val passwordResponseLiveData = SingleEventLiveData<Response<Unit>>()
 
-    fun loginWithPassword(password: String) {
+    fun processPasswordStage(password: String) {
         launchBg {
             passwordResponseLiveData.postValue(passwordDataSource.processPasswordStage(password))
         }
-- 
GitLab