You've already forked Promocode-API
mirror of
https://github.com/devitq/Promocode-API.git
synced 2026-05-22 23:17:10 +00:00
feat: added BusinessAuth implementation
This commit is contained in:
+33
-4
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user