Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.
 
 
 
 

28 řádky
1.0 KiB

  1. from typing import Optional
  2. from fastapi.openapi.models import SecurityBase as SecurityBaseModel
  3. from fastapi.security.base import SecurityBase
  4. from starlette.requests import Request
  5. from fastapi.security.utils import get_authorization_scheme_param
  6. class SecurityBase:
  7. model: SecurityBaseModel
  8. scheme_name: str
  9. class BasicAuth(SecurityBase):
  10. def __init__(self, scheme_name: str = None, auto_error: bool = True):
  11. self.scheme_name = scheme_name or self.__class__.__name__
  12. self.model = SecurityBaseModel(type="http")
  13. self.auto_error = auto_error
  14. async def __call__(self, request: Request) -> Optional[str]:
  15. authorization: str = request.headers.get("Authorization")
  16. scheme, param = get_authorization_scheme_param(authorization)
  17. if not authorization or scheme.lower() != "basic":
  18. if self.auto_error:
  19. raise HTTPException(
  20. status_code=HTTP_403_FORBIDDEN, detail="Not authenticated"
  21. )
  22. else:
  23. return None
  24. return param