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)
|