/
FlysAt
/
DataFoundry
Обзор
Документация
Войти
/
FlysAt
/
DataFoundry
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
backend/src/core/security.py
63 строки
2 KB
AlexanderShmygol
auth user
26 мар 2026, 14:20
26 мар 2026, 14:20
05ae444
Код
Авторство
О чём код?
import bcrypt from datetime import datetime, timedelta, timezone from jose import jwt, JWTError from src.core.config import auth_settings def hash_password(password: str) -> str: password_bytes = password.encode("utf-8") salt = bcrypt.gensalt() hashed = bcrypt.hashpw(password_bytes, salt) return hashed.decode("utf-8") def verify_password(plain_password: str, hashed_password: str) -> bool: return bcrypt.checkpw( plain_password.encode("utf-8"), hashed_password.encode("utf-8"), ) def _create_token(data: dict, expires_delta: timedelta, token_type: str) -> str: to_encode = data.copy() expire = datetime.now(timezone.utc) + expires_delta to_encode.update( { "exp": expire, "type": token_type, } ) return jwt.encode( to_encode, auth_settings.JWT_SECRET_KEY, algorithm=auth_settings.JWT_ALGORITHM, ) def create_access_token(data: dict) -> str: return _create_token( data=data, expires_delta=timedelta(minutes=auth_settings.JWT_ACCESS_TOKEN_EXPIRE_MINUTES), token_type="access", ) def create_refresh_token(data: dict) -> str: return _create_token( data=data, expires_delta=timedelta(days=auth_settings.JWT_REFRESH_TOKEN_EXPIRE_DAYS), token_type="refresh", ) def decode_token(token: str) -> dict: try: payload = jwt.decode( token, auth_settings.JWT_SECRET_KEY, algorithms=[auth_settings.JWT_ALGORITHM], ) return payload except JWTError: raise ValueError("Invalid token")