summary refs log tree commit diff
path: root/synapse/api
diff options
context:
space:
mode:
authorErik Johnston <erik@matrix.org>2014-11-10 10:21:32 +0000
committerErik Johnston <erik@matrix.org>2014-11-10 10:21:32 +0000
commit1c06806f90a6368cdc3b9fa3b9053021b7c40e94 (patch)
treef9ed0b424cc37a7ea4e993ff774308c4e371549b /synapse/api
parentUse current state to get room hosts, rather than querying the database (diff)
downloadsynapse-1c06806f90a6368cdc3b9fa3b9053021b7c40e94.tar.xz
Finish redaction algorithm.
Diffstat (limited to 'synapse/api')
-rw-r--r--synapse/api/events/__init__.py4
-rw-r--r--synapse/api/events/utils.py39
2 files changed, 28 insertions, 15 deletions
diff --git a/synapse/api/events/__init__.py b/synapse/api/events/__init__.py
index 8d65c29ac1..f1e53f23ab 100644
--- a/synapse/api/events/__init__.py
+++ b/synapse/api/events/__init__.py
@@ -86,8 +86,8 @@ class SynapseEvent(JsonEncodedObject):
 
     def __init__(self, raises=True, **kwargs):
         super(SynapseEvent, self).__init__(**kwargs)
-        if "content" in kwargs:
-            self.check_json(self.content, raises=raises)
+        # if "content" in kwargs:
+        #     self.check_json(self.content, raises=raises)
 
     def get_content_template(self):
         """ Retrieve the JSON template for this event as a dict.
diff --git a/synapse/api/events/utils.py b/synapse/api/events/utils.py
index 5fc79105b5..802648f8f7 100644
--- a/synapse/api/events/utils.py
+++ b/synapse/api/events/utils.py
@@ -18,24 +18,31 @@ from .room import (
     RoomAliasesEvent, RoomCreateEvent,
 )
 
+
 def prune_event(event):
-    """ Prunes the given event of all keys we don't know about or think could
-    potentially be dodgy.
+    """ Returns a pruned version of the given event, which removes all keys we
+    don't know about or think could potentially be dodgy.
 
     This is used when we "redact" an event. We want to remove all fields that
     the user has specified, but we do want to keep necessary information like
     type, state_key etc.
     """
-    return _prune_event_or_pdu(event.type, event)
-
-def prune_pdu(pdu):
-    """Removes keys that contain unrestricted and non-essential data from a PDU
-    """
-    return _prune_event_or_pdu(pdu.type, pdu)
+    event_type = event.type
 
-def _prune_event_or_pdu(event_type, event):
-    # Remove all extraneous fields.
-    event.unrecognized_keys = {}
+    allowed_keys = [
+        "event_id",
+        "user_id",
+        "room_id",
+        "hashes",
+        "signatures",
+        "content",
+        "type",
+        "state_key",
+        "depth",
+        "prev_events",
+        "prev_state",
+        "auth_events",
+    ]
 
     new_content = {}
 
@@ -65,6 +72,12 @@ def _prune_event_or_pdu(event_type, event):
     elif event_type == RoomAliasesEvent.TYPE:
         add_fields("aliases")
 
-    event.content = new_content
+    allowed_fields = {
+        k: v
+        for k, v in event.get_full_dict().items()
+        if k in allowed_keys
+    }
+
+    allowed_fields["content"] = new_content
 
-    return event
+    return type(event)(**allowed_fields)