diff --git a/synapse/handlers/appservice.py b/synapse/handlers/appservice.py
index bf68b33398..dac63e2245 100644
--- a/synapse/handlers/appservice.py
+++ b/synapse/handlers/appservice.py
@@ -17,6 +17,7 @@ from twisted.internet import defer
from ._base import BaseHandler
from synapse.api.errors import Codes, StoreError, SynapseError
+from synapse.storage.appservice import ApplicationService
import logging
@@ -88,8 +89,26 @@ class ApplicationServicesHandler(BaseHandler):
# Do we know this user exists? If not, poke the user query API for
# all services which match that user regex.
+ unknown_user = False # TODO check
+ if unknown_user:
+ user_query_services = self.get_services_for_event(
+ event=event,
+ restrict_to=ApplicationService.NS_USERS
+ )
+ for user_service in user_query_services:
+ pass # TODO poke User Query API
# Do we know this room alias exists? If not, poke the room alias query
# API for all services which match that room alias regex.
+ unknown_room_alias = False # TODO check
+ if unknown_room_alias:
+ alias_query_services = self.get_services_for_event(
+ event=event,
+ restrict_to=ApplicationService.NS_ALIASES
+ )
+ for alias_service in alias_query_services:
+ pass # TODO poke Room Alias Query API
# Fork off pushes to these services - XXX First cut, best effort
+ for service in services:
+ pass # TODO push event to service
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__,)
|