Skip to content
This repository was archived by the owner on Apr 26, 2024. It is now read-only.

Commit 3e0cfd4

Browse files
authored
Return JSON errors for unknown resources under /matrix/client. (#11602)
Instead of returning 404 errors with HTML bodies when an unknown prefix was requested (e.g. /matrix/client/v1 before Synapse v1.49.0).
1 parent 7a7ca8f commit 3e0cfd4

File tree

3 files changed

+6
-10
lines changed

3 files changed

+6
-10
lines changed

changelog.d/11602.bugfix

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Fix a long-standing bug that some unknown endpoints would return HTML error pages instead of JSON `M_UNRECOGNIZED` errors.

synapse/app/homeserver.py

+2-7
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import synapse.config.logger
2828
from synapse import events
2929
from synapse.api.urls import (
30+
CLIENT_API_PREFIX,
3031
FEDERATION_PREFIX,
3132
LEGACY_MEDIA_PREFIX,
3233
MEDIA_R0_PREFIX,
@@ -192,13 +193,7 @@ def _configure_named_resource(
192193

193194
resources.update(
194195
{
195-
"/_matrix/client/api/v1": client_resource,
196-
"/_matrix/client/r0": client_resource,
197-
"/_matrix/client/v1": client_resource,
198-
"/_matrix/client/v3": client_resource,
199-
"/_matrix/client/unstable": client_resource,
200-
"/_matrix/client/v2_alpha": client_resource,
201-
"/_matrix/client/versions": client_resource,
196+
CLIENT_API_PREFIX: client_resource,
202197
"/.well-known": well_known_resource(self),
203198
"/_synapse/admin": AdminRestResource(self),
204199
**build_synapse_client_resource_tree(self),

synapse/http/server.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -530,7 +530,7 @@ class RootRedirect(resource.Resource):
530530
"""Redirects the root '/' path to another path."""
531531

532532
def __init__(self, path: str):
533-
resource.Resource.__init__(self)
533+
super().__init__()
534534
self.url = path
535535

536536
def render_GET(self, request: Request) -> bytes:
@@ -539,7 +539,7 @@ def render_GET(self, request: Request) -> bytes:
539539
def getChild(self, name: str, request: Request) -> resource.Resource:
540540
if len(name) == 0:
541541
return self # select ourselves as the child to render
542-
return resource.Resource.getChild(self, name, request)
542+
return super().getChild(name, request)
543543

544544

545545
class OptionsResource(resource.Resource):
@@ -556,7 +556,7 @@ def render_OPTIONS(self, request: Request) -> bytes:
556556
def getChildWithDefault(self, path: str, request: Request) -> resource.Resource:
557557
if request.method == b"OPTIONS":
558558
return self # select ourselves as the child to render
559-
return resource.Resource.getChildWithDefault(self, path, request)
559+
return super().getChildWithDefault(path, request)
560560

561561

562562
class RootOptionsRedirectResource(OptionsResource, RootRedirect):

0 commit comments

Comments
 (0)