Files
Promocode-API/solution/api/v1/auth.py
T

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