summary refs log tree commit diff
path: root/synapse/events
diff options
context:
space:
mode:
authorPatrick Cloke <clokep@users.noreply.github.com>2023-04-13 09:47:07 -0400
committerGitHub <noreply@github.com>2023-04-13 13:47:07 +0000
commit2503126d5245586b89c76e5f15f27c0a07774a45 (patch)
treeee7a73d442e06dc9aff2597e97e8cf809c8a5ed0 /synapse/events
parentOnly load the SSO redirect servlet if SSO is enabled. (#15421) (diff)
downloadsynapse-2503126d5245586b89c76e5f15f27c0a07774a45.tar.xz
Implement MSC2174: move redacts to a content property. (#15395)
This moves `redacts` from being a top-level property to
a `content` property in a new room version.

MSC2176 (which was previously implemented) states to not
`redact` this property.
Diffstat (limited to 'synapse/events')
-rw-r--r--synapse/events/__init__.py8
-rw-r--r--synapse/events/builder.py4
2 files changed, 10 insertions, 2 deletions
diff --git a/synapse/events/__init__.py b/synapse/events/__init__.py
index d475fe7ae5..4501518cf0 100644
--- a/synapse/events/__init__.py
+++ b/synapse/events/__init__.py
@@ -326,7 +326,6 @@ class EventBase(metaclass=abc.ABCMeta):
     hashes: DictProperty[Dict[str, str]] = DictProperty("hashes")
     origin: DictProperty[str] = DictProperty("origin")
     origin_server_ts: DictProperty[int] = DictProperty("origin_server_ts")
-    redacts: DefaultDictProperty[Optional[str]] = DefaultDictProperty("redacts", None)
     room_id: DictProperty[str] = DictProperty("room_id")
     sender: DictProperty[str] = DictProperty("sender")
     # TODO state_key should be Optional[str]. This is generally asserted in Synapse
@@ -346,6 +345,13 @@ class EventBase(metaclass=abc.ABCMeta):
     def membership(self) -> str:
         return self.content["membership"]
 
+    @property
+    def redacts(self) -> Optional[str]:
+        """MSC2176 moved the redacts field into the content."""
+        if self.room_version.msc2176_redaction_rules:
+            return self.content.get("redacts")
+        return self.get("redacts")
+
     def is_state(self) -> bool:
         return self.get_state_key() is not None
 
diff --git a/synapse/events/builder.py b/synapse/events/builder.py
index c82745275f..a254548c6c 100644
--- a/synapse/events/builder.py
+++ b/synapse/events/builder.py
@@ -173,7 +173,9 @@ class EventBuilder:
         if self.is_state():
             event_dict["state_key"] = self._state_key
 
-        if self._redacts is not None:
+        # MSC2174 moves the redacts property to the content, it is invalid to
+        # provide it as a top-level property.
+        if self._redacts is not None and not self.room_version.msc2176_redaction_rules:
             event_dict["redacts"] = self._redacts
 
         if self._origin_server_ts is not None: