Spaces:
Sleeping
Sleeping
from fastapi import HTTPException, Header, status | |
from appConfig import ENV_VAR, LOG | |
import jwt | |
async def verify_token_and_role(authorization: str = Header(None)): | |
try: | |
if not authorization or not authorization.startswith("Bearer "): | |
raise HTTPException(status_code=status.HTTP_403_FORBIDDEN, detail="Token not provided or invalid") | |
token = authorization.split("Bearer ")[1] | |
try: | |
verified = jwt.decode(token, ENV_VAR.JWT_SECRET, algorithms=["HS256"]) | |
LOG.debug("Token verified successfully") | |
except jwt.ExpiredSignatureError: | |
LOG.debug("Token expired") | |
raise HTTPException(status_code=status.HTTP_403_FORBIDDEN, detail="Token expired") | |
if "role" not in verified or verified["role"] not in ["user","admin"]: | |
LOG.error("Insufficient permissions") | |
raise HTTPException(status_code=status.HTTP_403_FORBIDDEN, detail="Insufficient permissions") | |
return verified | |
except Exception as e: | |
LOG.error(f"An error occurred: {e}") | |
raise HTTPException(status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e)) | |