feat: added BusinessAuth implementation

This commit is contained in:
ITQ
2025-01-20 16:11:12 +03:00
parent fd0634e353
commit 6501dfe337
+33 -4
View File
@@ -1,10 +1,39 @@
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 BearerAuth(HttpBearer):
class BusinessToken(BaseModel):
business_id: uuid.UUID
token_version: int
class BusinessAuth(HttpBearer):
def authenticate(self, request: HttpRequest, token: str) -> str | None:
if token == "will implement later":
return token
try:
decoded_payload = jwt.decode(
token,
settings.SECRET_KEY,
algorithms=["HS256"],
)
token_payload = BusinessToken(**decoded_payload)
except (jwt.PyJWTError, ValidationError):
return None
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