summary refs log tree commit diff
diff options
context:
space:
mode:
authorErik Johnston <erik@matrix.org>2016-08-25 18:15:51 +0100
committerErik Johnston <erik@matrix.org>2016-08-25 18:15:51 +0100
commit0e1900d8193a612d6920a9eca0aec4813e17d355 (patch)
tree0fb6bb7026bb02525df63f6e06563ea54cfdef5e
parentAdd desc (diff)
downloadsynapse-0e1900d8193a612d6920a9eca0aec4813e17d355.tar.xz
Pull out full state less
-rw-r--r--synapse/api/auth.py13
-rw-r--r--synapse/state.py12
2 files changed, 15 insertions, 10 deletions
diff --git a/synapse/api/auth.py b/synapse/api/auth.py
index 40c3e9db0d..23a928de16 100644
--- a/synapse/api/auth.py
+++ b/synapse/api/auth.py
@@ -278,18 +278,19 @@ class Auth(object):
 
     @defer.inlineCallbacks
     def check_host_in_room(self, room_id, host):
-        curr_state = yield self.state.get_current_state(room_id)
+        curr_state_id = yield self.state.get_current_state_ids(room_id)
 
-        for event in curr_state.values():
-            if event.type == EventTypes.Member:
+        for (etype, state_key), event_id in curr_state_id.items():
+            if etype == EventTypes.Member:
                 try:
-                    if get_domain_from_id(event.state_key) != host:
+                    if get_domain_from_id(state_key) != host:
                         continue
                 except:
-                    logger.warn("state_key not user_id: %s", event.state_key)
+                    logger.warn("state_key not user_id: %s", state_key)
                     continue
 
-                if event.content["membership"] == Membership.JOIN:
+                event = yield self.store.get_event(event_id, allow_none=True)
+                if event and event.content["membership"] == Membership.JOIN:
                     defer.returnValue(True)
 
         defer.returnValue(False)
diff --git a/synapse/state.py b/synapse/state.py
index 2a01887a67..78461215ca 100644
--- a/synapse/state.py
+++ b/synapse/state.py
@@ -95,15 +95,19 @@ class StateHandler(object):
 
         _, state = yield self.resolve_state_groups(room_id, latest_event_ids)
 
+        if event_type:
+            event_id = state.get((event_type, state_key))
+            event = None
+            if event_id:
+                event = yield self.store.get_event(event_id, allow_none=True)
+            defer.returnValue(event)
+            return
+
         state_map = yield self.store.get_events(state.values(), get_prev_content=False)
         state = {
             key: state_map[e_id] for key, e_id in state.items() if e_id in state_map
         }
 
-        if event_type:
-            defer.returnValue(state.get((event_type, state_key)))
-            return
-
         defer.returnValue(state)
 
     @defer.inlineCallbacks