summary refs log tree commit diff
diff options
context:
space:
mode:
authorKegan Dougal <kegan@matrix.org>2015-02-23 15:14:56 +0000
committerKegan Dougal <kegan@matrix.org>2015-02-23 15:14:56 +0000
commit22399d3d8f5931c4302a9df37ebde94f5d1fc277 (patch)
tree999eaa61074a35b8410d623055e55420a85f6a4e
parentMerge branch 'master' of github.com:matrix-org/synapse into develop (diff)
downloadsynapse-22399d3d8f5931c4302a9df37ebde94f5d1fc277.tar.xz
Add RegisterFallbackResource to /_matrix/static/client/register
Try to keep both forms of registration logic (native/fallback) close
together for sanity.
-rw-r--r--synapse/api/urls.py1
-rwxr-xr-xsynapse/app/homeserver.py2
-rw-r--r--synapse/rest/client/v1/__init__.py8
-rw-r--r--synapse/rest/client/v1/register.py21
4 files changed, 32 insertions, 0 deletions
diff --git a/synapse/api/urls.py b/synapse/api/urls.py
index 9485719332..3d43674625 100644
--- a/synapse/api/urls.py
+++ b/synapse/api/urls.py
@@ -18,6 +18,7 @@
 CLIENT_PREFIX = "/_matrix/client/api/v1"
 CLIENT_V2_ALPHA_PREFIX = "/_matrix/client/v2_alpha"
 FEDERATION_PREFIX = "/_matrix/federation/v1"
+STATIC_PREFIX = "/_matrix/static"
 WEB_CLIENT_PREFIX = "/_matrix/client"
 CONTENT_REPO_PREFIX = "/_matrix/content"
 SERVER_KEY_PREFIX = "/_matrix/key/v1"
diff --git a/synapse/app/homeserver.py b/synapse/app/homeserver.py
index ea20de1434..137293bd69 100755
--- a/synapse/app/homeserver.py
+++ b/synapse/app/homeserver.py
@@ -125,6 +125,8 @@ class SynapseHomeServer(HomeServer):
             (MEDIA_PREFIX, self.get_resource_for_media_repository()),
             (APP_SERVICE_PREFIX, self.get_resource_for_app_services()),
         ]
+        desired_tree += self.get_resource_for_client().get_extra_resources(self)
+
         if web_client:
             logger.info("Adding the web client.")
             desired_tree.append((WEB_CLIENT_PREFIX,
diff --git a/synapse/rest/client/v1/__init__.py b/synapse/rest/client/v1/__init__.py
index 21876b3487..1ebdeadca5 100644
--- a/synapse/rest/client/v1/__init__.py
+++ b/synapse/rest/client/v1/__init__.py
@@ -28,6 +28,14 @@ class ClientV1RestResource(JsonResource):
         JsonResource.__init__(self, hs)
         self.register_servlets(self, hs)
 
+    def get_extra_resources(self, hs):
+        # some parts of client v1 need to produce HTML as the output (e.g.
+        # fallback pages) but we can only produce JSON output. In an effort to
+        # keep similar logic close together, we'll call through to any servlet
+        # which requires HTML output.
+        register_resources = register.get_prefixes_and_resources(hs)
+        return register_resources
+
     @staticmethod
     def register_servlets(client_resource, hs):
         room.register_servlets(hs, client_resource)
diff --git a/synapse/rest/client/v1/register.py b/synapse/rest/client/v1/register.py
index f5acfb945f..eee567a583 100644
--- a/synapse/rest/client/v1/register.py
+++ b/synapse/rest/client/v1/register.py
@@ -18,10 +18,12 @@ from twisted.internet import defer
 
 from synapse.api.errors import SynapseError, Codes
 from synapse.api.constants import LoginType
+from synapse.api.urls import STATIC_PREFIX
 from base import ClientV1RestServlet, client_path_pattern
 import synapse.util.stringutils as stringutils
 
 from synapse.util.async import run_on_reactor
+from twisted.web.resource import Resource
 
 from hashlib import sha1
 import hmac
@@ -305,6 +307,16 @@ class RegisterRestServlet(ClientV1RestServlet):
         })
 
 
+class RegisterFallbackResource(Resource):
+
+    def __init__(self, hs):
+        Resource.__init__(self)  # Resource is an old-style class :(
+        self.hs = hs
+
+    def render_GET(self, request):
+        return "NOT_YET_IMPLEMENTED"
+
+
 def _parse_json(request):
     try:
         content = json.loads(request.content.read())
@@ -315,5 +327,14 @@ def _parse_json(request):
         raise SynapseError(400, "Content not JSON.")
 
 
+def get_prefixes_and_resources(hs):
+    return [
+        (
+            STATIC_PREFIX + "/client/register",
+            RegisterFallbackResource(hs)
+        )
+    ]
+
+
 def register_servlets(hs, http_server):
     RegisterRestServlet(hs).register(http_server)