summary refs log tree commit diff
diff options
context:
space:
mode:
authorErik Johnston <erik@matrix.org>2017-04-26 16:18:08 +0100
committerErik Johnston <erik@matrix.org>2017-04-26 16:18:08 +0100
commit34e682d3855562a4ca6e32f366a2ecfa1c684a3a (patch)
tree6328201b5fb85cf4986cbb10066e6e7497d82bbc
parentMerge pull request #2160 from matrix-org/erikj/reduce_join_cache_size (diff)
downloadsynapse-34e682d3855562a4ca6e32f366a2ecfa1c684a3a.tar.xz
Fix invite state to always include all events
-rw-r--r--synapse/events/utils.py20
-rw-r--r--synapse/handlers/message.py9
-rw-r--r--synapse/rest/client/v2_alpha/sync.py2
3 files changed, 24 insertions, 7 deletions
diff --git a/synapse/events/utils.py b/synapse/events/utils.py
index 5bbaef8187..7ca7796558 100644
--- a/synapse/events/utils.py
+++ b/synapse/events/utils.py
@@ -225,7 +225,22 @@ def format_event_for_client_v2_without_room_id(d):
 
 def serialize_event(e, time_now_ms, as_client_event=True,
                     event_format=format_event_for_client_v1,
-                    token_id=None, only_event_fields=None):
+                    token_id=None, only_event_fields=None, is_invite=False):
+    """Serialize event for clients
+
+    Args:
+        e (EventBase)
+        time_now_ms (int)
+        as_client_event (bool)
+        event_format
+        token_id
+        only_event_fields
+        is_invite (bool): Whether this is an invite that is being sent to the
+            invitee
+
+    Returns:
+        dict
+    """
     # FIXME(erikj): To handle the case of presence events and the like
     if not isinstance(e, EventBase):
         return e
@@ -260,4 +275,7 @@ def serialize_event(e, time_now_ms, as_client_event=True,
             raise TypeError("only_event_fields must be a list of strings")
         d = only_fields(d, only_event_fields)
 
+    if not is_invite:
+        d["unsigned"].pop("invite_room_state", None)
+
     return d
diff --git a/synapse/handlers/message.py b/synapse/handlers/message.py
index 348056add5..82a2ade1f6 100644
--- a/synapse/handlers/message.py
+++ b/synapse/handlers/message.py
@@ -531,9 +531,9 @@ class MessageHandler(BaseHandler):
 
                 state_to_include_ids = [
                     e_id
-                    for k, e_id in context.current_state_ids.items()
+                    for k, e_id in context.current_state_ids.iteritems()
                     if k[0] in self.hs.config.room_invite_state_types
-                    or k[0] == EventTypes.Member and k[1] == event.sender
+                    or k == (EventTypes.Member, event.sender)
                 ]
 
                 state_to_include = yield self.store.get_events(state_to_include_ids)
@@ -545,7 +545,7 @@ class MessageHandler(BaseHandler):
                         "content": e.content,
                         "sender": e.sender,
                     }
-                    for e in state_to_include.values()
+                    for e in state_to_include.itervalues()
                 ]
 
                 invitee = UserID.from_string(event.state_key)
@@ -618,6 +618,3 @@ class MessageHandler(BaseHandler):
             )
 
         preserve_fn(_notify)()
-
-        # If invite, remove room_state from unsigned before sending.
-        event.unsigned.pop("invite_room_state", None)
diff --git a/synapse/rest/client/v2_alpha/sync.py b/synapse/rest/client/v2_alpha/sync.py
index a7a9e0a794..b5bcfade70 100644
--- a/synapse/rest/client/v2_alpha/sync.py
+++ b/synapse/rest/client/v2_alpha/sync.py
@@ -250,9 +250,11 @@ class SyncRestServlet(RestServlet):
         """
         invited = {}
         for room in rooms:
+            logger.info("invite: %r", room.invite)
             invite = serialize_event(
                 room.invite, time_now, token_id=token_id,
                 event_format=format_event_for_client_v2_without_room_id,
+                is_invite=True,
             )
             unsigned = dict(invite.get("unsigned", {}))
             invite["unsigned"] = unsigned