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 django.http import HttpRequest
from ninja.security import HttpBearer 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: def authenticate(self, request: HttpRequest, token: str) -> str | None:
if token == "will implement later": try:
return token 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