If the web client is enabled, automatically redirect root '/' to the web client path.
This commit is contained in:
parent
e543d6a91d
commit
9fd445eb92
|
@ -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()))
|
||||||
|
|
||||||
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
|
# 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()
|
||||||
|
|
|
@ -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.
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue