forked from MirrorHub/synapse
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).
This commit is contained in:
parent
7a7ca8f226
commit
3e0cfd447e
1
changelog.d/11602.bugfix
Normal file
1
changelog.d/11602.bugfix
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Fix a long-standing bug that some unknown endpoints would return HTML error pages instead of JSON `M_UNRECOGNIZED` errors.
|
|
@ -27,6 +27,7 @@ import synapse
|
||||||
import synapse.config.logger
|
import synapse.config.logger
|
||||||
from synapse import events
|
from synapse import events
|
||||||
from synapse.api.urls import (
|
from synapse.api.urls import (
|
||||||
|
CLIENT_API_PREFIX,
|
||||||
FEDERATION_PREFIX,
|
FEDERATION_PREFIX,
|
||||||
LEGACY_MEDIA_PREFIX,
|
LEGACY_MEDIA_PREFIX,
|
||||||
MEDIA_R0_PREFIX,
|
MEDIA_R0_PREFIX,
|
||||||
|
@ -192,13 +193,7 @@ class SynapseHomeServer(HomeServer):
|
||||||
|
|
||||||
resources.update(
|
resources.update(
|
||||||
{
|
{
|
||||||
"/_matrix/client/api/v1": client_resource,
|
CLIENT_API_PREFIX: client_resource,
|
||||||
"/_matrix/client/r0": client_resource,
|
|
||||||
"/_matrix/client/v1": client_resource,
|
|
||||||
"/_matrix/client/v3": client_resource,
|
|
||||||
"/_matrix/client/unstable": client_resource,
|
|
||||||
"/_matrix/client/v2_alpha": client_resource,
|
|
||||||
"/_matrix/client/versions": client_resource,
|
|
||||||
"/.well-known": well_known_resource(self),
|
"/.well-known": well_known_resource(self),
|
||||||
"/_synapse/admin": AdminRestResource(self),
|
"/_synapse/admin": AdminRestResource(self),
|
||||||
**build_synapse_client_resource_tree(self),
|
**build_synapse_client_resource_tree(self),
|
||||||
|
|
|
@ -530,7 +530,7 @@ class RootRedirect(resource.Resource):
|
||||||
"""Redirects the root '/' path to another path."""
|
"""Redirects the root '/' path to another path."""
|
||||||
|
|
||||||
def __init__(self, path: str):
|
def __init__(self, path: str):
|
||||||
resource.Resource.__init__(self)
|
super().__init__()
|
||||||
self.url = path
|
self.url = path
|
||||||
|
|
||||||
def render_GET(self, request: Request) -> bytes:
|
def render_GET(self, request: Request) -> bytes:
|
||||||
|
@ -539,7 +539,7 @@ class RootRedirect(resource.Resource):
|
||||||
def getChild(self, name: str, request: Request) -> resource.Resource:
|
def getChild(self, name: str, request: Request) -> resource.Resource:
|
||||||
if len(name) == 0:
|
if len(name) == 0:
|
||||||
return self # select ourselves as the child to render
|
return self # select ourselves as the child to render
|
||||||
return resource.Resource.getChild(self, name, request)
|
return super().getChild(name, request)
|
||||||
|
|
||||||
|
|
||||||
class OptionsResource(resource.Resource):
|
class OptionsResource(resource.Resource):
|
||||||
|
@ -556,7 +556,7 @@ class OptionsResource(resource.Resource):
|
||||||
def getChildWithDefault(self, path: str, request: Request) -> resource.Resource:
|
def getChildWithDefault(self, path: str, request: Request) -> resource.Resource:
|
||||||
if request.method == b"OPTIONS":
|
if request.method == b"OPTIONS":
|
||||||
return self # select ourselves as the child to render
|
return self # select ourselves as the child to render
|
||||||
return resource.Resource.getChildWithDefault(self, path, request)
|
return super().getChildWithDefault(path, request)
|
||||||
|
|
||||||
|
|
||||||
class RootOptionsRedirectResource(OptionsResource, RootRedirect):
|
class RootOptionsRedirectResource(OptionsResource, RootRedirect):
|
||||||
|
|
Loading…
Reference in a new issue