Browse Source

Auth : fix restore session when there is no network.

pull/3109/head
ganfra 3 months ago
parent
commit
e9c995f96d
  1. 11
      libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClientFactory.kt
  2. 13
      libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/auth/RustMatrixAuthenticationService.kt

11
libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClientFactory.kt

@ -16,7 +16,6 @@
package io.element.android.libraries.matrix.impl package io.element.android.libraries.matrix.impl
import io.element.android.appconfig.AuthenticationConfig
import io.element.android.libraries.core.coroutine.CoroutineDispatchers import io.element.android.libraries.core.coroutine.CoroutineDispatchers
import io.element.android.libraries.di.CacheDirectory import io.element.android.libraries.di.CacheDirectory
import io.element.android.libraries.matrix.impl.analytics.UtdTracker import io.element.android.libraries.matrix.impl.analytics.UtdTracker
@ -48,7 +47,7 @@ class RustMatrixClientFactory @Inject constructor(
) { ) {
suspend fun create(sessionData: SessionData): RustMatrixClient = withContext(coroutineDispatchers.io) { suspend fun create(sessionData: SessionData): RustMatrixClient = withContext(coroutineDispatchers.io) {
val client = getBaseClientBuilder(sessionData.sessionPath, sessionData.passphrase) val client = getBaseClientBuilder(sessionData.sessionPath, sessionData.passphrase)
.serverNameOrHomeserverUrl(sessionData.homeserverUrl) .homeserverUrl(sessionData.homeserverUrl)
.username(sessionData.userId) .username(sessionData.userId)
.use { it.build() } .use { it.build() }
@ -70,11 +69,15 @@ class RustMatrixClientFactory @Inject constructor(
) )
} }
internal fun getBaseClientBuilder(sessionPath: String, passphrase: String?): ClientBuilder { internal fun getBaseClientBuilder(
sessionPath: String,
passphrase: String?,
slidingSyncProxy: String? = null,
): ClientBuilder {
return ClientBuilder() return ClientBuilder()
.sessionPath(sessionPath) .sessionPath(sessionPath)
.passphrase(passphrase) .passphrase(passphrase)
.slidingSyncProxy(AuthenticationConfig.SLIDING_SYNC_PROXY_URL) .slidingSyncProxy(slidingSyncProxy)
.userAgent(userAgentProvider.provide()) .userAgent(userAgentProvider.provide())
.addRootCertificates(userCertificatesProvider.provides()) .addRootCertificates(userCertificatesProvider.provides())
.autoEnableBackups(true) .autoEnableBackups(true)

13
libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/auth/RustMatrixAuthenticationService.kt

@ -17,6 +17,7 @@
package io.element.android.libraries.matrix.impl.auth package io.element.android.libraries.matrix.impl.auth
import com.squareup.anvil.annotations.ContributesBinding import com.squareup.anvil.annotations.ContributesBinding
import io.element.android.appconfig.AuthenticationConfig
import io.element.android.libraries.core.coroutine.CoroutineDispatchers import io.element.android.libraries.core.coroutine.CoroutineDispatchers
import io.element.android.libraries.core.extensions.mapFailure import io.element.android.libraries.core.extensions.mapFailure
import io.element.android.libraries.di.AppScope import io.element.android.libraries.di.AppScope
@ -205,7 +206,11 @@ class RustMatrixAuthenticationService @Inject constructor(
override suspend fun loginWithQrCode(qrCodeData: MatrixQrCodeLoginData, progress: (QrCodeLoginStep) -> Unit) = override suspend fun loginWithQrCode(qrCodeData: MatrixQrCodeLoginData, progress: (QrCodeLoginStep) -> Unit) =
withContext(coroutineDispatchers.io) { withContext(coroutineDispatchers.io) {
runCatching { runCatching {
val client = rustMatrixClientFactory.getBaseClientBuilder(sessionPath, pendingPassphrase) val client = rustMatrixClientFactory.getBaseClientBuilder(
sessionPath = sessionPath,
passphrase = pendingPassphrase,
slidingSyncProxy = AuthenticationConfig.SLIDING_SYNC_PROXY_URL,
)
.buildWithQrCode( .buildWithQrCode(
qrCodeData = (qrCodeData as SdkQrCodeLoginData).rustQrCodeData, qrCodeData = (qrCodeData as SdkQrCodeLoginData).rustQrCodeData,
oidcConfiguration = oidcConfigurationProvider.get(), oidcConfiguration = oidcConfigurationProvider.get(),
@ -242,7 +247,11 @@ class RustMatrixAuthenticationService @Inject constructor(
} }
private fun getBaseClientBuilder() = rustMatrixClientFactory private fun getBaseClientBuilder() = rustMatrixClientFactory
.getBaseClientBuilder(sessionPath, pendingPassphrase) .getBaseClientBuilder(
sessionPath = sessionPath,
passphrase = pendingPassphrase,
slidingSyncProxy = AuthenticationConfig.SLIDING_SYNC_PROXY_URL,
)
.requiresSlidingSync() .requiresSlidingSync()
private fun clear() { private fun clear() {

Loading…
Cancel
Save