From 9fd445eb92ed9def98764968a3f3fceb0ae706c9 Mon Sep 17 00:00:00 2001 From: Kegan Dougal Date: Thu, 14 Aug 2014 11:37:13 +0100 Subject: [PATCH] If the web client is enabled, automatically redirect root '/' to the web client path. --- synapse/app/homeserver.py | 17 +++++++++++++---- synapse/http/server.py | 17 +++++++++++++++++ 2 files changed, 30 insertions(+), 4 deletions(-) diff --git a/synapse/app/homeserver.py b/synapse/app/homeserver.py index 28eb223d9a..e2489abc86 100644 --- a/synapse/app/homeserver.py +++ b/synapse/app/homeserver.py @@ -24,7 +24,7 @@ from twisted.python.log import PythonLoggingObserver from twisted.web.resource import Resource from twisted.web.static import File from twisted.web.server import Site -from synapse.http.server import JsonResource +from synapse.http.server import JsonResource, RootRedirect from synapse.http.client import TwistedHttpClient from synapse.rest.base import CLIENT_PREFIX from synapse.federation.transport import PREFIX @@ -85,7 +85,7 @@ class SynapseHomeServer(HomeServer): return pool - def create_resource_tree(self, web_client): + def create_resource_tree(self, web_client, redirect_root_to_web_client): """Create the resource tree for this Home Server. This in unduly complicated because Twisted does not support putting @@ -93,6 +93,9 @@ class SynapseHomeServer(HomeServer): Args: web_client (bool): True to enable the web client. + redirect_root_to_web_client (bool): True to redirect '/' to the + location of the web client. This does nothing if web_client is not + True. """ # list containing (path_str, Resource) e.g: # [ ("/aaa/bbb/cc", Resource1), ("/aaa/dummy", Resource2) ] @@ -105,7 +108,11 @@ class SynapseHomeServer(HomeServer): desired_tree.append(("/matrix/client", # TODO constant please self.get_resource_for_web_client())) - self.root_resource = Resource() + if web_client and redirect_root_to_web_client: + self.root_resource = RootRedirect("/matrix/client") + else: + self.root_resource = Resource() + # ideally we'd just use getChild and putChild but getChild doesn't work # unless you give it a Request object IN ADDITION to the name :/ So # instead, we'll store a copy of this mapping so we can actually add @@ -247,7 +254,9 @@ def setup(): hs.register_servlets() - hs.create_resource_tree(web_client=args.webclient) + hs.create_resource_tree( + web_client=args.webclient, + redirect_root_to_web_client=True) hs.start_listening(args.port) hs.build_db_pool() diff --git a/synapse/http/server.py b/synapse/http/server.py index 87b4fc8a5f..bad2738bde 100644 --- a/synapse/http/server.py +++ b/synapse/http/server.py @@ -22,6 +22,7 @@ from synapse.api.errors import cs_exception, CodeMessageException from twisted.internet import defer, reactor from twisted.web import server, resource from twisted.web.server import NOT_DONE_YET +from twisted.web.util import redirectTo import collections import logging @@ -159,6 +160,22 @@ class JsonResource(HttpServer, resource.Resource): return False +class RootRedirect(resource.Resource): + """Redirects the root '/' path to another path.""" + + def __init__(self, path): + resource.Resource.__init__(self) + self.url = path + + def render_GET(self, request): + return redirectTo(self.url, request) + + def getChild(self, name, request): + if len(name) == 0: + return self # select ourselves as the child to render + return resource.Resource.getChild(self, name, request) + + def respond_with_json_bytes(request, code, json_bytes, send_cors=False): """Sends encoded JSON in response to the given request.