summary refs log tree commit diff
path: root/synapse/api/auth.py
diff options
context:
space:
mode:
authorMark Haines <mjark@negativecurvature.net>2015-02-09 18:09:30 +0000
committerMark Haines <mjark@negativecurvature.net>2015-02-09 18:09:30 +0000
commit5c5f5c1f0e3a2369562e4e2fa96123e825dfa5f5 (patch)
tree04d26373c6db97aef4e4fb60b5c0e74c3ea24c3d /synapse/api/auth.py
parentMerge pull request #57 from matrix-org/transaction_counters (diff)
parentDuring room intial sync, only calculate current state once. (diff)
downloadsynapse-5c5f5c1f0e3a2369562e4e2fa96123e825dfa5f5.tar.xz
Merge pull request #56 from matrix-org/room_initial_sync_perf
During room intial sync, only calculate current state once.
Diffstat (limited to 'synapse/api/auth.py')
-rw-r--r--synapse/api/auth.py21
1 files changed, 14 insertions, 7 deletions
diff --git a/synapse/api/auth.py b/synapse/api/auth.py
index 7105ee21dc..0054745363 100644
--- a/synapse/api/auth.py
+++ b/synapse/api/auth.py
@@ -89,12 +89,19 @@ class Auth(object):
             raise
 
     @defer.inlineCallbacks
-    def check_joined_room(self, room_id, user_id):
-        member = yield self.state.get_current_state(
-            room_id=room_id,
-            event_type=EventTypes.Member,
-            state_key=user_id
-        )
+    def check_joined_room(self, room_id, user_id, current_state=None):
+        if current_state:
+            member = current_state.get(
+                (EventTypes.Member, user_id),
+                None
+            )
+        else:
+            member = yield self.state.get_current_state(
+                room_id=room_id,
+                event_type=EventTypes.Member,
+                state_key=user_id
+            )
+
         self._check_joined_room(member, user_id, room_id)
         defer.returnValue(member)
 
@@ -102,7 +109,7 @@ class Auth(object):
     def check_host_in_room(self, room_id, host):
         curr_state = yield self.state.get_current_state(room_id)
 
-        for event in curr_state:
+        for event in curr_state.values():
             if event.type == EventTypes.Member:
                 try:
                     if UserID.from_string(event.state_key).domain != host: