diff --git a/synapse/app/homeserver.py b/synapse/app/homeserver.py index f7766482e9be..745e7041414f 100644 --- a/synapse/app/homeserver.py +++ b/synapse/app/homeserver.py @@ -195,10 +195,10 @@ def _configure_named_resource( resources.update( { - **build_synapse_client_resource_tree(self), CLIENT_API_PREFIX: client_resource, "/.well-known": well_known_resource(self), "/_synapse/admin": AdminRestResource(self), + **build_synapse_client_resource_tree(self), } ) diff --git a/synapse/rest/client/pusher.py b/synapse/rest/client/pusher.py index 3d1ba2813c03..30ca53cf2f29 100644 --- a/synapse/rest/client/pusher.py +++ b/synapse/rest/client/pusher.py @@ -26,6 +26,7 @@ from synapse.http.site import SynapseRequest from synapse.push import PusherConfigException from synapse.rest.client._base import client_patterns +from synapse.rest.synapse.client.unsubscribe import UnsubscribeResource from synapse.types import JsonDict if TYPE_CHECKING: @@ -132,6 +133,23 @@ async def on_POST(self, request: SynapseRequest) -> Tuple[int, JsonDict]: return 200, {} +class LegacyPushersRemoveRestServlet(RestServlet): + """ + A servlet to handle legacy "email unsubscribe" links, forwarding requests to the ``UnsubscribeResource`` + """ + + PATTERNS = client_patterns("/pushers/remove$", releases=[], v1=False, unstable=True) + + def __init__(self, hs: "HomeServer"): + super().__init__() + self._resource = UnsubscribeResource(hs) + + async def on_GET(self, request: SynapseRequest) -> None: + # Forward the request to the UnsubscribeResource + await self._resource._async_render(request) + + def register_servlets(hs: "HomeServer", http_server: HttpServer) -> None: PushersRestServlet(hs).register(http_server) PushersSetRestServlet(hs).register(http_server) + LegacyPushersRemoveRestServlet(hs).register(http_server) diff --git a/synapse/rest/synapse/client/__init__.py b/synapse/rest/synapse/client/__init__.py index a4d9300d8730..e55924f5979b 100644 --- a/synapse/rest/synapse/client/__init__.py +++ b/synapse/rest/synapse/client/__init__.py @@ -44,8 +44,6 @@ def build_synapse_client_resource_tree(hs: "HomeServer") -> Mapping[str, Resourc "/_synapse/client/sso_register": SsoRegisterResource(hs), # Unsubscribe to notification emails link "/_synapse/client/unsubscribe": UnsubscribeResource(hs), - # Legacy endpoint - "/_matrix/client/unstable/pushers/remove": UnsubscribeResource(hs), } # provider-specific SSO bits. Only load these if they are enabled, since they