diff options
author | Andrew Morgan <1342360+anoadragon453@users.noreply.github.com> | 2019-07-18 14:41:42 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-07-18 14:41:42 +0100 |
commit | b2a382efdb0cf7b68e194070b616f10732fa0f36 (patch) | |
tree | c2723952bb6368de4f884ec94b3361ff51ce5c31 /synapse/events | |
parent | Convert synapse.federation.transport.server to async (#5689) (diff) | |
download | synapse-b2a382efdb0cf7b68e194070b616f10732fa0f36.tar.xz |
Remove the ability to query relations when the original event was redacted. (#5629)
Fixes #5594 Forbid viewing relations on an event once it has been redacted.
Diffstat (limited to 'synapse/events')
-rw-r--r-- | synapse/events/__init__.py | 11 | ||||
-rw-r--r-- | synapse/events/utils.py | 16 |
2 files changed, 23 insertions, 4 deletions
diff --git a/synapse/events/__init__.py b/synapse/events/__init__.py index d3de70e671..88ed6d764f 100644 --- a/synapse/events/__init__.py +++ b/synapse/events/__init__.py @@ -104,6 +104,17 @@ class _EventInternalMetadata(object): """ return getattr(self, "proactively_send", True) + def is_redacted(self): + """Whether the event has been redacted. + + This is used for efficiently checking whether an event has been + marked as redacted without needing to make another database call. + + Returns: + bool + """ + return getattr(self, "redacted", False) + def _event_dict_property(key): # We want to be able to use hasattr with the event dict properties. diff --git a/synapse/events/utils.py b/synapse/events/utils.py index 987de5cab7..9487a886f5 100644 --- a/synapse/events/utils.py +++ b/synapse/events/utils.py @@ -52,10 +52,15 @@ def prune_event(event): from . import event_type_from_format_version - return event_type_from_format_version(event.format_version)( + pruned_event = event_type_from_format_version(event.format_version)( pruned_event_dict, event.internal_metadata.get_dict() ) + # Mark the event as redacted + pruned_event.internal_metadata.redacted = True + + return pruned_event + def prune_event_dict(event_dict): """Redacts the event_dict in the same way as `prune_event`, except it @@ -360,9 +365,12 @@ class EventClientSerializer(object): event_id = event.event_id serialized_event = serialize_event(event, time_now, **kwargs) - # If MSC1849 is enabled then we need to look if thre are any relations - # we need to bundle in with the event - if self.experimental_msc1849_support_enabled and bundle_aggregations: + # If MSC1849 is enabled then we need to look if there are any relations + # we need to bundle in with the event. + # Do not bundle relations if the event has been redacted + if not event.internal_metadata.is_redacted() and ( + self.experimental_msc1849_support_enabled and bundle_aggregations + ): annotations = yield self.store.get_aggregation_groups_for_event(event_id) references = yield self.store.get_relations_for_event( event_id, RelationTypes.REFERENCE, direction="f" |