From 19d49a3c0b7ead64d4f9d7e4c29f488ef35bad59 Mon Sep 17 00:00:00 2001 From: ganfra Date: Thu, 23 Jan 2025 14:18:17 +0100 Subject: [PATCH] feat(security&privacy) : expose more methods from sdk --- .../libraries/matrix/api/room/MatrixRoom.kt | 11 +++++++++++ .../libraries/matrix/impl/room/RustMatrixRoom.kt | 16 ++++++++++++++-- .../libraries/matrix/test/room/FakeMatrixRoom.kt | 15 ++++++++++++--- 3 files changed, 37 insertions(+), 5 deletions(-) diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/MatrixRoom.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/MatrixRoom.kt index d67ee5c676..9e921140ab 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/MatrixRoom.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/MatrixRoom.kt @@ -25,6 +25,7 @@ import io.element.android.libraries.matrix.api.media.VideoInfo import io.element.android.libraries.matrix.api.poll.PollKind import io.element.android.libraries.matrix.api.room.draft.ComposerDraft import io.element.android.libraries.matrix.api.room.history.RoomHistoryVisibility +import io.element.android.libraries.matrix.api.room.join.JoinRule import io.element.android.libraries.matrix.api.room.knock.KnockRequest import io.element.android.libraries.matrix.api.room.location.AssetType import io.element.android.libraries.matrix.api.room.powerlevels.MatrixRoomPowerLevels @@ -450,4 +451,14 @@ interface MatrixRoom : Closeable { * - `false` if the room alias didn't exist so it couldn't be removed. */ suspend fun removeRoomAliasFromRoomDirectory(roomAlias: RoomAlias): Result + + /** + * Enable End-to-end encryption in this room. + */ + suspend fun enableEncryption(): Result + + /** + * Update the join rule for this room. + */ + suspend fun updateJoinRule(joinRule: JoinRule): Result } diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustMatrixRoom.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustMatrixRoom.kt index dd75b3f617..58a76a91e8 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustMatrixRoom.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustMatrixRoom.kt @@ -39,6 +39,7 @@ import io.element.android.libraries.matrix.api.room.RoomMembershipObserver import io.element.android.libraries.matrix.api.room.StateEventType import io.element.android.libraries.matrix.api.room.draft.ComposerDraft import io.element.android.libraries.matrix.api.room.history.RoomHistoryVisibility +import io.element.android.libraries.matrix.api.room.join.JoinRule import io.element.android.libraries.matrix.api.room.knock.KnockRequest import io.element.android.libraries.matrix.api.room.location.AssetType import io.element.android.libraries.matrix.api.room.powerlevels.MatrixRoomPowerLevels @@ -54,6 +55,7 @@ import io.element.android.libraries.matrix.impl.core.RustSendHandle import io.element.android.libraries.matrix.impl.mapper.map import io.element.android.libraries.matrix.impl.room.draft.into import io.element.android.libraries.matrix.impl.room.history.map +import io.element.android.libraries.matrix.impl.room.join.map import io.element.android.libraries.matrix.impl.room.knock.RustKnockRequest import io.element.android.libraries.matrix.impl.room.member.RoomMemberListFetcher import io.element.android.libraries.matrix.impl.room.member.RoomMemberMapper @@ -797,8 +799,6 @@ class RustMatrixRoom( } } - - override suspend fun updateRoomVisibility(roomVisibility: RoomVisibility): Result = withContext(roomDispatcher) { runCatching { innerRoom.updateRoomVisibility(roomVisibility.map()) @@ -817,6 +817,18 @@ class RustMatrixRoom( } } + override suspend fun enableEncryption(): Result = withContext(roomDispatcher) { + runCatching { + innerRoom.enableEncryption() + } + } + + override suspend fun updateJoinRule(joinRule: JoinRule): Result = withContext(roomDispatcher) { + runCatching { + innerRoom.updateJoinRules(joinRule.map()) + } + } + private fun createTimeline( timeline: InnerTimeline, mode: Timeline.Mode, diff --git a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/FakeMatrixRoom.kt b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/FakeMatrixRoom.kt index daaea64e59..11dc695bc0 100644 --- a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/FakeMatrixRoom.kt +++ b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/FakeMatrixRoom.kt @@ -34,6 +34,7 @@ import io.element.android.libraries.matrix.api.room.RoomMember import io.element.android.libraries.matrix.api.room.StateEventType import io.element.android.libraries.matrix.api.room.draft.ComposerDraft import io.element.android.libraries.matrix.api.room.history.RoomHistoryVisibility +import io.element.android.libraries.matrix.api.room.join.JoinRule import io.element.android.libraries.matrix.api.room.knock.KnockRequest import io.element.android.libraries.matrix.api.room.location.AssetType import io.element.android.libraries.matrix.api.room.powerlevels.MatrixRoomPowerLevels @@ -153,6 +154,8 @@ class FakeMatrixRoom( private val roomVisibilityResult: () -> Result = { lambdaError() }, private val publishRoomAliasInRoomDirectoryResult: (RoomAlias) -> Result = { lambdaError() }, private val removeRoomAliasFromRoomDirectoryResult: (RoomAlias) -> Result = { lambdaError() }, + private val enableEncryptionResult: () -> Result = { lambdaError() }, + private val updateJoinRuleResult: (JoinRule) -> Result = { lambdaError() }, ) : MatrixRoom { private val _roomInfoFlow: MutableSharedFlow = MutableSharedFlow(replay = 1) override val roomInfoFlow: Flow = _roomInfoFlow @@ -203,9 +206,11 @@ class FakeMatrixRoom( return Result.success(Unit) } - fun enableEncryption() { - isEncrypted = true - emitSyncUpdate() + override suspend fun enableEncryption(): Result = simulateLongTask { + enableEncryptionResult().onSuccess { + isEncrypted = true + emitSyncUpdate() + } } private val _syncUpdateFlow = MutableStateFlow(0L) @@ -614,6 +619,10 @@ class FakeMatrixRoom( removeRoomAliasFromRoomDirectoryResult(roomAlias) } + override suspend fun updateJoinRule(joinRule: JoinRule): Result = simulateLongTask { + updateJoinRuleResult(joinRule) + } + fun givenRoomMembersState(state: MatrixRoomMembersState) { membersStateFlow.value = state }