Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.
 
 
 
 

28 wiersze
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