No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.
 
 
 
 

28 líneas
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