| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 | 
							- from typing import Optional
 
- from fastapi import Depends
 
- from fastapi import Request
 
- from fastapi.security import HTTPBearer
 
- from fastapi.security import OAuth2AuthorizationCodeBearer
 
- from clean_python import PermissionDenied
 
- from clean_python.oauth2 import BaseTokenVerifier
 
- from clean_python.oauth2 import NoAuthTokenVerifier
 
- from clean_python.oauth2 import OAuth2SPAClientSettings
 
- from clean_python.oauth2 import Token
 
- from clean_python.oauth2 import TokenVerifier
 
- from clean_python.oauth2 import TokenVerifierSettings
 
- __all__ = ["get_token", "RequiresScope"]
 
- verifier: Optional[BaseTokenVerifier] = None
 
- def clear_verifier() -> None:
 
-     global verifier
 
-     verifier = None
 
- def set_verifier(settings: Optional[TokenVerifierSettings]) -> None:
 
-     global verifier
 
-     if settings is None:
 
-         verifier = NoAuthTokenVerifier()
 
-     else:
 
-         verifier = TokenVerifier(settings=settings)
 
- def get_token(request: Request) -> Token:
 
-     """A fastapi 'dependable' yielding the validated token"""
 
-     global verifier
 
-     assert verifier is not None
 
-     return verifier(request.headers.get("Authorization"))
 
- class RequiresScope:
 
-     def __init__(self, scope: str):
 
-         assert scope.replace(" ", "") == scope, "spaces are not allowed in a scope"
 
-         self.scope = scope
 
-     async def __call__(self, token: Token = Depends(get_token)) -> None:
 
-         if self.scope not in token.scope:
 
-             raise PermissionDenied(f"this operation requires '{self.scope}' scope")
 
- class OAuth2SPAClientSchema(OAuth2AuthorizationCodeBearer):
 
-     """A fastapi 'dependable' configuring the openapi schema for the
 
-     OAuth2 Authorization Code Flow with PKCE extension.
 
-     This includes the JWT Bearer token configuration.
 
-     """
 
-     def __init__(self, client: OAuth2SPAClientSettings):
 
-         super().__init__(
 
-             scheme_name="OAuth2Bearer",
 
-             authorizationUrl=str(client.authorization_url),
 
-             tokenUrl=str(client.token_url),
 
-         )
 
-     async def __call__(self) -> None:
 
-         pass
 
- class JWTBearerTokenSchema(HTTPBearer):
 
-     """A fastapi 'dependable' configuring the openapi schema for JWT Bearer tokens.
 
-     Note: for the client-side OAuth2 flow, use OAuth2SPAClientSchema instead.
 
-     """
 
-     def __init__(self):
 
-         super().__init__(scheme_name="OAuth2Bearer", bearerFormat="JWT")
 
-     async def __call__(self) -> None:
 
-         pass
 
 
  |