summary refs log tree commit diff
path: root/synapse/http/server.py
diff options
context:
space:
mode:
authorErik Johnston <erik@matrix.org>2020-05-26 09:43:21 +0100
committerErik Johnston <erik@matrix.org>2020-05-26 09:43:21 +0100
commit8beca8e21f16e36b94fc79ff31702bb57e4a2f17 (patch)
treec837d22a8a02dc71581aa1207ecd19b95625b4bf /synapse/http/server.py
parentMerge branch 'develop' of github.com:matrix-org/synapse into matrix-org-hotfixes (diff)
parentSimplify reap_monthly_active_users (#7558) (diff)
downloadsynapse-8beca8e21f16e36b94fc79ff31702bb57e4a2f17.tar.xz
Merge branch 'develop' of github.com:matrix-org/synapse into matrix-org-hotfixes
Diffstat (limited to 'synapse/http/server.py')
-rw-r--r--synapse/http/server.py23
1 files changed, 20 insertions, 3 deletions
diff --git a/synapse/http/server.py b/synapse/http/server.py

index 042a605198..9cc2e2e154 100644 --- a/synapse/http/server.py +++ b/synapse/http/server.py
@@ -350,9 +350,6 @@ class JsonResource(HttpServer, resource.Resource): register_paths, so will return (possibly via Deferred) either None, or a tuple of (http code, response body). """ - if request.method == b"OPTIONS": - return _options_handler, "options_request_handler", {} - request_path = request.path.decode("ascii") # Loop through all the registered callbacks to check if the method @@ -448,6 +445,26 @@ class RootRedirect(resource.Resource): return resource.Resource.getChild(self, name, request) +class OptionsResource(resource.Resource): + """Responds to OPTION requests for itself and all children.""" + + def render_OPTIONS(self, request): + code, response_json_object = _options_handler(request) + + return respond_with_json( + request, code, response_json_object, send_cors=True, canonical_json=False, + ) + + def getChildWithDefault(self, path, request): + if request.method == b"OPTIONS": + return self # select ourselves as the child to render + return resource.Resource.getChildWithDefault(self, path, request) + + +class RootOptionsRedirectResource(OptionsResource, RootRedirect): + pass + + def respond_with_json( request, code,