From e3e847083e601adef576b3a2464d581a8362b620 Mon Sep 17 00:00:00 2001 From: Quentin Gliech Date: Mon, 2 Nov 2026 16:55:22 +0100 Subject: [PATCH 1/2] [v1.164] Restore the unstable MSC2965 `/auth_metadata` endpoint (#20460) This is a partial revert of https://github.com/element-hq/synapse/pull/20143 to restore the unstable `/auth_metadata` C-S API endpoint. The details on why are in #20459 Since this is affecting live clients (Rust SDK-based clients including Element X iOS and Android), this PR is against the 1.164 release branch as we plan to release 1.164.2 with this fix. The CI failures are unrelated and were already fixed on `develop` in https://github.com/element-hq/synapse/pull/20386. Please look at `develop` counterpart of this PR https://github.com/element-hq/synapse/pull/20461 for the green CI --- changelog.d/20460.bugfix | 1 + synapse/rest/client/auth_metadata.py | 21 ++++++++++++++++----- tests/rest/client/test_auth_metadata.py | 21 +++++++++++++++++++-- 3 files changed, 36 insertions(+), 7 deletions(-) create mode 100644 changelog.d/20460.bugfix diff --git a/changelog.d/20460.bugfix b/changelog.d/20460.bugfix new file mode 100644 index 0000000000..9a4101ebc6 --- /dev/null +++ b/changelog.d/20460.bugfix @@ -0,0 +1 @@ +Restore the unstable [MSC2965](https://github.com/matrix-org/matrix-spec-proposals/pull/2965) `/auth_metadata` endpoint, which Element X clients still request after upgrading from Synapse 1.162 or earlier, causing them to fail to refresh their access token. diff --git a/synapse/rest/client/auth_metadata.py b/synapse/rest/client/auth_metadata.py index d8f172d0bd..a6b8c19502 100644 --- a/synapse/rest/client/auth_metadata.py +++ b/synapse/rest/client/auth_metadata.py @@ -30,11 +30,22 @@ class AuthMetadataServlet(RestServlet): Advertises the OAuth 2.0 server metadata for the homeserver. """ - PATTERNS = client_patterns( - "/auth_metadata$", - releases=("v1",), - unstable=False, - ) + # The unstable path is still requested by matrix-rust-sdk clients that last saw + # `/versions` before we advertised Matrix v1.15, and can be removed once those + # clients no longer get stuck on it. + # See https://github.com/element-hq/synapse/issues/20459 + PATTERNS = [ + *client_patterns( + "/auth_metadata$", + releases=("v1",), + unstable=False, + ), + *client_patterns( + "/org.matrix.msc2965/auth_metadata$", + releases=(), + unstable=True, + ), + ] def __init__(self, hs: "HomeServer"): super().__init__() diff --git a/tests/rest/client/test_auth_metadata.py b/tests/rest/client/test_auth_metadata.py index 57fe16241d..0e1310f74c 100644 --- a/tests/rest/client/test_auth_metadata.py +++ b/tests/rest/client/test_auth_metadata.py @@ -21,6 +21,8 @@ from http import HTTPStatus from typing import ClassVar from unittest.mock import Mock +from parameterized import parameterized_class + from twisted.internet.testing import MemoryReactor from synapse.api.auth.mas import MasDelegatedAuth @@ -32,6 +34,13 @@ from synapse.util.clock import Clock from tests.unittest import HomeserverTestCase +@parameterized_class( + ("endpoint",), + [ + ("/_matrix/client/unstable/org.matrix.msc2965/auth_metadata",), + ("/_matrix/client/v1/auth_metadata",), + ], +) class AuthMetadataMasDisabledTestCase(HomeserverTestCase): endpoint: ClassVar[str] servlets = [ @@ -40,11 +49,19 @@ class AuthMetadataMasDisabledTestCase(HomeserverTestCase): def test_returns_404_when_mas_disabled(self) -> None: # Make an unauthenticated request for the discovery info. - channel = self.make_request("GET", "/_matrix/client/v1/auth_metadata") + channel = self.make_request("GET", self.endpoint) self.assertEqual(channel.code, HTTPStatus.NOT_FOUND) +@parameterized_class( + ("endpoint",), + [ + ("/_matrix/client/unstable/org.matrix.msc2965/auth_metadata",), + ("/_matrix/client/v1/auth_metadata",), + ], +) class AuthMetadataMasEnabledTestCase(HomeserverTestCase): + endpoint: ClassVar[str] servlets = [ auth_metadata.register_servlets, ] @@ -72,7 +89,7 @@ class AuthMetadataMasEnabledTestCase(HomeserverTestCase): self.auth.auth_metadata.return_value = test_auth_metadata - channel = self.make_request("GET", "/_matrix/client/v1/auth_metadata") + channel = self.make_request("GET", self.endpoint) self.assertEqual(channel.code, HTTPStatus.OK, channel.result) self.assertEqual(channel.json_body, test_auth_metadata) From c3a58b8a6ae499fe3d66c3c6cc6a728f9c953a73 Mon Sep 17 00:00:00 2001 From: Eric Eastwood Date: Mon, 2 Nov 2026 10:01:57 -0600 Subject: [PATCH 2/2] 1.164.2 --- CHANGES.md | 9 +++++++++ changelog.d/20460.bugfix | 1 - debian/changelog | 6 ++++++ pyproject.toml | 2 +- 4 files changed, 16 insertions(+), 2 deletions(-) delete mode 100644 changelog.d/20460.bugfix diff --git a/CHANGES.md b/CHANGES.md index 0a03b7e2dc..6201e1c7c8 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,3 +1,12 @@ +# Synapse 1.164.2 (2026-11-02) + +## Bugfixes + +- Restore the unstable [MSC2965](https://github.com/matrix-org/matrix-spec-proposals/pull/2965) `/auth_metadata` endpoint, which Element X clients still request after upgrading from Synapse 1.162 or earlier, causing them to fail to refresh their access token. ([\#20460](https://github.com/element-hq/synapse/issues/20460)) + + + + # Synapse 1.164.1 (2026-10-28) ## Bugfixes diff --git a/changelog.d/20460.bugfix b/changelog.d/20460.bugfix deleted file mode 100644 index 9a4101ebc6..0000000000 --- a/changelog.d/20460.bugfix +++ /dev/null @@ -1 +0,0 @@ -Restore the unstable [MSC2965](https://github.com/matrix-org/matrix-spec-proposals/pull/2965) `/auth_metadata` endpoint, which Element X clients still request after upgrading from Synapse 1.162 or earlier, causing them to fail to refresh their access token. diff --git a/debian/changelog b/debian/changelog index 115a79cfc9..cb02e48046 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +matrix-synapse-py3 (1.164.2) stable; urgency=medium + + * New synapse release 1.164.2. + + -- Synapse Packaging team Mon, 02 Nov 2026 15:59:43 +0000 + matrix-synapse-py3 (1.164.1) stable; urgency=medium * New synapse release 1.164.1. diff --git a/pyproject.toml b/pyproject.toml index 172b1c3aec..d6856a61c0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "matrix-synapse" -version = "1.164.1" +version = "1.164.2" description = "Homeserver for the Matrix decentralised comms protocol" readme = "README.rst" authors = [