summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--synapse/handlers/appservice.py13
-rw-r--r--synapse/rest/appservice/v1/register.py8
-rw-r--r--synapse/storage/appservice.py16
3 files changed, 17 insertions, 20 deletions
diff --git a/synapse/handlers/appservice.py b/synapse/handlers/appservice.py
index 25e1cece56..1890ca06aa 100644
--- a/synapse/handlers/appservice.py
+++ b/synapse/handlers/appservice.py
@@ -30,21 +30,18 @@ class ApplicationServicesHandler(BaseHandler):
         super(ApplicationServicesHandler, self).__init__(hs)
 
     @defer.inlineCallbacks
-    def register(self, base_url, token, namespaces):
+    def register(self, app_service):
         # check the token is recognised
         try:
-            app_service = yield self.store.get_app_service(token)
-            if not app_service:
-                raise StoreError
+            stored_service = yield self.store.get_app_service(app_service.token)
+            if not stored_service:
+                raise StoreError(404, "Not found")
         except StoreError:
             raise SynapseError(
                 403, "Unrecognised application services token. "
                 "Consult the home server admin."
             )
-
-        # store this AS
-
-        defer.returnValue("not_implemented_yet")
+        # TODO store this AS
 
     def unregister(self, token):
         yield self.store.unregister_app_service(token)
diff --git a/synapse/rest/appservice/v1/register.py b/synapse/rest/appservice/v1/register.py
index 142f09a638..5786cf873e 100644
--- a/synapse/rest/appservice/v1/register.py
+++ b/synapse/rest/appservice/v1/register.py
@@ -18,6 +18,7 @@ from twisted.internet import defer
 
 from base import AppServiceRestServlet, as_path_pattern
 from synapse.api.errors import CodeMessageException, SynapseError
+from synapse.storage.appservice import ApplicationService
 
 import json
 import logging
@@ -58,7 +59,10 @@ class RegisterRestServlet(AppServiceRestServlet):
             self._parse_namespace(namespaces, params["namespaces"], "rooms")
             self._parse_namespace(namespaces, params["namespaces"], "aliases")
 
-        hs_token = yield self.handler.register(as_url, as_token, namespaces)
+        app_service = ApplicationService(as_token, as_url, namespaces)
+
+        yield self.handler.register(app_service)
+        hs_token = "_not_implemented_yet"  # TODO: Pull this from self.hs?
 
         defer.returnValue({
           "hs_token": hs_token
@@ -97,7 +101,7 @@ class UnregisterRestServlet(AppServiceRestServlet):
         except (KeyError, ValueError):
             raise SynapseError(400, "Missing required key: as_token(str)")
 
-        # TODO: pass to the appservice handler
+        yield self.handler.unregister(as_token)
 
         raise CodeMessageException(500, "Not implemented")
 
diff --git a/synapse/storage/appservice.py b/synapse/storage/appservice.py
index fbad17cb9e..f84f026b7b 100644
--- a/synapse/storage/appservice.py
+++ b/synapse/storage/appservice.py
@@ -116,8 +116,7 @@ class ApplicationServiceStore(SQLBaseStore):
     def get_services_for_event(self, event):
         return self.cache.get_services_for_event(event)
 
-    @defer.inlineCallbacks
-    def get_app_service(self, as_token, from_cache=True):
+    def get_app_service(self, token, from_cache=True):
         """Get the application service with the given token.
 
         Args:
@@ -130,21 +129,18 @@ class ApplicationServiceStore(SQLBaseStore):
 
         if from_cache:
             for service in self.cache.services:
-                if service.token == as_token:
-                    defer.returnValue(service)
-                    return
-            defer.returnValue(None)
-            return
-
+                if service.token == token:
+                    return service
+            return None
 
         # TODO: This should be JOINed with the application_services_regex table.
         row = self._simple_select_one(
-            "application_services", {"token": as_token},
+            "application_services", {"token": token},
             ["url", "token"]
         )
         if not row:
             raise StoreError(400, "Bad application services token supplied.")
-        defer.returnValue(row)
+        return row
 
     def _populate_cache(self):
         """Populates the ApplicationServiceCache from the database."""