diff --git a/services/backend/config/auth.py b/services/backend/config/auth.py new file mode 100644 index 0000000..e8dcca6 --- /dev/null +++ b/services/backend/config/auth.py @@ -0,0 +1,27 @@ +import datetime +from typing import Optional, Any + +import jwt +from django.conf import settings +from django.http import HttpRequest +from ninja.security import HttpBearer + +from apps.users.models import User + + +class BearerAuth(HttpBearer): + def authenticate(self, request: HttpRequest, token: str) -> Optional[Any]: + data = jwt.decode(token, settings.SECRET_KEY, algorithms=["HS256"]) + if data["exp"] < datetime.datetime.now().timestamp(): + return None + + user = User.objects.get(id=data["id"]) + return user + + @staticmethod + def generate_jwt(user: User) -> str: + data = { + "exp": (datetime.datetime.now() + datetime.timedelta(days=365)).timestamp(), + "id": user.id + } + return jwt.encode(data, settings.SECRET_KEY, algorithm="HS256")