diff --git a/synapse/handlers/room.py b/synapse/handlers/room.py index 15e90fdd4..b02056dc6 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 80c304562..2109e2f37 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"