import typing from fastapi import Request from strawberry.permission import BasePermission from api.token import decode_user_token from api.token import token_from_headers if typing.TYPE_CHECKING: from strawberry.types import Info class IsAuthenticated(BasePermission): message = "User is not authenticated" async def has_permission(self, source: typing.Any, info: "Info", **kwargs) -> bool: req: Request = info.context["request"] _, auth_token = token_from_headers(req.headers) if len(auth_token) == 0: return False try: decode_user_token(auth_token) return True except Exception: return False