Neda/Back/core/jwt.py

71 lines
1.5 KiB
Python
Executable File

from datetime import datetime, timedelta, timezone
from jose import jwt, JWTError
from core.config import settings
def create_access_token(
subject: str,
token_version: int,
expires_delta: timedelta | None = None,
) -> str:
if expires_delta:
expire = datetime.now(timezone.utc) + expires_delta
else:
expire = datetime.now(timezone.utc) + timedelta(
days=settings.ACCESS_TOKEN_EXPIRE_DAYS
)
payload = {
"sub": subject,
"token_version": token_version,
"exp": expire,
}
return jwt.encode(
payload,
settings.SECRET_KEY,
algorithm=settings.ALGORITHM,
)
def create_refresh_token(
subject: str,
token_version: int,
expires_delta: timedelta | None = None,
) -> str:
if expires_delta:
expire = datetime.now(timezone.utc) + expires_delta
else:
expire = datetime.now(timezone.utc) + timedelta(
weeks=settings.REFRESH_TOKEN_EXPIRE_WEEKS
)
payload = {
"sub": subject,
"token_version": token_version,
"exp": expire,
"type": "refresh"
}
return jwt.encode(
payload,
settings.SECRET_KEY,
algorithm=settings.ALGORITHM,
)
def decode_token(token: str):
try:
payload = jwt.decode(
token,
settings.SECRET_KEY,
algorithms=[settings.ALGORITHM],
)
return payload
except JWTError:
return None