Skip to content
Snippets Groups Projects
Commit c9179b3e authored by Taras's avatar Taras
Browse files

Move logic from old login data source

parent e754d764
No related branches found
No related tags found
No related merge requests found
package org.futo.circles.feature.log_in package org.futo.circles.feature.log_in
import android.content.Context
import android.net.Uri
import org.futo.circles.R
import org.futo.circles.core.utils.HomeServerUtils import org.futo.circles.core.utils.HomeServerUtils
import org.futo.circles.core.matrix.pass_phrase.restore.RestorePassPhraseDataSource
import org.futo.circles.core.matrix.room.CoreSpacesTreeBuilder
import org.futo.circles.extensions.Response
import org.futo.circles.extensions.createResult import org.futo.circles.extensions.createResult
import org.futo.circles.feature.log_in.stages.LoginStagesDataSource
import org.futo.circles.provider.MatrixInstanceProvider import org.futo.circles.provider.MatrixInstanceProvider
import org.futo.circles.provider.MatrixSessionProvider
import org.matrix.android.sdk.api.auth.data.HomeServerConnectionConfig
import org.matrix.android.sdk.api.session.Session
class LoginDataSource( class LoginDataSource(
private val context: Context, private val loginStagesDataSource: LoginStagesDataSource
private val restorePassPhraseDataSource: RestorePassPhraseDataSource,
private val coreSpacesTreeBuilder: CoreSpacesTreeBuilder
) { ) {
val passPhraseLoadingLiveData = restorePassPhraseDataSource.loadingLiveData private val authService by lazy { MatrixInstanceProvider.matrix.authenticationService() }
suspend fun logIn(name: String, password: String): Response<Session> = createResult { suspend fun startLogin(
val session = MatrixInstanceProvider.matrix.authenticationService().directAuthentication( name: String
homeServerConnectionConfig = buildHomeServerConfig(name), ) = createResult {
matrixId = name, val homeServerUrl = HomeServerUtils.getHomeServerUrlFromDomain(domain)
password = password, authService.cancelPendingLoginOrRegistration()
initialDeviceName = context.getString( authService.getLoginFlow(buildHomeServerConfig(homeServerUrl))
R.string.initial_device_name, signUpDataSource.startSignUpStages(
context.getString(R.string.app_name) it.flowResult.missingStages,
) name,
password,
homeServerUrl,
isSubscription,
subscriptionReceipt
) )
MatrixSessionProvider.awaitForSessionSync(session)
}
suspend fun restoreKeys(password: String) = createResult {
restorePassPhraseDataSource.restoreKeysWithPassPhase(password)
}
suspend fun getEncryptionAlgorithm(): String? {
val algorithmResult = createResult { restorePassPhraseDataSource.getEncryptionAlgorithm() }
return when(algorithmResult){
is Response.Error -> null
is Response.Success -> algorithmResult.data
}
}
suspend fun createSpacesTree() = createResult {
coreSpacesTreeBuilder.createCoreSpacesTree()
}
fun isCirclesTreeCreated() = coreSpacesTreeBuilder.isCirclesHierarchyCreated()
private fun buildHomeServerConfig(userName: String): HomeServerConnectionConfig {
val url = HomeServerUtils.getHomeServerUrlFromUserName(userName)
return HomeServerConnectionConfig
.Builder()
.withHomeServerUri(Uri.parse(url))
.build()
} }
} }
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment