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
|