From 6bff951c72d2c1ff2aa97cfd463cbfcb5c26e161 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 4 Feb 2020 15:31:47 +0100 Subject: [PATCH] Keep MXCryptoConfig, but do a correct usage of it --- .../im/vector/matrix/android/api/Matrix.kt | 7 ++++- .../crypto/MXCryptoConfig.kt | 2 +- .../internal/MatrixConfigurationHolder.kt | 27 +++++++++++++++++++ .../android/internal/crypto/CryptoModule.kt | 7 ----- .../internal/crypto/DefaultCryptoService.kt | 10 ++++--- .../android/internal/di/MatrixComponent.kt | 3 +++ .../android/internal/session/SessionModule.kt | 19 ++++++++++++- 7 files changed, 61 insertions(+), 14 deletions(-) rename matrix-sdk-android/src/main/java/im/vector/matrix/android/{internal => api}/crypto/MXCryptoConfig.kt (95%) create mode 100644 matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/MatrixConfigurationHolder.kt diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/Matrix.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/Matrix.kt index 4c97c20a57..6256c69479 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/Matrix.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/Matrix.kt @@ -23,6 +23,8 @@ import androidx.work.WorkManager import com.zhuinden.monarchy.Monarchy import im.vector.matrix.android.BuildConfig import im.vector.matrix.android.api.auth.AuthenticationService +import im.vector.matrix.android.api.crypto.MXCryptoConfig +import im.vector.matrix.android.internal.MatrixConfigurationHolder import im.vector.matrix.android.internal.SessionManager import im.vector.matrix.android.internal.crypto.attachments.ElementToDecrypt import im.vector.matrix.android.internal.crypto.attachments.MXEncryptedAttachments @@ -35,7 +37,8 @@ import java.util.concurrent.atomic.AtomicBoolean import javax.inject.Inject data class MatrixConfiguration( - val applicationFlavor: String = "Default-application-flavor" + val applicationFlavor: String = "Default-application-flavor", + val cryptoConfig: MXCryptoConfig = MXCryptoConfig() ) { interface Provider { @@ -51,6 +54,7 @@ class Matrix private constructor(context: Context, matrixConfiguration: MatrixCo @Inject internal lateinit var authenticationService: AuthenticationService @Inject internal lateinit var userAgentHolder: UserAgentHolder + @Inject internal lateinit var matrixConfigurationHolder: MatrixConfigurationHolder @Inject internal lateinit var backgroundDetectionObserver: BackgroundDetectionObserver @Inject internal lateinit var olmManager: OlmManager @Inject internal lateinit var sessionManager: SessionManager @@ -62,6 +66,7 @@ class Matrix private constructor(context: Context, matrixConfiguration: MatrixCo WorkManager.initialize(context, Configuration.Builder().build()) } ProcessLifecycleOwner.get().lifecycle.addObserver(backgroundDetectionObserver) + matrixConfigurationHolder.matrixConfiguration = matrixConfiguration.copy() userAgentHolder.setApplicationFlavor(matrixConfiguration.applicationFlavor) } diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/MXCryptoConfig.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/crypto/MXCryptoConfig.kt similarity index 95% rename from matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/MXCryptoConfig.kt rename to matrix-sdk-android/src/main/java/im/vector/matrix/android/api/crypto/MXCryptoConfig.kt index d79d628ec9..dc08023d99 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/MXCryptoConfig.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/crypto/MXCryptoConfig.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package im.vector.matrix.android.internal.crypto +package im.vector.matrix.android.api.crypto /** * Class to define the parameters used to customize or configure the end-to-end crypto. diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/MatrixConfigurationHolder.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/MatrixConfigurationHolder.kt new file mode 100644 index 0000000000..794ed558f5 --- /dev/null +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/MatrixConfigurationHolder.kt @@ -0,0 +1,27 @@ +/* + * Copyright 2020 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 + * + * http://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 im.vector.matrix.android.internal + +import im.vector.matrix.android.api.MatrixConfiguration +import im.vector.matrix.android.internal.di.MatrixScope +import javax.inject.Inject + +@MatrixScope +internal class MatrixConfigurationHolder @Inject constructor() { + + var matrixConfiguration: MatrixConfiguration? = null +} diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/CryptoModule.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/CryptoModule.kt index 5ffa4b2166..35ad49f42f 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/CryptoModule.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/CryptoModule.kt @@ -159,13 +159,6 @@ internal abstract class CryptoModule { fun providesRoomKeysAPI(retrofit: Retrofit): RoomKeysApi { return retrofit.create(RoomKeysApi::class.java) } - - @JvmStatic - @Provides - @SessionScope - fun providesCryptoConfig(): MXCryptoConfig { - return MXCryptoConfig() - } } @Binds diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/DefaultCryptoService.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/DefaultCryptoService.kt index 7c4cc7460f..5d100a5ccb 100755 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/DefaultCryptoService.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/DefaultCryptoService.kt @@ -27,6 +27,7 @@ import com.zhuinden.monarchy.Monarchy import dagger.Lazy import im.vector.matrix.android.api.MatrixCallback import im.vector.matrix.android.api.auth.data.Credentials +import im.vector.matrix.android.api.crypto.MXCryptoConfig import im.vector.matrix.android.api.failure.Failure import im.vector.matrix.android.api.listeners.ProgressListener import im.vector.matrix.android.api.session.crypto.CryptoService @@ -116,7 +117,7 @@ internal class DefaultCryptoService @Inject constructor( // Olm device private val olmDevice: MXOlmDevice, // Set of parameters used to configure/customize the end-to-end crypto. - private val cryptoConfig: MXCryptoConfig = MXCryptoConfig(), + private val mxCryptoConfig: MXCryptoConfig, // Device list manager private val deviceListManager: DeviceListManager, // The key backup service. @@ -399,6 +400,7 @@ internal class DefaultCryptoService @Inject constructor( null } } + override fun getCryptoDeviceInfo(userId: String): List { return cryptoStore.getUserDevices(userId)?.map { it.value } ?: emptyList() } @@ -545,8 +547,8 @@ internal class DefaultCryptoService @Inject constructor( return cryptoStore.getUserDevices(userId)?.values?.toMutableList() ?: ArrayList() } - fun isEncryptionEnabledForInvitedUser(): Boolean { - return cryptoConfig.enableEncryptionForInvitedMembers + private fun isEncryptionEnabledForInvitedUser(): Boolean { + return mxCryptoConfig.enableEncryptionForInvitedMembers } override fun getEncryptionAlgorithm(roomId: String): String? { @@ -779,7 +781,7 @@ internal class DefaultCryptoService @Inject constructor( deviceListManager.startTrackingDeviceList(listOf(userId)) } else if (membership == Membership.INVITE && shouldEncryptForInvitedMembers(roomId) - && cryptoConfig.enableEncryptionForInvitedMembers) { + && isEncryptionEnabledForInvitedUser()) { // track the deviceList for this invited user. // Caution: there's a big edge case here in that federated servers do not // know what other servers are in the room at the time they've been invited. diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/di/MatrixComponent.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/di/MatrixComponent.kt index e8fa659d8d..c49fec5bb9 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/di/MatrixComponent.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/di/MatrixComponent.kt @@ -23,6 +23,7 @@ import dagger.BindsInstance import dagger.Component import im.vector.matrix.android.api.Matrix import im.vector.matrix.android.api.auth.AuthenticationService +import im.vector.matrix.android.internal.MatrixConfigurationHolder import im.vector.matrix.android.internal.SessionManager import im.vector.matrix.android.internal.auth.AuthModule import im.vector.matrix.android.internal.auth.SessionParamsStore @@ -46,6 +47,8 @@ internal interface MatrixComponent { fun authenticationService(): AuthenticationService + fun matrixConfigurationHolder(): MatrixConfigurationHolder + fun context(): Context fun resources(): Resources diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/SessionModule.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/SessionModule.kt index 739f128993..069011f12d 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/SessionModule.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/SessionModule.kt @@ -27,14 +27,24 @@ import im.vector.matrix.android.api.auth.data.Credentials import im.vector.matrix.android.api.auth.data.HomeServerConnectionConfig import im.vector.matrix.android.api.auth.data.SessionParams import im.vector.matrix.android.api.auth.data.sessionId +import im.vector.matrix.android.api.crypto.MXCryptoConfig import im.vector.matrix.android.api.session.InitialSyncProgressService import im.vector.matrix.android.api.session.Session import im.vector.matrix.android.api.session.homeserver.HomeServerCapabilitiesService import im.vector.matrix.android.api.session.securestorage.SecureStorageService +import im.vector.matrix.android.internal.MatrixConfigurationHolder import im.vector.matrix.android.internal.crypto.verification.VerificationMessageLiveObserver import im.vector.matrix.android.internal.database.LiveEntityObserver import im.vector.matrix.android.internal.database.SessionRealmConfigurationFactory -import im.vector.matrix.android.internal.di.* +import im.vector.matrix.android.internal.di.Authenticated +import im.vector.matrix.android.internal.di.DeviceId +import im.vector.matrix.android.internal.di.SessionCacheDirectory +import im.vector.matrix.android.internal.di.SessionDatabase +import im.vector.matrix.android.internal.di.SessionFilesDirectory +import im.vector.matrix.android.internal.di.SessionId +import im.vector.matrix.android.internal.di.Unauthenticated +import im.vector.matrix.android.internal.di.UserId +import im.vector.matrix.android.internal.di.UserMd5 import im.vector.matrix.android.internal.network.AccessTokenInterceptor import im.vector.matrix.android.internal.network.RetrofitFactory import im.vector.matrix.android.internal.network.interceptors.CurlLoggingInterceptor @@ -178,6 +188,13 @@ internal abstract class SessionModule { fun providesEventBus(): EventBus { return EventBus.builder().build() } + + @JvmStatic + @Provides + @SessionScope + fun providesMxCryptoConfig(matrixConfigurationHolder: MatrixConfigurationHolder): MXCryptoConfig { + return matrixConfigurationHolder.matrixConfiguration?.cryptoConfig ?: MXCryptoConfig() + } } @Binds