File size: 887 Bytes
945aae0 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | import os
import time
import logging
from typing import Any
import jwt
logger = logging.getLogger("qkernel.auth")
SECRET = os.getenv("JWT_SECRET", "qmetaram-dev-secret-change-in-prod")
ALGORITHM = "HS256"
TOKEN_TTL = 86400
def create_token(user_id: str, extra: dict | None = None) -> str:
payload = {
"user_id": user_id,
"iat": int(time.time()),
"exp": int(time.time()) + TOKEN_TTL,
}
if extra:
payload.update(extra)
return jwt.encode(payload, SECRET, algorithm=ALGORITHM)
def verify_token(token: str) -> dict[str, Any] | None:
try:
payload = jwt.decode(token, SECRET, algorithms=[ALGORITHM])
return payload
except jwt.ExpiredSignatureError:
logger.warning("Expired token")
return None
except jwt.InvalidTokenError as e:
logger.warning("Invalid token: %s", e)
return None
|