From 225a6e00e614b541bbd9160a9bb133fa76e69c31 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 4 Feb 2020 12:10:51 +0100 Subject: [PATCH 1/5] Add doc and reorder --- .../room/model/RoomHistoryVisibility.kt | 23 +++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/session/room/model/RoomHistoryVisibility.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/session/room/model/RoomHistoryVisibility.kt index a066aaadd5..b0e4e2d8e5 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/session/room/model/RoomHistoryVisibility.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/session/room/model/RoomHistoryVisibility.kt @@ -18,9 +18,28 @@ package im.vector.matrix.android.api.session.room.model import com.squareup.moshi.Json +/** + * Ref: https://matrix.org/docs/spec/client_server/latest#room-history-visibility + */ enum class RoomHistoryVisibility { + /** + * All events while this is the m.room.history_visibility value may be shared by any + * participating homeserver with anyone, regardless of whether they have ever joined the room. + */ + @Json(name = "world_readable") WORLD_READABLE, + /** + * Previous events are always accessible to newly joined members. All events in the + * room are accessible, even those sent when the member was not a part of the room. + */ @Json(name = "shared") SHARED, + /** + * Events are accessible to newly joined members from the point they were invited onwards. + * Events stop being accessible when the member's state changes to something other than invite or join. + */ @Json(name = "invited") INVITED, - @Json(name = "joined") JOINED, - @Json(name = "world_readable") WORLD_READABLE + /** + * Events are accessible to newly joined members from the point they joined the room onwards. + * Events stop being accessible when the member's state changes to something other than join. + */ + @Json(name = "joined") JOINED } From 3e9b2e4a067e4c00308d31772d62a52c8717683f Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 4 Feb 2020 13:55:38 +0100 Subject: [PATCH 2/5] Use the correct enableEncryption() method --- .../matrix/android/common/CryptoTestHelper.kt | 2 +- .../session/room/crypto/RoomCryptoService.kt | 7 +++- .../api/session/room/state/StateService.kt | 5 --- .../internal/session/room/DefaultRoom.kt | 36 +++++++++++++++---- .../internal/session/room/RoomFactory.kt | 10 ++++-- .../session/room/state/DefaultStateService.kt | 22 +----------- .../settings/RoomSettingsViewModel.kt | 3 +- 7 files changed, 47 insertions(+), 38 deletions(-) diff --git a/matrix-sdk-android/src/androidTest/java/im/vector/matrix/android/common/CryptoTestHelper.kt b/matrix-sdk-android/src/androidTest/java/im/vector/matrix/android/common/CryptoTestHelper.kt index 59db3b287c..d778bffcb6 100644 --- a/matrix-sdk-android/src/androidTest/java/im/vector/matrix/android/common/CryptoTestHelper.kt +++ b/matrix-sdk-android/src/androidTest/java/im/vector/matrix/android/common/CryptoTestHelper.kt @@ -74,7 +74,7 @@ class CryptoTestHelper(val mTestHelper: CommonTestHelper) { val room = aliceSession.getRoom(roomId!!)!! val lock2 = CountDownLatch(1) - room.enableEncryptionWithAlgorithm(MXCRYPTO_ALGORITHM_MEGOLM, object : TestMatrixCallback(lock2) {}) + room.enableEncryption(callback = TestMatrixCallback(lock2)) mTestHelper.await(lock2) return CryptoTestData(aliceSession, roomId!!) diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/session/room/crypto/RoomCryptoService.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/session/room/crypto/RoomCryptoService.kt index 124b2aef17..920bea1b6b 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/session/room/crypto/RoomCryptoService.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/session/room/crypto/RoomCryptoService.kt @@ -17,6 +17,7 @@ package im.vector.matrix.android.api.session.room.crypto import im.vector.matrix.android.api.MatrixCallback +import im.vector.matrix.android.internal.crypto.MXCRYPTO_ALGORITHM_MEGOLM interface RoomCryptoService { @@ -26,5 +27,9 @@ interface RoomCryptoService { fun shouldEncryptForInvitedMembers(): Boolean - fun enableEncryptionWithAlgorithm(algorithm: String, callback: MatrixCallback) + /** + * Enable encryption of the room + */ + fun enableEncryption(algorithm: String = MXCRYPTO_ALGORITHM_MEGOLM, + callback: MatrixCallback) } diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/session/room/state/StateService.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/session/room/state/StateService.kt index 55bf816b7a..09c77e9860 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/session/room/state/StateService.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/session/room/state/StateService.kt @@ -28,11 +28,6 @@ interface StateService { */ fun updateTopic(topic: String, callback: MatrixCallback) - /** - * Enable encryption of the room - */ - fun enableEncryption(algorithm: String, callback: MatrixCallback) - fun getStateEvent(eventType: String): Event? fun getStateEventLive(eventType: String): LiveData> diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/DefaultRoom.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/DefaultRoom.kt index fc95dd4bb4..833469909f 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/DefaultRoom.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/DefaultRoom.kt @@ -21,6 +21,7 @@ import androidx.lifecycle.Transformations import com.zhuinden.monarchy.Monarchy import im.vector.matrix.android.api.MatrixCallback import im.vector.matrix.android.api.session.crypto.CryptoService +import im.vector.matrix.android.api.session.events.model.EventType import im.vector.matrix.android.api.session.room.Room import im.vector.matrix.android.api.session.room.members.MembershipService import im.vector.matrix.android.api.session.room.model.RoomSummary @@ -35,10 +36,15 @@ import im.vector.matrix.android.api.session.room.timeline.TimelineService import im.vector.matrix.android.api.session.room.typing.TypingService import im.vector.matrix.android.api.util.Optional import im.vector.matrix.android.api.util.toOptional +import im.vector.matrix.android.internal.crypto.MXCRYPTO_ALGORITHM_MEGOLM import im.vector.matrix.android.internal.database.mapper.RoomSummaryMapper import im.vector.matrix.android.internal.database.model.RoomSummaryEntity import im.vector.matrix.android.internal.database.model.RoomSummaryEntityFields import im.vector.matrix.android.internal.database.query.where +import im.vector.matrix.android.internal.session.room.state.SendStateTask +import im.vector.matrix.android.internal.task.TaskExecutor +import im.vector.matrix.android.internal.task.configureWith +import java.security.InvalidParameterException import javax.inject.Inject internal class DefaultRoom @Inject constructor(override val roomId: String, @@ -54,7 +60,9 @@ internal class DefaultRoom @Inject constructor(override val roomId: String, private val cryptoService: CryptoService, private val relationService: RelationService, private val roomMembersService: MembershipService, - private val roomPushRuleService: RoomPushRuleService) : + private val roomPushRuleService: RoomPushRuleService, + private val taskExecutor: TaskExecutor, + private val sendStateTask: SendStateTask) : Room, TimelineService by timelineService, SendService by sendService, @@ -96,11 +104,27 @@ internal class DefaultRoom @Inject constructor(override val roomId: String, return cryptoService.shouldEncryptForInvitedMembers(roomId) } - override fun enableEncryptionWithAlgorithm(algorithm: String, callback: MatrixCallback) { - if (isEncrypted()) { - callback.onFailure(IllegalStateException("Encryption is already enabled for this room")) - } else { - stateService.enableEncryption(algorithm, callback) + override fun enableEncryption(algorithm: String, callback: MatrixCallback) { + when { + isEncrypted() -> { + callback.onFailure(IllegalStateException("Encryption is already enabled for this room")) + } + algorithm != MXCRYPTO_ALGORITHM_MEGOLM -> { + callback.onFailure(InvalidParameterException("Only MXCRYPTO_ALGORITHM_MEGOLM algorithm is supported")) + } + else -> { + val params = SendStateTask.Params(roomId, + EventType.STATE_ROOM_ENCRYPTION, + mapOf( + "algorithm" to algorithm + )) + + sendStateTask + .configureWith(params) { + this.callback = callback + } + .executeBy(taskExecutor) + } } } } diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/RoomFactory.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/RoomFactory.kt index b24bb73d56..b9c3169704 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/RoomFactory.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/RoomFactory.kt @@ -29,8 +29,10 @@ import im.vector.matrix.android.internal.session.room.relation.DefaultRelationSe import im.vector.matrix.android.internal.session.room.reporting.DefaultReportingService import im.vector.matrix.android.internal.session.room.send.DefaultSendService import im.vector.matrix.android.internal.session.room.state.DefaultStateService +import im.vector.matrix.android.internal.session.room.state.SendStateTask import im.vector.matrix.android.internal.session.room.timeline.DefaultTimelineService import im.vector.matrix.android.internal.session.room.typing.DefaultTypingService +import im.vector.matrix.android.internal.task.TaskExecutor import javax.inject.Inject internal interface RoomFactory { @@ -50,7 +52,9 @@ internal class DefaultRoomFactory @Inject constructor(private val monarchy: Mona private val typingServiceFactory: DefaultTypingService.Factory, private val relationServiceFactory: DefaultRelationService.Factory, private val membershipServiceFactory: DefaultMembershipService.Factory, - private val roomPushRuleServiceFactory: DefaultRoomPushRuleService.Factory) : + private val roomPushRuleServiceFactory: DefaultRoomPushRuleService.Factory, + private val taskExecutor: TaskExecutor, + private val sendStateTask: SendStateTask) : RoomFactory { override fun create(roomId: String): Room { @@ -68,7 +72,9 @@ internal class DefaultRoomFactory @Inject constructor(private val monarchy: Mona cryptoService, relationServiceFactory.create(roomId), membershipServiceFactory.create(roomId), - roomPushRuleServiceFactory.create(roomId) + roomPushRuleServiceFactory.create(roomId), + taskExecutor, + sendStateTask ) } } diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/state/DefaultStateService.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/state/DefaultStateService.kt index eb7208ea0d..eb16f00cc1 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/state/DefaultStateService.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/state/DefaultStateService.kt @@ -27,7 +27,6 @@ import im.vector.matrix.android.api.session.events.model.EventType import im.vector.matrix.android.api.session.room.state.StateService import im.vector.matrix.android.api.util.Optional import im.vector.matrix.android.api.util.toOptional -import im.vector.matrix.android.internal.crypto.MXCRYPTO_ALGORITHM_MEGOLM import im.vector.matrix.android.internal.database.mapper.asDomain import im.vector.matrix.android.internal.database.model.EventEntity import im.vector.matrix.android.internal.database.query.descending @@ -36,7 +35,6 @@ import im.vector.matrix.android.internal.database.query.where import im.vector.matrix.android.internal.task.TaskExecutor import im.vector.matrix.android.internal.task.configureWith import io.realm.Realm -import java.security.InvalidParameterException internal class DefaultStateService @AssistedInject constructor(@Assisted private val roomId: String, private val monarchy: Monarchy, @@ -57,7 +55,7 @@ internal class DefaultStateService @AssistedInject constructor(@Assisted private override fun getStateEventLive(eventType: String): LiveData> { val liveData = monarchy.findAllMappedWithChanges( - { realm -> EventEntity.where(realm, roomId, eventType).descending() }, + { realm -> EventEntity.where(realm, roomId, eventType).descending() }, { it.asDomain() } ) return Transformations.map(liveData) { results -> @@ -78,22 +76,4 @@ internal class DefaultStateService @AssistedInject constructor(@Assisted private } .executeBy(taskExecutor) } - - override fun enableEncryption(algorithm: String, callback: MatrixCallback) { - if (algorithm != MXCRYPTO_ALGORITHM_MEGOLM) { - callback.onFailure(InvalidParameterException("Only MXCRYPTO_ALGORITHM_MEGOLM algorithm is supported")) - } else { - val params = SendStateTask.Params(roomId, - EventType.STATE_ROOM_ENCRYPTION, - mapOf( - "algorithm" to algorithm - )) - - sendStateTask - .configureWith(params) { - this.callback = callback - } - .executeBy(taskExecutor) - } - } } diff --git a/vector/src/main/java/im/vector/riotx/features/roomprofile/settings/RoomSettingsViewModel.kt b/vector/src/main/java/im/vector/riotx/features/roomprofile/settings/RoomSettingsViewModel.kt index 4194fb6e5c..58bd9f228a 100644 --- a/vector/src/main/java/im/vector/riotx/features/roomprofile/settings/RoomSettingsViewModel.kt +++ b/vector/src/main/java/im/vector/riotx/features/roomprofile/settings/RoomSettingsViewModel.kt @@ -23,7 +23,6 @@ import com.squareup.inject.assisted.Assisted import com.squareup.inject.assisted.AssistedInject import im.vector.matrix.android.api.MatrixCallback import im.vector.matrix.android.api.session.Session -import im.vector.matrix.android.internal.crypto.MXCRYPTO_ALGORITHM_MEGOLM import im.vector.matrix.rx.rx import im.vector.matrix.rx.unwrap import im.vector.riotx.core.platform.VectorViewModel @@ -71,7 +70,7 @@ class RoomSettingsViewModel @AssistedInject constructor(@Assisted initialState: copy(isLoading = true) } - room.enableEncryption(MXCRYPTO_ALGORITHM_MEGOLM, object : MatrixCallback { + room.enableEncryption(callback = object : MatrixCallback { override fun onFailure(failure: Throwable) { setState { copy(isLoading = false) From bd033866a84fa5b1a29d132e73bb67694ef4de34 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 4 Feb 2020 14:41:32 +0100 Subject: [PATCH 3/5] Encrypt for invited users by default, if the room state allows it (#803) --- CHANGES.md | 1 + .../vector/matrix/android/internal/crypto/MXCryptoConfig.kt | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index b8c2e202b9..19f4f88b76 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -12,6 +12,7 @@ Other changes: Bugfix 🐛: - Ask for permission before opening the camera (#934) + - Encrypt for invited users by default, if the room state allows it (#803) Translations 🗣: - 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/internal/crypto/MXCryptoConfig.kt index b052b9b756..d79d628ec9 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/internal/crypto/MXCryptoConfig.kt @@ -21,7 +21,7 @@ package im.vector.matrix.android.internal.crypto */ data class MXCryptoConfig( // Tell whether the encryption of the event content is enabled for the invited members. - // By default, we encrypt messages only for the joined members. - // The encryption for the invited members will be blocked if the history visibility is "joined". - var enableEncryptionForInvitedMembers: Boolean = false + // SDK clients can disable this by settings it to false. + // Note that the encryption for the invited members will be blocked if the history visibility is "joined". + var enableEncryptionForInvitedMembers: Boolean = true ) From 6bff951c72d2c1ff2aa97cfd463cbfcb5c26e161 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 4 Feb 2020 15:31:47 +0100 Subject: [PATCH 4/5] 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 From f7d511df38ee22e2454fbf6dd98df38e079030aa Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 4 Feb 2020 17:48:17 +0100 Subject: [PATCH 5/5] Ganfra's review --- .../im/vector/matrix/android/api/Matrix.kt | 6 +---- .../internal/MatrixConfigurationHolder.kt | 27 ------------------- .../android/internal/di/MatrixComponent.kt | 9 ++++--- .../internal/network/UserAgentHolder.kt | 8 +++--- .../android/internal/session/SessionModule.kt | 6 ++--- 5 files changed, 14 insertions(+), 42 deletions(-) delete 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 6256c69479..22ac0324cf 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 @@ -24,7 +24,6 @@ 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 @@ -54,20 +53,17 @@ 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 init { Monarchy.init(context) - DaggerMatrixComponent.factory().create(context).inject(this) + DaggerMatrixComponent.factory().create(context, matrixConfiguration).inject(this) if (context.applicationContext !is Configuration.Provider) { WorkManager.initialize(context, Configuration.Builder().build()) } ProcessLifecycleOwner.get().lifecycle.addObserver(backgroundDetectionObserver) - matrixConfigurationHolder.matrixConfiguration = matrixConfiguration.copy() - userAgentHolder.setApplicationFlavor(matrixConfiguration.applicationFlavor) } fun getUserAgent() = userAgentHolder.userAgent 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 deleted file mode 100644 index 794ed558f5..0000000000 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/MatrixConfigurationHolder.kt +++ /dev/null @@ -1,27 +0,0 @@ -/* - * 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/di/MatrixComponent.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/di/MatrixComponent.kt index c49fec5bb9..782ab1c609 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 @@ -22,8 +22,8 @@ import com.squareup.moshi.Moshi import dagger.BindsInstance import dagger.Component import im.vector.matrix.android.api.Matrix +import im.vector.matrix.android.api.MatrixConfiguration 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 @@ -47,10 +47,10 @@ internal interface MatrixComponent { fun authenticationService(): AuthenticationService - fun matrixConfigurationHolder(): MatrixConfigurationHolder - fun context(): Context + fun matrixConfiguration(): MatrixConfiguration + fun resources(): Resources fun olmManager(): OlmManager @@ -69,6 +69,7 @@ internal interface MatrixComponent { @Component.Factory interface Factory { - fun create(@BindsInstance context: Context): MatrixComponent + fun create(@BindsInstance context: Context, + @BindsInstance matrixConfiguration: MatrixConfiguration): MatrixComponent } } diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/network/UserAgentHolder.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/network/UserAgentHolder.kt index 89da02b275..0f3da0c834 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/network/UserAgentHolder.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/network/UserAgentHolder.kt @@ -18,18 +18,20 @@ package im.vector.matrix.android.internal.network import android.content.Context import im.vector.matrix.android.BuildConfig +import im.vector.matrix.android.api.MatrixConfiguration import im.vector.matrix.android.internal.di.MatrixScope import timber.log.Timber import javax.inject.Inject @MatrixScope -internal class UserAgentHolder @Inject constructor(private val context: Context) { +internal class UserAgentHolder @Inject constructor(private val context: Context, + matrixConfiguration: MatrixConfiguration) { var userAgent: String = "" private set init { - setApplicationFlavor("NoFlavor") + setApplicationFlavor(matrixConfiguration.applicationFlavor) } /** @@ -38,7 +40,7 @@ internal class UserAgentHolder @Inject constructor(private val context: Context) * * @param flavorDescription the flavor description */ - fun setApplicationFlavor(flavorDescription: String) { + private fun setApplicationFlavor(flavorDescription: String) { var appName = "" var appVersion = "" 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 069011f12d..81b4ba6e06 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 @@ -23,6 +23,7 @@ import dagger.Lazy import dagger.Module import dagger.Provides import dagger.multibindings.IntoSet +import im.vector.matrix.android.api.MatrixConfiguration 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 @@ -32,7 +33,6 @@ 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 @@ -192,8 +192,8 @@ internal abstract class SessionModule { @JvmStatic @Provides @SessionScope - fun providesMxCryptoConfig(matrixConfigurationHolder: MatrixConfigurationHolder): MXCryptoConfig { - return matrixConfigurationHolder.matrixConfiguration?.cryptoConfig ?: MXCryptoConfig() + fun providesMxCryptoConfig(matrixConfiguration: MatrixConfiguration): MXCryptoConfig { + return matrixConfiguration.cryptoConfig } }