summary refs log tree commit diff
path: root/synapse/api/auth/internal.py
diff options
context:
space:
mode:
authorErik Johnston <erikj@element.io>2024-07-05 13:04:27 +0100
committerGitHub <noreply@github.com>2024-07-05 13:04:27 +0100
commit8e9e6f1a0a98d132ba4e57c394eabc7750aead84 (patch)
tree71c727d7ced1b7588df6cee2015d4514c4b95f5b /synapse/api/auth/internal.py
parentFinish up work to allow per-user feature flags (#17392) (diff)
downloadsynapse-8e9e6f1a0a98d132ba4e57c394eabc7750aead84.tar.xz
Allow enabling sliding sync per-user (#17393)
Based on #17392
Diffstat (limited to 'synapse/api/auth/internal.py')
-rw-r--r--synapse/api/auth/internal.py29
1 files changed, 29 insertions, 0 deletions
diff --git a/synapse/api/auth/internal.py b/synapse/api/auth/internal.py

index 2878f3e6e9..9fd4db68e1 100644 --- a/synapse/api/auth/internal.py +++ b/synapse/api/auth/internal.py
@@ -28,6 +28,7 @@ from synapse.api.errors import ( Codes, InvalidClientTokenError, MissingClientTokenError, + UnrecognizedRequestError, ) from synapse.http.site import SynapseRequest from synapse.logging.opentracing import active_span, force_tracing, start_active_span @@ -38,8 +39,10 @@ from . import GUEST_DEVICE_ID from .base import BaseAuth if TYPE_CHECKING: + from synapse.rest.admin.experimental_features import ExperimentalFeature from synapse.server import HomeServer + logger = logging.getLogger(__name__) @@ -106,6 +109,32 @@ class InternalAuth(BaseAuth): parent_span.set_tag("appservice_id", requester.app_service.id) return requester + async def get_user_by_req_experimental_feature( + self, + request: SynapseRequest, + feature: "ExperimentalFeature", + allow_guest: bool = False, + allow_expired: bool = False, + allow_locked: bool = False, + ) -> Requester: + try: + requester = await self.get_user_by_req( + request, + allow_guest=allow_guest, + allow_expired=allow_expired, + allow_locked=allow_locked, + ) + if await self.store.is_feature_enabled(requester.user.to_string(), feature): + return requester + + raise UnrecognizedRequestError(code=404) + except (AuthError, InvalidClientTokenError): + if feature.is_globally_enabled(self.hs.config): + # If its globally enabled then return the auth error + raise + + raise UnrecognizedRequestError(code=404) + @cancellable async def _wrapped_get_user_by_req( self,