Merge pull request #3208 from matrix-org/rav/more_refactor_request_handler
Set Server header in SynapseRequest
This commit is contained in:
commit
c25d7ba12e
|
@ -74,6 +74,7 @@ class AppserviceServer(HomeServer):
|
||||||
site_tag,
|
site_tag,
|
||||||
listener_config,
|
listener_config,
|
||||||
root_resource,
|
root_resource,
|
||||||
|
self.version_string,
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -98,6 +98,7 @@ class ClientReaderServer(HomeServer):
|
||||||
site_tag,
|
site_tag,
|
||||||
listener_config,
|
listener_config,
|
||||||
root_resource,
|
root_resource,
|
||||||
|
self.version_string,
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -114,6 +114,7 @@ class EventCreatorServer(HomeServer):
|
||||||
site_tag,
|
site_tag,
|
||||||
listener_config,
|
listener_config,
|
||||||
root_resource,
|
root_resource,
|
||||||
|
self.version_string,
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -87,6 +87,7 @@ class FederationReaderServer(HomeServer):
|
||||||
site_tag,
|
site_tag,
|
||||||
listener_config,
|
listener_config,
|
||||||
root_resource,
|
root_resource,
|
||||||
|
self.version_string,
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -101,6 +101,7 @@ class FederationSenderServer(HomeServer):
|
||||||
site_tag,
|
site_tag,
|
||||||
listener_config,
|
listener_config,
|
||||||
root_resource,
|
root_resource,
|
||||||
|
self.version_string,
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -152,6 +152,7 @@ class FrontendProxyServer(HomeServer):
|
||||||
site_tag,
|
site_tag,
|
||||||
listener_config,
|
listener_config,
|
||||||
root_resource,
|
root_resource,
|
||||||
|
self.version_string,
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -140,6 +140,7 @@ class SynapseHomeServer(HomeServer):
|
||||||
site_tag,
|
site_tag,
|
||||||
listener_config,
|
listener_config,
|
||||||
root_resource,
|
root_resource,
|
||||||
|
self.version_string,
|
||||||
),
|
),
|
||||||
self.tls_server_context_factory,
|
self.tls_server_context_factory,
|
||||||
)
|
)
|
||||||
|
@ -153,6 +154,7 @@ class SynapseHomeServer(HomeServer):
|
||||||
site_tag,
|
site_tag,
|
||||||
listener_config,
|
listener_config,
|
||||||
root_resource,
|
root_resource,
|
||||||
|
self.version_string,
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
logger.info("Synapse now listening on port %d", port)
|
logger.info("Synapse now listening on port %d", port)
|
||||||
|
|
|
@ -94,6 +94,7 @@ class MediaRepositoryServer(HomeServer):
|
||||||
site_tag,
|
site_tag,
|
||||||
listener_config,
|
listener_config,
|
||||||
root_resource,
|
root_resource,
|
||||||
|
self.version_string,
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -104,6 +104,7 @@ class PusherServer(HomeServer):
|
||||||
site_tag,
|
site_tag,
|
||||||
listener_config,
|
listener_config,
|
||||||
root_resource,
|
root_resource,
|
||||||
|
self.version_string,
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -281,6 +281,7 @@ class SynchrotronServer(HomeServer):
|
||||||
site_tag,
|
site_tag,
|
||||||
listener_config,
|
listener_config,
|
||||||
root_resource,
|
root_resource,
|
||||||
|
self.version_string,
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -126,6 +126,7 @@ class UserDirectoryServer(HomeServer):
|
||||||
site_tag,
|
site_tag,
|
||||||
listener_config,
|
listener_config,
|
||||||
root_resource,
|
root_resource,
|
||||||
|
self.version_string,
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -42,8 +42,7 @@ class AdditionalResource(Resource):
|
||||||
Resource.__init__(self)
|
Resource.__init__(self)
|
||||||
self._handler = handler
|
self._handler = handler
|
||||||
|
|
||||||
# these are required by the request_handler wrapper
|
# required by the request_handler wrapper
|
||||||
self.version_string = hs.version_string
|
|
||||||
self.clock = hs.get_clock()
|
self.clock = hs.get_clock()
|
||||||
|
|
||||||
def render(self, request):
|
def render(self, request):
|
||||||
|
|
|
@ -51,8 +51,8 @@ def wrap_json_request_handler(h):
|
||||||
Also adds logging as per wrap_request_handler_with_logging.
|
Also adds logging as per wrap_request_handler_with_logging.
|
||||||
|
|
||||||
The handler method must have a signature of "handle_foo(self, request)",
|
The handler method must have a signature of "handle_foo(self, request)",
|
||||||
where "self" must have "version_string" and "clock" attributes (and
|
where "self" must have a "clock" attribute (and "request" must be a
|
||||||
"request" must be a SynapseRequest).
|
SynapseRequest).
|
||||||
|
|
||||||
The handler must return a deferred. If the deferred succeeds we assume that
|
The handler must return a deferred. If the deferred succeeds we assume that
|
||||||
a response has been sent. If the deferred fails with a SynapseError we use
|
a response has been sent. If the deferred fails with a SynapseError we use
|
||||||
|
@ -75,7 +75,6 @@ def wrap_json_request_handler(h):
|
||||||
respond_with_json(
|
respond_with_json(
|
||||||
request, code, cs_exception(e), send_cors=True,
|
request, code, cs_exception(e), send_cors=True,
|
||||||
pretty_print=_request_user_agent_is_curl(request),
|
pretty_print=_request_user_agent_is_curl(request),
|
||||||
version_string=self.version_string,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
except Exception:
|
except Exception:
|
||||||
|
@ -98,7 +97,6 @@ def wrap_json_request_handler(h):
|
||||||
},
|
},
|
||||||
send_cors=True,
|
send_cors=True,
|
||||||
pretty_print=_request_user_agent_is_curl(request),
|
pretty_print=_request_user_agent_is_curl(request),
|
||||||
version_string=self.version_string,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
return wrap_request_handler_with_logging(wrapped_request_handler)
|
return wrap_request_handler_with_logging(wrapped_request_handler)
|
||||||
|
@ -192,7 +190,6 @@ class JsonResource(HttpServer, resource.Resource):
|
||||||
self.canonical_json = canonical_json
|
self.canonical_json = canonical_json
|
||||||
self.clock = hs.get_clock()
|
self.clock = hs.get_clock()
|
||||||
self.path_regexs = {}
|
self.path_regexs = {}
|
||||||
self.version_string = hs.version_string
|
|
||||||
self.hs = hs
|
self.hs = hs
|
||||||
|
|
||||||
def register_paths(self, method, path_patterns, callback):
|
def register_paths(self, method, path_patterns, callback):
|
||||||
|
@ -275,7 +272,6 @@ class JsonResource(HttpServer, resource.Resource):
|
||||||
send_cors=True,
|
send_cors=True,
|
||||||
response_code_message=response_code_message,
|
response_code_message=response_code_message,
|
||||||
pretty_print=_request_user_agent_is_curl(request),
|
pretty_print=_request_user_agent_is_curl(request),
|
||||||
version_string=self.version_string,
|
|
||||||
canonical_json=self.canonical_json,
|
canonical_json=self.canonical_json,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -326,7 +322,7 @@ class RootRedirect(resource.Resource):
|
||||||
|
|
||||||
def respond_with_json(request, code, json_object, send_cors=False,
|
def respond_with_json(request, code, json_object, send_cors=False,
|
||||||
response_code_message=None, pretty_print=False,
|
response_code_message=None, pretty_print=False,
|
||||||
version_string="", canonical_json=True):
|
canonical_json=True):
|
||||||
# could alternatively use request.notifyFinish() and flip a flag when
|
# could alternatively use request.notifyFinish() and flip a flag when
|
||||||
# the Deferred fires, but since the flag is RIGHT THERE it seems like
|
# the Deferred fires, but since the flag is RIGHT THERE it seems like
|
||||||
# a waste.
|
# a waste.
|
||||||
|
@ -348,12 +344,11 @@ def respond_with_json(request, code, json_object, send_cors=False,
|
||||||
request, code, json_bytes,
|
request, code, json_bytes,
|
||||||
send_cors=send_cors,
|
send_cors=send_cors,
|
||||||
response_code_message=response_code_message,
|
response_code_message=response_code_message,
|
||||||
version_string=version_string
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def respond_with_json_bytes(request, code, json_bytes, send_cors=False,
|
def respond_with_json_bytes(request, code, json_bytes, send_cors=False,
|
||||||
version_string="", response_code_message=None):
|
response_code_message=None):
|
||||||
"""Sends encoded JSON in response to the given request.
|
"""Sends encoded JSON in response to the given request.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
|
@ -367,7 +362,6 @@ def respond_with_json_bytes(request, code, json_bytes, send_cors=False,
|
||||||
|
|
||||||
request.setResponseCode(code, message=response_code_message)
|
request.setResponseCode(code, message=response_code_message)
|
||||||
request.setHeader(b"Content-Type", b"application/json")
|
request.setHeader(b"Content-Type", b"application/json")
|
||||||
request.setHeader(b"Server", version_string)
|
|
||||||
request.setHeader(b"Content-Length", b"%d" % (len(json_bytes),))
|
request.setHeader(b"Content-Length", b"%d" % (len(json_bytes),))
|
||||||
request.setHeader(b"Cache-Control", b"no-cache, no-store, must-revalidate")
|
request.setHeader(b"Cache-Control", b"no-cache, no-store, must-revalidate")
|
||||||
|
|
||||||
|
|
|
@ -77,6 +77,11 @@ class SynapseRequest(Request):
|
||||||
def get_user_agent(self):
|
def get_user_agent(self):
|
||||||
return self.requestHeaders.getRawHeaders(b"User-Agent", [None])[-1]
|
return self.requestHeaders.getRawHeaders(b"User-Agent", [None])[-1]
|
||||||
|
|
||||||
|
def render(self, resrc):
|
||||||
|
# override the Server header which is set by twisted
|
||||||
|
self.setHeader("Server", self.site.server_version_string)
|
||||||
|
return Request.render(self, resrc)
|
||||||
|
|
||||||
def _started_processing(self, servlet_name):
|
def _started_processing(self, servlet_name):
|
||||||
self.start_time = int(time.time() * 1000)
|
self.start_time = int(time.time() * 1000)
|
||||||
self.request_metrics = RequestMetrics()
|
self.request_metrics = RequestMetrics()
|
||||||
|
@ -151,6 +156,8 @@ class SynapseRequest(Request):
|
||||||
It is possible to update this afterwards by updating
|
It is possible to update this afterwards by updating
|
||||||
self.request_metrics.servlet_name.
|
self.request_metrics.servlet_name.
|
||||||
"""
|
"""
|
||||||
|
# TODO: we should probably just move this into render() and finish(),
|
||||||
|
# to save having to call a separate method.
|
||||||
self._started_processing(servlet_name)
|
self._started_processing(servlet_name)
|
||||||
yield
|
yield
|
||||||
self._finished_processing()
|
self._finished_processing()
|
||||||
|
@ -191,7 +198,8 @@ class SynapseSite(Site):
|
||||||
Subclass of a twisted http Site that does access logging with python's
|
Subclass of a twisted http Site that does access logging with python's
|
||||||
standard logging
|
standard logging
|
||||||
"""
|
"""
|
||||||
def __init__(self, logger_name, site_tag, config, resource, *args, **kwargs):
|
def __init__(self, logger_name, site_tag, config, resource,
|
||||||
|
server_version_string, *args, **kwargs):
|
||||||
Site.__init__(self, resource, *args, **kwargs)
|
Site.__init__(self, resource, *args, **kwargs)
|
||||||
|
|
||||||
self.site_tag = site_tag
|
self.site_tag = site_tag
|
||||||
|
@ -199,6 +207,7 @@ class SynapseSite(Site):
|
||||||
proxied = config.get("x_forwarded", False)
|
proxied = config.get("x_forwarded", False)
|
||||||
self.requestFactory = SynapseRequestFactory(self, proxied)
|
self.requestFactory = SynapseRequestFactory(self, proxied)
|
||||||
self.access_logger = logging.getLogger(logger_name)
|
self.access_logger = logging.getLogger(logger_name)
|
||||||
|
self.server_version_string = server_version_string
|
||||||
|
|
||||||
def log(self, request):
|
def log(self, request):
|
||||||
pass
|
pass
|
||||||
|
|
|
@ -176,7 +176,6 @@ class PushersRemoveRestServlet(RestServlet):
|
||||||
|
|
||||||
request.setResponseCode(200)
|
request.setResponseCode(200)
|
||||||
request.setHeader(b"Content-Type", b"text/html; charset=utf-8")
|
request.setHeader(b"Content-Type", b"text/html; charset=utf-8")
|
||||||
request.setHeader(b"Server", self.hs.version_string)
|
|
||||||
request.setHeader(b"Content-Length", b"%d" % (
|
request.setHeader(b"Content-Length", b"%d" % (
|
||||||
len(PushersRemoveRestServlet.SUCCESS_HTML),
|
len(PushersRemoveRestServlet.SUCCESS_HTML),
|
||||||
))
|
))
|
||||||
|
|
|
@ -129,7 +129,6 @@ class AuthRestServlet(RestServlet):
|
||||||
html_bytes = html.encode("utf8")
|
html_bytes = html.encode("utf8")
|
||||||
request.setResponseCode(200)
|
request.setResponseCode(200)
|
||||||
request.setHeader(b"Content-Type", b"text/html; charset=utf-8")
|
request.setHeader(b"Content-Type", b"text/html; charset=utf-8")
|
||||||
request.setHeader(b"Server", self.hs.version_string)
|
|
||||||
request.setHeader(b"Content-Length", b"%d" % (len(html_bytes),))
|
request.setHeader(b"Content-Length", b"%d" % (len(html_bytes),))
|
||||||
|
|
||||||
request.write(html_bytes)
|
request.write(html_bytes)
|
||||||
|
@ -175,7 +174,6 @@ class AuthRestServlet(RestServlet):
|
||||||
html_bytes = html.encode("utf8")
|
html_bytes = html.encode("utf8")
|
||||||
request.setResponseCode(200)
|
request.setResponseCode(200)
|
||||||
request.setHeader(b"Content-Type", b"text/html; charset=utf-8")
|
request.setHeader(b"Content-Type", b"text/html; charset=utf-8")
|
||||||
request.setHeader(b"Server", self.hs.version_string)
|
|
||||||
request.setHeader(b"Content-Length", b"%d" % (len(html_bytes),))
|
request.setHeader(b"Content-Length", b"%d" % (len(html_bytes),))
|
||||||
|
|
||||||
request.write(html_bytes)
|
request.write(html_bytes)
|
||||||
|
|
|
@ -49,7 +49,6 @@ class LocalKey(Resource):
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, hs):
|
def __init__(self, hs):
|
||||||
self.version_string = hs.version_string
|
|
||||||
self.response_body = encode_canonical_json(
|
self.response_body = encode_canonical_json(
|
||||||
self.response_json_object(hs.config)
|
self.response_json_object(hs.config)
|
||||||
)
|
)
|
||||||
|
@ -84,7 +83,6 @@ class LocalKey(Resource):
|
||||||
def render_GET(self, request):
|
def render_GET(self, request):
|
||||||
return respond_with_json_bytes(
|
return respond_with_json_bytes(
|
||||||
request, 200, self.response_body,
|
request, 200, self.response_body,
|
||||||
version_string=self.version_string
|
|
||||||
)
|
)
|
||||||
|
|
||||||
def getChild(self, name, request):
|
def getChild(self, name, request):
|
||||||
|
|
|
@ -63,7 +63,6 @@ class LocalKey(Resource):
|
||||||
isLeaf = True
|
isLeaf = True
|
||||||
|
|
||||||
def __init__(self, hs):
|
def __init__(self, hs):
|
||||||
self.version_string = hs.version_string
|
|
||||||
self.config = hs.config
|
self.config = hs.config
|
||||||
self.clock = hs.clock
|
self.clock = hs.clock
|
||||||
self.update_response_body(self.clock.time_msec())
|
self.update_response_body(self.clock.time_msec())
|
||||||
|
@ -115,5 +114,4 @@ class LocalKey(Resource):
|
||||||
self.update_response_body(time_now)
|
self.update_response_body(time_now)
|
||||||
return respond_with_json_bytes(
|
return respond_with_json_bytes(
|
||||||
request, 200, self.response_body,
|
request, 200, self.response_body,
|
||||||
version_string=self.version_string
|
|
||||||
)
|
)
|
||||||
|
|
|
@ -93,7 +93,6 @@ class RemoteKey(Resource):
|
||||||
def __init__(self, hs):
|
def __init__(self, hs):
|
||||||
self.keyring = hs.get_keyring()
|
self.keyring = hs.get_keyring()
|
||||||
self.store = hs.get_datastore()
|
self.store = hs.get_datastore()
|
||||||
self.version_string = hs.version_string
|
|
||||||
self.clock = hs.get_clock()
|
self.clock = hs.get_clock()
|
||||||
self.federation_domain_whitelist = hs.config.federation_domain_whitelist
|
self.federation_domain_whitelist = hs.config.federation_domain_whitelist
|
||||||
|
|
||||||
|
@ -242,5 +241,4 @@ class RemoteKey(Resource):
|
||||||
|
|
||||||
respond_with_json_bytes(
|
respond_with_json_bytes(
|
||||||
request, 200, result_io.getvalue(),
|
request, 200, result_io.getvalue(),
|
||||||
version_string=self.version_string
|
|
||||||
)
|
)
|
||||||
|
|
|
@ -37,9 +37,8 @@ class DownloadResource(Resource):
|
||||||
self.media_repo = media_repo
|
self.media_repo = media_repo
|
||||||
self.server_name = hs.hostname
|
self.server_name = hs.hostname
|
||||||
|
|
||||||
# Both of these are expected by @request_handler()
|
# this is expected by @wrap_json_request_handler
|
||||||
self.clock = hs.get_clock()
|
self.clock = hs.get_clock()
|
||||||
self.version_string = hs.version_string
|
|
||||||
|
|
||||||
def render_GET(self, request):
|
def render_GET(self, request):
|
||||||
self._async_render_GET(request)
|
self._async_render_GET(request)
|
||||||
|
|
|
@ -58,7 +58,6 @@ class PreviewUrlResource(Resource):
|
||||||
|
|
||||||
self.auth = hs.get_auth()
|
self.auth = hs.get_auth()
|
||||||
self.clock = hs.get_clock()
|
self.clock = hs.get_clock()
|
||||||
self.version_string = hs.version_string
|
|
||||||
self.filepaths = media_repo.filepaths
|
self.filepaths = media_repo.filepaths
|
||||||
self.max_spider_size = hs.config.max_spider_size
|
self.max_spider_size = hs.config.max_spider_size
|
||||||
self.server_name = hs.hostname
|
self.server_name = hs.hostname
|
||||||
|
|
|
@ -44,7 +44,6 @@ class ThumbnailResource(Resource):
|
||||||
self.media_storage = media_storage
|
self.media_storage = media_storage
|
||||||
self.dynamic_thumbnails = hs.config.dynamic_thumbnails
|
self.dynamic_thumbnails = hs.config.dynamic_thumbnails
|
||||||
self.server_name = hs.hostname
|
self.server_name = hs.hostname
|
||||||
self.version_string = hs.version_string
|
|
||||||
self.clock = hs.get_clock()
|
self.clock = hs.get_clock()
|
||||||
|
|
||||||
def render_GET(self, request):
|
def render_GET(self, request):
|
||||||
|
|
|
@ -41,7 +41,6 @@ class UploadResource(Resource):
|
||||||
self.server_name = hs.hostname
|
self.server_name = hs.hostname
|
||||||
self.auth = hs.get_auth()
|
self.auth = hs.get_auth()
|
||||||
self.max_upload_size = hs.config.max_upload_size
|
self.max_upload_size = hs.config.max_upload_size
|
||||||
self.version_string = hs.version_string
|
|
||||||
self.clock = hs.get_clock()
|
self.clock = hs.get_clock()
|
||||||
|
|
||||||
def render_POST(self, request):
|
def render_POST(self, request):
|
||||||
|
|
Loading…
Reference in New Issue