diff options
author | Dirk Klimpel <5740567+dklimpel@users.noreply.github.com> | 2021-11-18 18:43:49 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-11-18 17:43:49 +0000 |
commit | 81b18fe5c060a0532ab64b9575d54b84ddbad278 (patch) | |
tree | e6051a4e82f30fa12a3b93fb18083f05d7726d6c /synapse/storage/databases/main | |
parent | Add/Unerase annotations to Module API (#11341) (diff) | |
download | synapse-81b18fe5c060a0532ab64b9575d54b84ddbad278.tar.xz |
Add dedicated admin API for blocking a room (#11324)
Diffstat (limited to 'synapse/storage/databases/main')
-rw-r--r-- | synapse/storage/databases/main/room.py | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/synapse/storage/databases/main/room.py b/synapse/storage/databases/main/room.py index 17b398bb69..7d694d852d 100644 --- a/synapse/storage/databases/main/room.py +++ b/synapse/storage/databases/main/room.py @@ -397,6 +397,20 @@ class RoomWorkerStore(SQLBaseStore): desc="is_room_blocked", ) + async def room_is_blocked_by(self, room_id: str) -> Optional[str]: + """ + Function to retrieve user who has blocked the room. + user_id is non-nullable + It returns None if the room is not blocked. + """ + return await self.db_pool.simple_select_one_onecol( + table="blocked_rooms", + keyvalues={"room_id": room_id}, + retcol="user_id", + allow_none=True, + desc="room_is_blocked_by", + ) + async def get_rooms_paginate( self, start: int, @@ -1775,3 +1789,21 @@ class RoomStore(RoomBackgroundUpdateStore, RoomWorkerStore, SearchStore): self.is_room_blocked, (room_id,), ) + + async def unblock_room(self, room_id: str) -> None: + """Remove the room from blocking list. + + Args: + room_id: Room to unblock + """ + await self.db_pool.simple_delete( + table="blocked_rooms", + keyvalues={"room_id": room_id}, + desc="unblock_room", + ) + await self.db_pool.runInteraction( + "block_room_invalidation", + self._invalidate_cache_and_stream, + self.is_room_blocked, + (room_id,), + ) |