traefik-confman/api/token.py
2022-05-29 00:31:32 +02:00

36 lines
905 B
Python

import os
import typing
from datetime import datetime
from datetime import timedelta
from datetime import timezone
import jwt
from fastapi import Request
from starlette.datastructures import Headers
from api.models import UserModel
if typing.TYPE_CHECKING:
UserTokenData = dict[str, typing.Any]
JWT_SECRET = os.getenv("JWT_SECRET", "")
def encode_user_token(
user: UserModel, expire_in: timedelta = timedelta(hours=6)
) -> str:
payload = {}
payload["id"] = user.id
payload["exp"] = datetime.now(tz=timezone.utc) + expire_in
return jwt.encode(payload, JWT_SECRET)
def decode_user_token(token: str) -> "UserTokenData":
return jwt.decode(token, JWT_SECRET, ["HS256"])
def token_from_headers(headers: Headers) -> tuple[str, str]:
auth_header: str = headers.get("authorization", "")
scheme, _, auth_token = auth_header.partition(" ")
return scheme, auth_token