diff options
-rw-r--r-- | synapse/api/auth.py | 13 | ||||
-rw-r--r-- | synapse/state.py | 12 |
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 |