diff options
author | Erik Johnston <erik@matrix.org> | 2015-10-21 10:09:26 +0100 |
---|---|---|
committer | Erik Johnston <erik@matrix.org> | 2015-10-21 10:09:26 +0100 |
commit | 5c41224a89a9ceedeb5db10f972c10344382faf2 (patch) | |
tree | 29a7fb8a4851d4b5434d2105d203e3b6cbd947cb | |
parent | Filter search results (diff) | |
download | synapse-5c41224a89a9ceedeb5db10f972c10344382faf2.tar.xz |
Filter room ids before hitting the database
Diffstat (limited to '')
-rw-r--r-- | synapse/api/filtering.py | 20 | ||||
-rw-r--r-- | synapse/handlers/search.py | 2 |
2 files changed, 21 insertions, 1 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) diff --git a/synapse/handlers/search.py b/synapse/handlers/search.py index 473aab53f0..f53e5d35ac 100644 --- a/synapse/handlers/search.py +++ b/synapse/handlers/search.py @@ -64,7 +64,7 @@ class SearchHandler(BaseHandler): ) room_ids = set(r.room_id for r in rooms) - # TODO: Apply room filter to rooms list + room_ids = filtr.filter_rooms(room_ids) rank_map, event_map = yield self.store.search_msgs(room_ids, search_term, keys) |