|
- from typing import Optional
- from fastapi.openapi.models import SecurityBase as SecurityBaseModel
- from fastapi.security.base import SecurityBase
- from starlette.requests import Request
- from fastapi.security.utils import get_authorization_scheme_param
-
- class SecurityBase:
- model: SecurityBaseModel
- scheme_name: str
-
-
- class BasicAuth(SecurityBase):
- def __init__(self, scheme_name: str = None, auto_error: bool = True):
- self.scheme_name = scheme_name or self.__class__.__name__
- self.model = SecurityBaseModel(type="http")
- self.auto_error = auto_error
-
- async def __call__(self, request: Request) -> Optional[str]:
- authorization: str = request.headers.get("Authorization")
- scheme, param = get_authorization_scheme_param(authorization)
- if not authorization or scheme.lower() != "basic":
- if self.auto_error:
- raise HTTPException(
- status_code=HTTP_403_FORBIDDEN, detail="Not authenticated"
- )
- else:
- return None
- return param
|