summary refs log tree commit diff
path: root/packages/overlays/matrix-synapse/patches/0025-Do-not-auto-provision-missing-users-devices-when-del.patch
diff options
context:
space:
mode:
Diffstat (limited to 'packages/overlays/matrix-synapse/patches/0025-Do-not-auto-provision-missing-users-devices-when-del.patch')
-rw-r--r--packages/overlays/matrix-synapse/patches/0025-Do-not-auto-provision-missing-users-devices-when-del.patch129
1 files changed, 0 insertions, 129 deletions
diff --git a/packages/overlays/matrix-synapse/patches/0025-Do-not-auto-provision-missing-users-devices-when-del.patch b/packages/overlays/matrix-synapse/patches/0025-Do-not-auto-provision-missing-users-devices-when-del.patch
deleted file mode 100644

index 892a43f..0000000 --- a/packages/overlays/matrix-synapse/patches/0025-Do-not-auto-provision-missing-users-devices-when-del.patch +++ /dev/null
@@ -1,129 +0,0 @@ -From 74be5cfdbc2208f0b34d9ab75f99994bd8ed217d Mon Sep 17 00:00:00 2001 -From: Quentin Gliech <quenting@element.io> -Date: Fri, 2 May 2025 12:13:26 +0200 -Subject: [PATCH 25/74] Do not auto-provision missing users & devices when - delegating auth to MAS (#18181) - -Since MAS 0.13.0, the provisionning of devices and users is done -synchronously and reliably enough that we don't need to auto-provision -on the Synapse side anymore. - -It's important to remove this behaviour if we want to start caching -token introspection results. ---- - changelog.d/18181.misc | 1 + - synapse/api/auth/msc3861_delegated.py | 39 +++++++------------------ - tests/handlers/test_oauth_delegation.py | 10 +++++++ - 3 files changed, 22 insertions(+), 28 deletions(-) - create mode 100644 changelog.d/18181.misc - -diff --git a/changelog.d/18181.misc b/changelog.d/18181.misc -new file mode 100644 -index 0000000000..d9ba2f1dd1 ---- /dev/null -+++ b/changelog.d/18181.misc -@@ -0,0 +1 @@ -+Stop auto-provisionning missing users & devices when delegating auth to Matrix Authentication Service. Requires MAS 0.13.0 or later. -diff --git a/synapse/api/auth/msc3861_delegated.py b/synapse/api/auth/msc3861_delegated.py -index 9ded3366e3..e500a06afe 100644 ---- a/synapse/api/auth/msc3861_delegated.py -+++ b/synapse/api/auth/msc3861_delegated.py -@@ -39,7 +39,6 @@ from synapse.api.errors import ( - HttpResponseException, - InvalidClientTokenError, - OAuthInsufficientScopeError, -- StoreError, - SynapseError, - UnrecognizedRequestError, - ) -@@ -512,7 +511,7 @@ class MSC3861DelegatedAuth(BaseAuth): - raise InvalidClientTokenError("No scope in token granting user rights") - - # Match via the sub claim -- sub: Optional[str] = introspection_result.get_sub() -+ sub = introspection_result.get_sub() - if sub is None: - raise InvalidClientTokenError( - "Invalid sub claim in the introspection result" -@@ -525,29 +524,20 @@ class MSC3861DelegatedAuth(BaseAuth): - # If we could not find a user via the external_id, it either does not exist, - # or the external_id was never recorded - -- # TODO: claim mapping should be configurable -- username: Optional[str] = introspection_result.get_username() -- if username is None or not isinstance(username, str): -+ username = introspection_result.get_username() -+ if username is None: - raise AuthError( - 500, - "Invalid username claim in the introspection result", - ) - user_id = UserID(username, self._hostname) - -- # First try to find a user from the username claim -+ # Try to find a user from the username claim - user_info = await self.store.get_user_by_id(user_id=user_id.to_string()) - if user_info is None: -- # If the user does not exist, we should create it on the fly -- # TODO: we could use SCIM to provision users ahead of time and listen -- # for SCIM SET events if those ever become standard: -- # https://datatracker.ietf.org/doc/html/draft-hunt-scim-notify-00 -- -- # TODO: claim mapping should be configurable -- # If present, use the name claim as the displayname -- name: Optional[str] = introspection_result.get_name() -- -- await self.store.register_user( -- user_id=user_id.to_string(), create_profile_with_displayname=name -+ raise AuthError( -+ 500, -+ "User not found", - ) - - # And record the sub as external_id -@@ -587,17 +577,10 @@ class MSC3861DelegatedAuth(BaseAuth): - "Invalid device ID in introspection result", - ) - -- # Create the device on the fly if it does not exist -- try: -- await self.store.get_device( -- user_id=user_id.to_string(), device_id=device_id -- ) -- except StoreError: -- await self.store.store_device( -- user_id=user_id.to_string(), -- device_id=device_id, -- initial_device_display_name="OIDC-native client", -- ) -+ # Make sure the device exists -+ await self.store.get_device( -+ user_id=user_id.to_string(), device_id=device_id -+ ) - - # TODO: there is a few things missing in the requester here, which still need - # to be figured out, like: -diff --git a/tests/handlers/test_oauth_delegation.py b/tests/handlers/test_oauth_delegation.py -index 034a1594d9..934bfee0bc 100644 ---- a/tests/handlers/test_oauth_delegation.py -+++ b/tests/handlers/test_oauth_delegation.py -@@ -147,6 +147,16 @@ class MSC3861OAuthDelegation(HomeserverTestCase): - - return hs - -+ def prepare( -+ self, reactor: MemoryReactor, clock: Clock, homeserver: HomeServer -+ ) -> None: -+ # Provision the user and the device we use in the tests. -+ store = homeserver.get_datastores().main -+ self.get_success(store.register_user(USER_ID)) -+ self.get_success( -+ store.store_device(USER_ID, DEVICE, initial_device_display_name=None) -+ ) -+ - def _assertParams(self) -> None: - """Assert that the request parameters are correct.""" - params = parse_qs(self.http_client.request.call_args[1]["data"].decode("utf-8")) --- -2.49.0 -