summary refs log tree commit diff
path: root/synapse/storage
diff options
context:
space:
mode:
authorKegan Dougal <kegan@matrix.org>2015-02-03 13:29:27 +0000
committerKegan Dougal <kegan@matrix.org>2015-02-03 13:29:27 +0000
commitf2c039bfb958ed349bce42098e296995786374cc (patch)
treeb8285361668534493f69ea6253fe88c2ff99f600 /synapse/storage
parentAdd namespace constants. Add restrict_to option to limit namespace checks. (diff)
downloadsynapse-f2c039bfb958ed349bce42098e296995786374cc.tar.xz
Implement restricted namespace checks. Begin fleshing out the main hook for notifying application services.
Diffstat (limited to 'synapse/storage')
-rw-r--r--synapse/storage/appservice.py21
1 files changed, 16 insertions, 5 deletions
diff --git a/synapse/storage/appservice.py b/synapse/storage/appservice.py

index 277741fced..cdf26ee434 100644 --- a/synapse/storage/appservice.py +++ b/synapse/storage/appservice.py
@@ -33,6 +33,9 @@ class ApplicationService(object): NS_USERS = "users" NS_ALIASES = "aliases" NS_ROOMS = "rooms" + # The ordering here is important as it is used to map database values (which + # are stored as ints representing the position in this list) to namespace + # values. NS_LIST = [NS_USERS, NS_ALIASES, NS_ROOMS] def __init__(self, token, url=None, namespaces=None): @@ -103,13 +106,21 @@ class ApplicationService(object): """ if aliases_for_event is None: aliases_for_event = [] - if restrict_to not in ApplicationService.NS_LIST: - # this is a programming error, so raise a general exception + if restrict_to and restrict_to not in ApplicationService.NS_LIST: + # this is a programming error, so fail early and raise a general + # exception raise Exception("Unexpected restrict_to value: %s". restrict_to) - return (self._matches_user(event) - or self._matches_aliases(event, aliases_for_event) - or self._matches_room_id(event)) + if not restrict_to: + return (self._matches_user(event) + or self._matches_aliases(event, aliases_for_event) + or self._matches_room_id(event)) + elif restrict_to == ApplicationService.NS_ALIASES: + return self._matches_aliases(event, aliases_for_event) + elif restrict_to == ApplicationService.NS_ROOMS: + return self._matches_room_id(event) + elif restrict_to == ApplicationService.NS_USERS: + return self._matches_user(event) def __str__(self): return "ApplicationService: %s" % (self.__dict__,)