Browse Source

Add RegisterFallbackResource to /_matrix/static/client/register

Try to keep both forms of registration logic (native/fallback) close
together for sanity.
Kegan Dougal 9 years ago
parent
commit
22399d3d8f

+ 1 - 0
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"

+ 2 - 0
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,

+ 8 - 0
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)

+ 21 - 0
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)