diff --git a/synapse/events/utils.py b/synapse/events/utils.py index dda8c58e2f..611a6a9a0f 100644 --- a/synapse/events/utils.py +++ b/synapse/events/utils.py @@ -440,6 +440,11 @@ class FilteredEvent: ) return cls(event=event, membership=None) + @classmethod + def admin_override(cls, event: "EventBase") -> "FilteredEvent": + """Wrap an event that bypasses visibility filtering due to admin privileges.""" + return cls(event=event, membership=None) + @attr.s(slots=True, frozen=True, auto_attribs=True) class SerializeEventConfig: diff --git a/synapse/handlers/pagination.py b/synapse/handlers/pagination.py index e424905c72..6d296dc29d 100644 --- a/synapse/handlers/pagination.py +++ b/synapse/handlers/pagination.py @@ -692,7 +692,7 @@ class PaginationHandler: is_peeking=(member_event_id is None), ) else: - client_events = [FilteredEvent(event=e, membership=None) for e in events] + client_events = [FilteredEvent.admin_override(e) for e in events] client_events_result: list[FilteredEvent] = client_events diff --git a/synapse/handlers/room.py b/synapse/handlers/room.py index 629e08f713..f7a144b91b 100644 --- a/synapse/handlers/room.py +++ b/synapse/handlers/room.py @@ -1918,7 +1918,7 @@ class RoomContextHandler: async def filter_evts(events: list[EventBase]) -> list[FilteredEvent]: if use_admin_priviledge: - return [FilteredEvent(event=e, membership=None) for e in events] + return [FilteredEvent.admin_override(e) for e in events] return await filter_and_transform_events_for_client( self._storage_controllers, user.to_string(), diff --git a/synapse/rest/admin/events.py b/synapse/rest/admin/events.py index 31673ca061..1c311b0471 100644 --- a/synapse/rest/admin/events.py +++ b/synapse/rest/admin/events.py @@ -67,7 +67,7 @@ class EventRestServlet(RestServlet): ) res = { "event": await self._event_serializer.serialize_event( - FilteredEvent(event=event, membership=None), + FilteredEvent.admin_override(event), self._clock.time_msec(), config=config, )