If the web client is enabled, automatically redirect root '/' to the web client path.

This commit is contained in:
Kegan Dougal 2014-08-14 11:37:13 +01:00
parent e543d6a91d
commit 9fd445eb92
2 changed files with 30 additions and 4 deletions

View File

@ -24,7 +24,7 @@ from twisted.python.log import PythonLoggingObserver
from twisted.web.resource import Resource from twisted.web.resource import Resource
from twisted.web.static import File from twisted.web.static import File
from twisted.web.server import Site 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.http.client import TwistedHttpClient
from synapse.rest.base import CLIENT_PREFIX from synapse.rest.base import CLIENT_PREFIX
from synapse.federation.transport import PREFIX from synapse.federation.transport import PREFIX
@ -85,7 +85,7 @@ class SynapseHomeServer(HomeServer):
return pool 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. """Create the resource tree for this Home Server.
This in unduly complicated because Twisted does not support putting This in unduly complicated because Twisted does not support putting
@ -93,6 +93,9 @@ class SynapseHomeServer(HomeServer):
Args: Args:
web_client (bool): True to enable the web client. 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: # list containing (path_str, Resource) e.g:
# [ ("/aaa/bbb/cc", Resource1), ("/aaa/dummy", Resource2) ] # [ ("/aaa/bbb/cc", Resource1), ("/aaa/dummy", Resource2) ]
@ -105,7 +108,11 @@ class SynapseHomeServer(HomeServer):
desired_tree.append(("/matrix/client", # TODO constant please desired_tree.append(("/matrix/client", # TODO constant please
self.get_resource_for_web_client())) self.get_resource_for_web_client()))
if web_client and redirect_root_to_web_client:
self.root_resource = RootRedirect("/matrix/client")
else:
self.root_resource = Resource() self.root_resource = Resource()
# ideally we'd just use getChild and putChild but getChild doesn't work # 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 # 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 # instead, we'll store a copy of this mapping so we can actually add
@ -247,7 +254,9 @@ def setup():
hs.register_servlets() 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.start_listening(args.port)
hs.build_db_pool() hs.build_db_pool()

View File

@ -22,6 +22,7 @@ from synapse.api.errors import cs_exception, CodeMessageException
from twisted.internet import defer, reactor from twisted.internet import defer, reactor
from twisted.web import server, resource from twisted.web import server, resource
from twisted.web.server import NOT_DONE_YET from twisted.web.server import NOT_DONE_YET
from twisted.web.util import redirectTo
import collections import collections
import logging import logging
@ -159,6 +160,22 @@ class JsonResource(HttpServer, resource.Resource):
return False 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): def respond_with_json_bytes(request, code, json_bytes, send_cors=False):
"""Sends encoded JSON in response to the given request. """Sends encoded JSON in response to the given request.