summary refs log tree commit diff
diff options
context:
space:
mode:
authorDavid Teller <d.o.teller+github@gmail.com>2021-01-25 18:02:35 +0100
committerDavid Teller <d.o.teller+github@gmail.com>2021-01-28 12:31:07 +0100
commitde7f049527c64470a16b2633862a1f1b8f0da9c2 (patch)
tree1aeba9a13bd3d023e368c00fb88268f800564bf7
parentFIXUP: Documenting /_synapse/admin/v1/rooms/<room_id>/context/<event_id> (diff)
downloadsynapse-de7f049527c64470a16b2633862a1f1b8f0da9c2.tar.xz
FIXUP: Don't filter events at all for admin/v1/rooms/.../context/...
-rw-r--r--synapse/handlers/room.py10
-rw-r--r--synapse/visibility.py25
2 files changed, 10 insertions, 25 deletions
diff --git a/synapse/handlers/room.py b/synapse/handlers/room.py
index 15e90fdd4e..b02056dc63 100644
--- a/synapse/handlers/room.py
+++ b/synapse/handlers/room.py
@@ -52,7 +52,7 @@ from synapse.types import (
     create_requester,
 )
 from synapse.util import stringutils
-from synapse.util.async_helpers import Linearizer
+from synapse.util.async_helpers import Linearizer, maybe_awaitable
 from synapse.util.caches.response_cache import ResponseCache
 from synapse.util.stringutils import parse_and_validate_server_name
 from synapse.visibility import filter_events_for_client
@@ -1034,12 +1034,10 @@ class RoomContextHandler:
         is_peeking = user.to_string() not in users
 
         def filter_evts(events):
+            if use_admin_priviledge:
+                return maybe_awaitable(events)
             return filter_events_for_client(
-                self.storage,
-                user.to_string(),
-                events,
-                is_peeking=is_peeking,
-                use_admin_priviledge=use_admin_priviledge,
+                self.storage, user.to_string(), events, is_peeking=is_peeking
             )
 
         event = await self.store.get_event(
diff --git a/synapse/visibility.py b/synapse/visibility.py
index 80c304562d..2109e2f37f 100644
--- a/synapse/visibility.py
+++ b/synapse/visibility.py
@@ -53,7 +53,6 @@ async def filter_events_for_client(
     is_peeking=False,
     always_include_ids=frozenset(),
     filter_send_to_client=True,
-    use_admin_priviledge=False,
 ):
     """
     Check which events a user is allowed to see. If the user can see the event but its
@@ -72,9 +71,6 @@ async def filter_events_for_client(
         filter_send_to_client (bool): Whether we're checking an event that's going to be
             sent to a client. This might not always be the case since this function can
             also be called to check whether a user can see the state at a given point.
-        use_admin_priviledge: if `True`, return all events, regardless
-            of whether `user` has access to them. To be used **ONLY**
-            from the admin API.
 
     Returns:
         list[synapse.events.EventBase]
@@ -83,23 +79,16 @@ async def filter_events_for_client(
     # to clients.
     events = [e for e in events if not e.internal_metadata.is_soft_failed()]
 
-    types = None
-    if use_admin_priviledge:
-        # Administrators can access all events.
-        types = ((EventTypes.RoomHistoryVisibility, ""), (EventTypes.Member, None))
-    else:
-        types = ((EventTypes.RoomHistoryVisibility, ""), (EventTypes.Member, user_id))
+    types = ((EventTypes.RoomHistoryVisibility, ""), (EventTypes.Member, user_id))
 
     event_id_to_state = await storage.state.get_state_for_events(
         frozenset(e.event_id for e in events),
         state_filter=StateFilter.from_types(types),
     )
 
-    ignore_dict_content = None
-    if not use_admin_priviledge:
-        ignore_dict_content = await storage.main.get_global_account_data_by_type_for_user(
-            AccountDataTypes.IGNORED_USER_LIST, user_id
-        )
+    ignore_dict_content = await storage.main.get_global_account_data_by_type_for_user(
+        AccountDataTypes.IGNORED_USER_LIST, user_id
+    )
 
     ignore_list = frozenset()
     if ignore_dict_content:
@@ -195,12 +184,10 @@ async def filter_events_for_client(
             if old_priority < new_priority:
                 visibility = prev_visibility
 
-        membership = None
-        if use_admin_priviledge:
-            membership = Membership.JOIN
         # likewise, if the event is the user's own membership event, use
         # the 'most joined' membership
-        elif event.type == EventTypes.Member and event.state_key == user_id:
+        membership = None
+        if event.type == EventTypes.Member and event.state_key == user_id:
             membership = event.content.get("membership", None)
             if membership not in MEMBERSHIP_PRIORITY:
                 membership = "leave"