from audience_common.cache.backends import AsyncCache from pyxdi import Module, provider from campaigns.auth.authorization import ( AuthorizationBackend, FullAccessAuthorizationBackend, PermissionsAuthorizationBackend, ) from campaigns.auth.services import AuthService from campaigns.config import AppSettings from campaigns.connectors.ows_permissions import OwsPermissionsClient class AuthModule(Module): @provider(scope="singleton") def authorization_backend( self, settings: AppSettings, ows_permissions_client: OwsPermissionsClient, cache: AsyncCache, ) -> AuthorizationBackend: # Local/dev environment only if settings.auth_allow_full_access: return FullAccessAuthorizationBackend() return PermissionsAuthorizationBackend( ows_permissions_client=ows_permissions_client, cache=cache, cache_timeout=settings.account_access_cache_timeout, ) @provider(scope="singleton") def auth_service(self, authorization_backend: AuthorizationBackend) -> AuthService: return AuthService(authorization_backend=authorization_backend)