mirror of
https://github.com/element-hq/synapse.git
synced 2024-12-14 11:57:44 +00:00
If the web client is enabled, automatically redirect root '/' to the web client path.
This commit is contained in:
parent
e543d6a91d
commit
9fd445eb92
2 changed files with 30 additions and 4 deletions
|
@ -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()
|
||||
|
|
|
@ -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.
|
||||
|
||||
|
|
Loading…
Reference in a new issue