mirror of
https://git.anonymousland.org/anonymousland/synapse.git
synced 2025-05-02 21:54:53 -04:00
Support for serving server well-known files (#11211)
Fixes https://github.com/matrix-org/synapse/issues/8308
This commit is contained in:
parent
2014098d01
commit
71f9966f27
8 changed files with 159 additions and 47 deletions
|
@ -21,6 +21,7 @@ from twisted.web.server import Request
|
|||
from synapse.http.server import set_cors_headers
|
||||
from synapse.types import JsonDict
|
||||
from synapse.util import json_encoder
|
||||
from synapse.util.stringutils import parse_server_name
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from synapse.server import HomeServer
|
||||
|
@ -47,8 +48,8 @@ class WellKnownBuilder:
|
|||
return result
|
||||
|
||||
|
||||
class WellKnownResource(Resource):
|
||||
"""A Twisted web resource which renders the .well-known file"""
|
||||
class ClientWellKnownResource(Resource):
|
||||
"""A Twisted web resource which renders the .well-known/matrix/client file"""
|
||||
|
||||
isLeaf = 1
|
||||
|
||||
|
@ -67,3 +68,45 @@ class WellKnownResource(Resource):
|
|||
logger.debug("returning: %s", r)
|
||||
request.setHeader(b"Content-Type", b"application/json")
|
||||
return json_encoder.encode(r).encode("utf-8")
|
||||
|
||||
|
||||
class ServerWellKnownResource(Resource):
|
||||
"""Resource for .well-known/matrix/server, redirecting to port 443"""
|
||||
|
||||
isLeaf = 1
|
||||
|
||||
def __init__(self, hs: "HomeServer"):
|
||||
super().__init__()
|
||||
self._serve_server_wellknown = hs.config.server.serve_server_wellknown
|
||||
|
||||
host, port = parse_server_name(hs.config.server.server_name)
|
||||
|
||||
# If we've got this far, then https://<server_name>/ must route to us, so
|
||||
# we just redirect the traffic to port 443 instead of 8448.
|
||||
if port is None:
|
||||
port = 443
|
||||
|
||||
self._response = json_encoder.encode({"m.server": f"{host}:{port}"}).encode(
|
||||
"utf-8"
|
||||
)
|
||||
|
||||
def render_GET(self, request: Request) -> bytes:
|
||||
if not self._serve_server_wellknown:
|
||||
request.setResponseCode(404)
|
||||
request.setHeader(b"Content-Type", b"text/plain")
|
||||
return b"404. Is anything ever truly *well* known?\n"
|
||||
|
||||
request.setHeader(b"Content-Type", b"application/json")
|
||||
return self._response
|
||||
|
||||
|
||||
def well_known_resource(hs: "HomeServer") -> Resource:
|
||||
"""Returns a Twisted web resource which handles '.well-known' requests"""
|
||||
res = Resource()
|
||||
matrix_resource = Resource()
|
||||
res.putChild(b"matrix", matrix_resource)
|
||||
|
||||
matrix_resource.putChild(b"server", ServerWellKnownResource(hs))
|
||||
matrix_resource.putChild(b"client", ClientWellKnownResource(hs))
|
||||
|
||||
return res
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue