35 lines
1 KiB
Python
35 lines
1 KiB
Python
from pytz import timezone
|
|
from datetime import datetime, timedelta
|
|
|
|
from fastapi.security import OAuth2PasswordBearer
|
|
from jose import jwt
|
|
|
|
from core.configs import settings
|
|
from api.v1.controllers.g_usuario_controller import authenticate_user
|
|
|
|
# Define o esquema OAuth2 para login
|
|
oauth2_schema = OAuth2PasswordBearer(
|
|
tokenUrl=f"{settings.API_V1_STR}/usuarios/login"
|
|
)
|
|
|
|
# Função para criar um token JWT
|
|
def create_token(tipo_token: str, tempo_vida: timedelta, sub: str) -> str:
|
|
payload = {}
|
|
sp = timezone('America/Sao_Paulo')
|
|
expira = datetime.now(tz=sp) + tempo_vida
|
|
|
|
payload["type"] = tipo_token
|
|
payload["exp"] = expira
|
|
payload["iat"] = datetime.now(tz=sp)
|
|
payload["sub"] = str(sub)
|
|
|
|
return jwt.encode(payload, settings.JWT_SECRET, algorithm=settings.ALGORITHM)
|
|
|
|
|
|
# Criação do token de acesso (access_token)
|
|
def create_access_token(sub: str) -> str:
|
|
return create_token(
|
|
tipo_token='access_token',
|
|
tempo_vida=timedelta(minutes=settings.ACCESS_TOKEN_EXPIRE_MINUTES),
|
|
sub=sub
|
|
)
|