From a65e8640feefb66cc941525813267f0116e5cebc Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Thu, 13 Mar 2025 15:01:15 -0600 Subject: [PATCH] Allow admins to see soft failed events --- synapse/visibility.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/synapse/visibility.py b/synapse/visibility.py index dc7b6e4065..d064950eb5 100644 --- a/synapse/visibility.py +++ b/synapse/visibility.py @@ -48,7 +48,7 @@ from synapse.logging.opentracing import trace from synapse.storage.controllers import StorageControllers from synapse.storage.databases.main import DataStore from synapse.synapse_rust.events import event_visible_to_server -from synapse.types import RetentionPolicy, StateMap, StrCollection, get_domain_from_id +from synapse.types import RetentionPolicy, StateMap, StrCollection, get_domain_from_id, UserID from synapse.types.state import StateFilter from synapse.util import Clock @@ -106,9 +106,12 @@ async def filter_events_for_client( of `user_id` at each event. """ # Filter out events that have been soft failed so that we don't relay them - # to clients. + # to clients, unless they're a server admin. events_before_filtering = events - events = [e for e in events if not e.internal_metadata.is_soft_failed()] + if filter_send_to_client and await storage.main.is_server_admin(UserID.from_string(user_id)): + events = events_before_filtering + else: + events = [e for e in events if not e.internal_metadata.is_soft_failed()] if len(events_before_filtering) != len(events): if filtered_event_logger.isEnabledFor(logging.DEBUG): filtered_event_logger.debug(