diff options
author | Mathieu Velten <mathieuv@matrix.org> | 2023-06-02 15:13:50 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-06-02 13:13:50 +0000 |
commit | e0f2429d137c74059f5b7f151297e28dbfd82d48 (patch) | |
tree | 9469b4b33035123189b169479c653c32e13739f0 /synapse | |
parent | Log when events are (unexpectedly) filtered out of responses in tests (#14213) (diff) | |
download | synapse-e0f2429d137c74059f5b7f151297e28dbfd82d48.tar.xz |
Add a catch-all * to the supported relation types when redacting (#15705)
This is an update to MSC3912 implementation
Diffstat (limited to 'synapse')
-rw-r--r-- | synapse/handlers/relations.py | 16 | ||||
-rw-r--r-- | synapse/storage/databases/main/relations.py | 30 |
2 files changed, 41 insertions, 5 deletions
diff --git a/synapse/handlers/relations.py b/synapse/handlers/relations.py index 4824635162..db97f7aede 100644 --- a/synapse/handlers/relations.py +++ b/synapse/handlers/relations.py @@ -205,16 +205,22 @@ class RelationsHandler: event_id: The event IDs to look and redact relations of. initial_redaction_event: The redaction for the event referred to by event_id. - relation_types: The types of relations to look for. + relation_types: The types of relations to look for. If "*" is in the list, + all related events will be redacted regardless of the type. Raises: ShadowBanError if the requester is shadow-banned """ - related_event_ids = ( - await self._main_store.get_all_relations_for_event_with_types( - event_id, relation_types + if "*" in relation_types: + related_event_ids = await self._main_store.get_all_relations_for_event( + event_id + ) + else: + related_event_ids = ( + await self._main_store.get_all_relations_for_event_with_types( + event_id, relation_types + ) ) - ) for related_event_id in related_event_ids: try: diff --git a/synapse/storage/databases/main/relations.py b/synapse/storage/databases/main/relations.py index 4a6c6c724d..96908f14ba 100644 --- a/synapse/storage/databases/main/relations.py +++ b/synapse/storage/databases/main/relations.py @@ -365,6 +365,36 @@ class RelationsWorkerStore(SQLBaseStore): func=get_all_relation_ids_for_event_with_types_txn, ) + async def get_all_relations_for_event( + self, + event_id: str, + ) -> List[str]: + """Get the event IDs of all events that have a relation to the given event. + + Args: + event_id: The event for which to look for related events. + + Returns: + A list of the IDs of the events that relate to the given event. + """ + + def get_all_relation_ids_for_event_txn( + txn: LoggingTransaction, + ) -> List[str]: + rows = self.db_pool.simple_select_list_txn( + txn=txn, + table="event_relations", + keyvalues={"relates_to_id": event_id}, + retcols=["event_id"], + ) + + return [row["event_id"] for row in rows] + + return await self.db_pool.runInteraction( + desc="get_all_relation_ids_for_event", + func=get_all_relation_ids_for_event_txn, + ) + async def event_includes_relation(self, event_id: str) -> bool: """Check if the given event relates to another event. |