pythonasyncioapiasyncfastapiframeworkjsonjson-schemaopenapiopenapi3pydanticpython-typespython3redocreststarletteswaggerswagger-uiuvicornweb
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
34 lines
1.2 KiB
34 lines
1.2 KiB
from fastapi.openapi.models import APIKey, APIKeyIn
|
|
from fastapi.security.base import SecurityBase
|
|
from starlette.requests import Request
|
|
|
|
|
|
class APIKeyBase(SecurityBase):
|
|
pass
|
|
|
|
|
|
class APIKeyQuery(APIKeyBase):
|
|
def __init__(self, *, name: str, scheme_name: str = None):
|
|
self.model = APIKey(in_=APIKeyIn.query, name=name)
|
|
self.scheme_name = scheme_name or self.__class__.__name__
|
|
|
|
async def __call__(self, requests: Request) -> str:
|
|
return requests.query_params.get(self.model.name)
|
|
|
|
|
|
class APIKeyHeader(APIKeyBase):
|
|
def __init__(self, *, name: str, scheme_name: str = None):
|
|
self.model = APIKey(in_=APIKeyIn.header, name=name)
|
|
self.scheme_name = scheme_name or self.__class__.__name__
|
|
|
|
async def __call__(self, requests: Request) -> str:
|
|
return requests.headers.get(self.model.name)
|
|
|
|
|
|
class APIKeyCookie(APIKeyBase):
|
|
def __init__(self, *, name: str, scheme_name: str = None):
|
|
self.model = APIKey(in_=APIKeyIn.cookie, name=name)
|
|
self.scheme_name = scheme_name or self.__class__.__name__
|
|
|
|
async def __call__(self, requests: Request) -> str:
|
|
return requests.cookies.get(self.model.name)
|
|
|