Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
 
 
 
 

28 строки
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