From 40832d7815ab3d77bb226e72217be2ccf69967a0 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 30 Aug 2024 18:42:00 +0200 Subject: [PATCH] Introduce SessionPathsFactory. --- .../auth/RustMatrixAuthenticationService.kt | 15 +++----- .../matrix/impl/paths/SessionPathsFactory.kt | 35 +++++++++++++++++++ .../android/samples/minimal/MainActivity.kt | 4 +-- 3 files changed, 41 insertions(+), 13 deletions(-) create mode 100644 libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/paths/SessionPathsFactory.kt diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/auth/RustMatrixAuthenticationService.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/auth/RustMatrixAuthenticationService.kt index c373172b31..5459afea6c 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/auth/RustMatrixAuthenticationService.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/auth/RustMatrixAuthenticationService.kt @@ -21,7 +21,6 @@ import io.element.android.appconfig.AuthenticationConfig import io.element.android.libraries.core.coroutine.CoroutineDispatchers import io.element.android.libraries.core.extensions.mapFailure import io.element.android.libraries.di.AppScope -import io.element.android.libraries.di.CacheDirectory import io.element.android.libraries.di.SingleIn import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.auth.MatrixAuthenticationService @@ -32,13 +31,14 @@ import io.element.android.libraries.matrix.api.auth.qrlogin.QrCodeLoginStep import io.element.android.libraries.matrix.api.core.SessionId import io.element.android.libraries.matrix.impl.ClientBuilderSlidingSync import io.element.android.libraries.matrix.impl.RustMatrixClientFactory -import io.element.android.libraries.matrix.impl.paths.SessionPaths import io.element.android.libraries.matrix.impl.auth.qrlogin.QrErrorMapper import io.element.android.libraries.matrix.impl.auth.qrlogin.SdkQrCodeLoginData import io.element.android.libraries.matrix.impl.auth.qrlogin.toStep import io.element.android.libraries.matrix.impl.exception.mapClientException import io.element.android.libraries.matrix.impl.keys.PassphraseGenerator import io.element.android.libraries.matrix.impl.mapper.toSessionData +import io.element.android.libraries.matrix.impl.paths.SessionPaths +import io.element.android.libraries.matrix.impl.paths.SessionPathsFactory import io.element.android.libraries.sessionstorage.api.LoggedInState import io.element.android.libraries.sessionstorage.api.LoginType import io.element.android.libraries.sessionstorage.api.SessionStore @@ -55,15 +55,12 @@ import org.matrix.rustcomponents.sdk.QrLoginProgressListener import org.matrix.rustcomponents.sdk.use import timber.log.Timber import uniffi.matrix_sdk.OidcAuthorizationData -import java.io.File -import java.util.UUID import javax.inject.Inject @ContributesBinding(AppScope::class) @SingleIn(AppScope::class) class RustMatrixAuthenticationService @Inject constructor( - private val baseDirectory: File, - @CacheDirectory private val cacheDirectory: File, + private val sessionPathsFactory: SessionPathsFactory, private val coroutineDispatchers: CoroutineDispatchers, private val sessionStore: SessionStore, private val rustMatrixClientFactory: RustMatrixClientFactory, @@ -82,11 +79,7 @@ class RustMatrixAuthenticationService @Inject constructor( private fun rotateSessionPath(): SessionPaths { sessionPaths?.deleteRecursively() - val subPath = UUID.randomUUID().toString() - return SessionPaths( - fileDirectory = File(baseDirectory, subPath), - cacheDirectory = File(cacheDirectory, subPath), - ) + return sessionPathsFactory.create() .also { sessionPaths = it } } diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/paths/SessionPathsFactory.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/paths/SessionPathsFactory.kt new file mode 100644 index 0000000000..b901ba91d1 --- /dev/null +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/paths/SessionPathsFactory.kt @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.libraries.matrix.impl.paths + +import io.element.android.libraries.di.CacheDirectory +import java.io.File +import java.util.UUID +import javax.inject.Inject + +class SessionPathsFactory @Inject constructor( + private val baseDirectory: File, + @CacheDirectory private val cacheDirectory: File, +) { + fun create(): SessionPaths { + val subPath = UUID.randomUUID().toString() + return SessionPaths( + fileDirectory = File(baseDirectory, subPath), + cacheDirectory = File(cacheDirectory, subPath), + ) + } +} diff --git a/samples/minimal/src/main/kotlin/io/element/android/samples/minimal/MainActivity.kt b/samples/minimal/src/main/kotlin/io/element/android/samples/minimal/MainActivity.kt index 68273a088e..c1eb3487f2 100644 --- a/samples/minimal/src/main/kotlin/io/element/android/samples/minimal/MainActivity.kt +++ b/samples/minimal/src/main/kotlin/io/element/android/samples/minimal/MainActivity.kt @@ -32,6 +32,7 @@ import io.element.android.libraries.matrix.impl.RustMatrixClientFactory import io.element.android.libraries.matrix.impl.analytics.UtdTracker import io.element.android.libraries.matrix.impl.auth.OidcConfigurationProvider import io.element.android.libraries.matrix.impl.auth.RustMatrixAuthenticationService +import io.element.android.libraries.matrix.impl.paths.SessionPathsFactory import io.element.android.libraries.network.useragent.SimpleUserAgentProvider import io.element.android.libraries.preferences.test.InMemoryAppPreferencesStore import io.element.android.libraries.sessionstorage.api.LoggedInState @@ -49,8 +50,7 @@ class MainActivity : ComponentActivity() { val userCertificatesProvider = NoOpUserCertificatesProvider() val proxyProvider = NoOpProxyProvider() RustMatrixAuthenticationService( - baseDirectory = baseDirectory, - cacheDirectory = applicationContext.cacheDir, + sessionPathsFactory = SessionPathsFactory(baseDirectory, applicationContext.cacheDir), coroutineDispatchers = Singleton.coroutineDispatchers, sessionStore = sessionStore, rustMatrixClientFactory = RustMatrixClientFactory(