summary refs log tree commit diff
path: root/synapse/api
diff options
context:
space:
mode:
authorErik Johnston <erik@matrix.org>2015-10-21 10:09:26 +0100
committerErik Johnston <erik@matrix.org>2015-10-21 10:09:26 +0100
commit5c41224a89a9ceedeb5db10f972c10344382faf2 (patch)
tree29a7fb8a4851d4b5434d2105d203e3b6cbd947cb /synapse/api
parentFilter search results (diff)
downloadsynapse-5c41224a89a9ceedeb5db10f972c10344382faf2.tar.xz
Filter room ids before hitting the database
Diffstat (limited to 'synapse/api')
-rw-r--r--synapse/api/filtering.py20
1 files changed, 20 insertions, 0 deletions
diff --git a/synapse/api/filtering.py b/synapse/api/filtering.py
index 60b6648e0d..ab14b47281 100644
--- a/synapse/api/filtering.py
+++ b/synapse/api/filtering.py
@@ -202,6 +202,26 @@ class Filter(object):
 
         return True
 
+    def filter_rooms(self, room_ids):
+        """Apply the 'rooms' filter to a given list of rooms.
+
+        Args:
+            room_ids (list): A list of room_ids.
+
+        Returns:
+            list: A list of room_ids that match the filter
+        """
+        room_ids = set(room_ids)
+
+        disallowed_rooms = set(self.filter_json.get("not_rooms", []))
+        room_ids -= disallowed_rooms
+
+        allowed_rooms = self.filter_json.get("rooms", None)
+        if allowed_rooms is not None:
+            room_ids &= set(allowed_rooms)
+
+        return room_ids
+
     def filter(self, events):
         return filter(self.check, events)