You've already forked Promocode-API
mirror of
https://github.com/devitq/Promocode-API.git
synced 2026-05-22 22:07:12 +00:00
40 lines
1.0 KiB
Python
40 lines
1.0 KiB
Python
import uuid
|
|
|
|
import jwt
|
|
from django.conf import settings
|
|
from django.http import HttpRequest
|
|
from ninja.security import HttpBearer
|
|
from pydantic import BaseModel, ValidationError
|
|
|
|
import apps.business.models
|
|
|
|
|
|
class BusinessToken(BaseModel):
|
|
business_id: uuid.UUID
|
|
token_version: int
|
|
|
|
|
|
class BusinessAuth(HttpBearer):
|
|
def authenticate(self, request: HttpRequest, token: str) -> str | None:
|
|
try:
|
|
decoded_payload = jwt.decode(
|
|
token,
|
|
settings.SECRET_KEY,
|
|
algorithms=["HS256"],
|
|
)
|
|
token_payload = BusinessToken(**decoded_payload)
|
|
except (jwt.PyJWTError, ValidationError):
|
|
return None
|
|
|
|
try:
|
|
business = apps.business.models.Business.objects.get(
|
|
id=token_payload.business_id
|
|
)
|
|
except apps.business.models.Business.DoesNotExist:
|
|
return None
|
|
|
|
if business.token_version != token_payload.token_version:
|
|
return None
|
|
|
|
return business
|