feat(security&privacy) : expose methods from sdk to update alias and rename alias to canonicalAlias
This commit is contained in:
parent
e56fe4fb38
commit
70f39c4f7c
6 changed files with 50 additions and 8 deletions
|
|
@ -150,7 +150,7 @@ class RoomDetailsPresenter @Inject constructor(
|
||||||
return RoomDetailsState(
|
return RoomDetailsState(
|
||||||
roomId = room.roomId,
|
roomId = room.roomId,
|
||||||
roomName = roomName,
|
roomName = roomName,
|
||||||
roomAlias = room.alias,
|
roomAlias = room.canonicalAlias,
|
||||||
roomAvatarUrl = roomAvatar,
|
roomAvatarUrl = roomAvatar,
|
||||||
roomTopic = topicState,
|
roomTopic = topicState,
|
||||||
memberCount = room.joinedMemberCount,
|
memberCount = room.joinedMemberCount,
|
||||||
|
|
|
||||||
|
|
@ -72,10 +72,10 @@ class EditRoomAddressPresenter @Inject constructor(
|
||||||
|
|
||||||
private fun MatrixRoom.firstAliasMatching(serverName: String): RoomAlias? {
|
private fun MatrixRoom.firstAliasMatching(serverName: String): RoomAlias? {
|
||||||
// Check if the canonical alias matches the homeserver
|
// Check if the canonical alias matches the homeserver
|
||||||
if (this.alias?.matchesServer(serverName) == true) {
|
if (canonicalAlias?.matchesServer(serverName) == true) {
|
||||||
return this.alias
|
return canonicalAlias
|
||||||
}
|
}
|
||||||
return this.alternativeAliases.firstOrNull { it.value.contains(serverName) }
|
return alternativeAliases.firstOrNull { it.value.contains(serverName) }
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun RoomAlias.roomAddress(): String {
|
private fun RoomAlias.roomAddress(): String {
|
||||||
|
|
|
||||||
|
|
@ -45,7 +45,7 @@ interface MatrixRoom : Closeable {
|
||||||
val sessionId: SessionId
|
val sessionId: SessionId
|
||||||
val roomId: RoomId
|
val roomId: RoomId
|
||||||
val displayName: String
|
val displayName: String
|
||||||
val alias: RoomAlias?
|
val canonicalAlias: RoomAlias?
|
||||||
val alternativeAliases: List<RoomAlias>
|
val alternativeAliases: List<RoomAlias>
|
||||||
val topic: String?
|
val topic: String?
|
||||||
val avatarUrl: String?
|
val avatarUrl: String?
|
||||||
|
|
@ -432,4 +432,22 @@ interface MatrixRoom : Closeable {
|
||||||
* directory and can be found using it.
|
* directory and can be found using it.
|
||||||
*/
|
*/
|
||||||
suspend fun getRoomVisibility(): Result<RoomVisibility>
|
suspend fun getRoomVisibility(): Result<RoomVisibility>
|
||||||
|
/**
|
||||||
|
* Publish a new room alias for this room in the room directory.
|
||||||
|
*
|
||||||
|
* Returns:
|
||||||
|
* - `true` if the room alias didn't exist and it's now published.
|
||||||
|
* - `false` if the room alias was already present so it couldn't be
|
||||||
|
* published.
|
||||||
|
*/
|
||||||
|
suspend fun publishRoomAliasInRoomDirectory(roomAlias: RoomAlias): Result<Boolean>
|
||||||
|
/**
|
||||||
|
* Remove an existing room alias for this room in the room directory.
|
||||||
|
*
|
||||||
|
* Returns:
|
||||||
|
* - `true` if the room alias was present and it's now removed from the
|
||||||
|
* room directory.
|
||||||
|
* - `false` if the room alias didn't exist so it couldn't be removed.
|
||||||
|
*/
|
||||||
|
suspend fun removeRoomAliasFromRoomDirectory(roomAlias: RoomAlias): Result<Boolean>
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,7 @@ fun MatrixRoom.matches(roomIdOrAlias: RoomIdOrAlias): Boolean {
|
||||||
roomIdOrAlias.roomId == roomId
|
roomIdOrAlias.roomId == roomId
|
||||||
}
|
}
|
||||||
is RoomIdOrAlias.Alias -> {
|
is RoomIdOrAlias.Alias -> {
|
||||||
roomIdOrAlias.roomAlias == alias || roomIdOrAlias.roomAlias in alternativeAliases
|
roomIdOrAlias.roomAlias == canonicalAlias || roomIdOrAlias.roomAlias in alternativeAliases
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -280,7 +280,7 @@ class RustMatrixRoom(
|
||||||
override val isEncrypted: Boolean
|
override val isEncrypted: Boolean
|
||||||
get() = runCatching { innerRoom.isEncrypted() }.getOrDefault(false)
|
get() = runCatching { innerRoom.isEncrypted() }.getOrDefault(false)
|
||||||
|
|
||||||
override val alias: RoomAlias?
|
override val canonicalAlias: RoomAlias?
|
||||||
get() = runCatching { innerRoom.canonicalAlias()?.let(::RoomAlias) }.getOrDefault(null)
|
get() = runCatching { innerRoom.canonicalAlias()?.let(::RoomAlias) }.getOrDefault(null)
|
||||||
|
|
||||||
override val alternativeAliases: List<RoomAlias>
|
override val alternativeAliases: List<RoomAlias>
|
||||||
|
|
@ -785,6 +785,20 @@ class RustMatrixRoom(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override suspend fun publishRoomAliasInRoomDirectory(roomAlias: RoomAlias): Result<Boolean> = withContext(roomDispatcher) {
|
||||||
|
runCatching {
|
||||||
|
innerRoom.publishRoomAliasInRoomDirectory(roomAlias.value)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override suspend fun removeRoomAliasFromRoomDirectory(roomAlias: RoomAlias): Result<Boolean> = withContext(roomDispatcher) {
|
||||||
|
runCatching {
|
||||||
|
innerRoom.removeRoomAliasFromRoomDirectory(roomAlias.value)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
override suspend fun updateRoomVisibility(roomVisibility: RoomVisibility): Result<Unit> = withContext(roomDispatcher) {
|
override suspend fun updateRoomVisibility(roomVisibility: RoomVisibility): Result<Unit> = withContext(roomDispatcher) {
|
||||||
runCatching {
|
runCatching {
|
||||||
innerRoom.updateRoomVisibility(roomVisibility.map())
|
innerRoom.updateRoomVisibility(roomVisibility.map())
|
||||||
|
|
|
||||||
|
|
@ -68,7 +68,7 @@ class FakeMatrixRoom(
|
||||||
override val topic: String? = null,
|
override val topic: String? = null,
|
||||||
override val avatarUrl: String? = null,
|
override val avatarUrl: String? = null,
|
||||||
override var isEncrypted: Boolean = false,
|
override var isEncrypted: Boolean = false,
|
||||||
override val alias: RoomAlias? = null,
|
override val canonicalAlias: RoomAlias? = null,
|
||||||
override val alternativeAliases: List<RoomAlias> = emptyList(),
|
override val alternativeAliases: List<RoomAlias> = emptyList(),
|
||||||
override val isPublic: Boolean = true,
|
override val isPublic: Boolean = true,
|
||||||
override val isSpace: Boolean = false,
|
override val isSpace: Boolean = false,
|
||||||
|
|
@ -151,6 +151,8 @@ class FakeMatrixRoom(
|
||||||
private val updateRoomVisibilityResult: (RoomVisibility) -> Result<Unit> = { lambdaError() },
|
private val updateRoomVisibilityResult: (RoomVisibility) -> Result<Unit> = { lambdaError() },
|
||||||
private val updateRoomHistoryVisibilityResult: (RoomHistoryVisibility) -> Result<Unit> = { lambdaError() },
|
private val updateRoomHistoryVisibilityResult: (RoomHistoryVisibility) -> Result<Unit> = { lambdaError() },
|
||||||
private val roomVisibilityResult: () -> Result<RoomVisibility> = { lambdaError() },
|
private val roomVisibilityResult: () -> Result<RoomVisibility> = { lambdaError() },
|
||||||
|
private val publishRoomAliasInRoomDirectoryResult: (RoomAlias) -> Result<Boolean> = { lambdaError() },
|
||||||
|
private val removeRoomAliasFromRoomDirectoryResult: (RoomAlias) -> Result<Boolean> = { lambdaError() },
|
||||||
) : MatrixRoom {
|
) : MatrixRoom {
|
||||||
private val _roomInfoFlow: MutableSharedFlow<MatrixRoomInfo> = MutableSharedFlow(replay = 1)
|
private val _roomInfoFlow: MutableSharedFlow<MatrixRoomInfo> = MutableSharedFlow(replay = 1)
|
||||||
override val roomInfoFlow: Flow<MatrixRoomInfo> = _roomInfoFlow
|
override val roomInfoFlow: Flow<MatrixRoomInfo> = _roomInfoFlow
|
||||||
|
|
@ -604,6 +606,14 @@ class FakeMatrixRoom(
|
||||||
roomVisibilityResult()
|
roomVisibilityResult()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override suspend fun publishRoomAliasInRoomDirectory(roomAlias: RoomAlias): Result<Boolean> = simulateLongTask {
|
||||||
|
publishRoomAliasInRoomDirectoryResult(roomAlias)
|
||||||
|
}
|
||||||
|
|
||||||
|
override suspend fun removeRoomAliasFromRoomDirectory(roomAlias: RoomAlias): Result<Boolean> = simulateLongTask {
|
||||||
|
removeRoomAliasFromRoomDirectoryResult(roomAlias)
|
||||||
|
}
|
||||||
|
|
||||||
fun givenRoomMembersState(state: MatrixRoomMembersState) {
|
fun givenRoomMembersState(state: MatrixRoomMembersState) {
|
||||||
membersStateFlow.value = state
|
membersStateFlow.value = state
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue