summary refs log tree commit diff
path: root/synapse
diff options
context:
space:
mode:
authorKegan Dougal <kegan@matrix.org>2015-02-26 17:21:17 +0000
committerKegan Dougal <kegan@matrix.org>2015-02-26 17:21:17 +0000
commitf0995436e7951448d8be3c372f4002845a111a7d (patch)
tree0d7547d5eb1b411877ab97e060f46e33a4ecb244 /synapse
parentUpdate CHANGES (diff)
downloadsynapse-f0995436e7951448d8be3c372f4002845a111a7d.tar.xz
Check for membership invite events correctly.
Diffstat (limited to 'synapse')
-rw-r--r--synapse/storage/stream.py23
1 files changed, 21 insertions, 2 deletions
diff --git a/synapse/storage/stream.py b/synapse/storage/stream.py
index 6946e9fe70..5d01ecf200 100644
--- a/synapse/storage/stream.py
+++ b/synapse/storage/stream.py
@@ -36,12 +36,14 @@ what sort order was used:
 from twisted.internet import defer
 
 from ._base import SQLBaseStore
+from synapse.api.constants import EventTypes
 from synapse.api.errors import SynapseError
 from synapse.util.logutils import log_function
 
 from collections import namedtuple
 
 import logging
+import simplejson
 
 
 logger = logging.getLogger(__name__)
@@ -159,13 +161,30 @@ class StreamStore(SQLBaseStore):
 
         # select all the events between from/to with a sensible limit
         sql = (
-            "SELECT e.event_id, e.room_id, e.stream_ordering FROM events AS e "
+            "SELECT e.event_id, e.room_id, e.type, e.unrecognized_keys, "
+            "e.stream_ordering FROM events AS e "
             "WHERE e.stream_ordering > ? AND e.stream_ordering <= ? "
             "ORDER BY stream_ordering ASC LIMIT %(limit)d "
         ) % {
             "limit": limit
         }
 
+
+        def app_service_interested(row):
+            if row["room_id"] in room_ids_for_as:
+                return True
+
+            if row["type"] == EventTypes.Member:
+                # load up the content to inspect if some user the AS is
+                # interested in was invited to a room. We'll be passing this
+                # through _get_events_txn later, so ignore the fact that this
+                # may be a redacted event.
+                event_content = simplejson.loads(row["unrecognized_keys"])
+                if (service.is_interested_in_user(
+                        event_content.get("state_key"))):
+                    return True
+            return False
+
         def f(txn):
             txn.execute(sql, (from_id.stream, to_id.stream,))
 
@@ -176,7 +195,7 @@ class StreamStore(SQLBaseStore):
                 # apply the filter on the room id list
                 [
                     r["event_id"] for r in rows
-                    if r["room_id"] in room_ids_for_as
+                    if app_service_interested(r)
                 ],
                 get_prev_content=True
             )