diff options
author | Kegan Dougal <kegan@matrix.org> | 2015-02-27 11:03:56 +0000 |
---|---|---|
committer | Kegan Dougal <kegan@matrix.org> | 2015-02-27 11:03:56 +0000 |
commit | 40c9896705208b1455192b496e3e8e3bc9e9c0a9 (patch) | |
tree | 8aca2ffe7e6ddae9ee32d9d326dbed829daf5c8b | |
parent | Convert expected format for AS regex to include exclusivity. (diff) | |
download | synapse-40c9896705208b1455192b496e3e8e3bc9e9c0a9.tar.xz |
Add functions to return whether an AS has exclusively claimed a matching namespace.
-rw-r--r-- | synapse/appservice/__init__.py | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/synapse/appservice/__init__.py b/synapse/appservice/__init__.py index b5e7ac16ba..a268a6bcc4 100644 --- a/synapse/appservice/__init__.py +++ b/synapse/appservice/__init__.py @@ -73,7 +73,7 @@ class ApplicationService(object): ) return namespaces - def _matches_regex(self, test_string, namespace_key): + def _matches_regex(self, test_string, namespace_key, return_obj=False): if not isinstance(test_string, basestring): logger.error( "Expected a string to test regex against, but got %s", @@ -81,11 +81,19 @@ class ApplicationService(object): ) return False - for regex in self.namespaces[namespace_key]: - if re.match(regex, test_string): + for regex_obj in self.namespaces[namespace_key]: + if re.match(regex_obj["regex"], test_string): + if return_obj: + return regex_obj return True return False + def _is_exclusive(self, ns_key, test_string): + regex_obj = self._matches_regex(test_string, ns_key, return_obj=True) + if regex_obj: + return regex_obj["exclusive"] + return False + def _matches_user(self, event, member_list): if (hasattr(event, "sender") and self.is_interested_in_user(event.sender)): @@ -155,5 +163,14 @@ class ApplicationService(object): def is_interested_in_room(self, room_id): return self._matches_regex(room_id, ApplicationService.NS_ROOMS) + def is_exclusive_user(self, user_id): + return self._is_exclusive(ApplicationService.NS_USERS, user_id) + + def is_exclusive_alias(self, alias): + return self._is_exclusive(ApplicationService.NS_ALIASES, alias) + + def is_exclusive_room(self, room_id): + return self._is_exclusive(ApplicationService.NS_ROOMS, room_id) + def __str__(self): return "ApplicationService: %s" % (self.__dict__,) |