import hashlib from core.db import User, SessionLocal from sqlalchemy.orm import Session from jwt import encode, decode, ExpiredSignatureError, InvalidTokenError from fastapi import HTTPException from datetime import datetime, timedelta SECRET_KEY = "SosttetHuhhhy" ALGORITM = "HS256" """ Функция для генерации JWT токена. При вводе аргументов user_id и access_level, функция возвращает JWT токен. """ def gen_jwt(user_id: int, access_level: int) -> str: payload = { "user_id": user_id, "access_level": access_level, "exp": datetime.utcnow() + timedelta(days=1) } token = encode(payload, SECRET_KEY, algorithm=ALGORITM) return token """ Функция для расшифровки JWT токена. Принимает токен и возвращает словарь с user_id и access_level. """ def decode_jwt(token: str) -> dict: try: payload = decode(token, SECRET_KEY, algorithms=[ALGORITM]) return { "user_id": payload.get("user_id"), "access_level": payload.get("access_level") } except ExpiredSignatureError: raise HTTPException(status_code=401, detail="Срок действия токена истёк.") except InvalidTokenError: raise HTTPException(status_code=401, detail="Неверный токен.") """ Функция для хеширования пароля с использованием SHA-256. При вводе аргумента password, функция возвращает его хеш. """ def hash_password(password: str) -> str: sha256_hash = hashlib.sha256() sha256_hash.update(password.encode('utf-8')) return sha256_hash.hexdigest() """ Функция для проверки пароля. При вводе аргументов stored_password и provided_password, функция возвращает True, если хеши совпадают, и False в противном случае. """ def verify_password(stored_password: str, provided_password: str) -> bool: return stored_password == hash_password(provided_password) """ Функция для определения уровня доступа пользователя. """ def is_admin(user_id: int, db: Session) -> bool: user = db.query(User).filter(User.id == user_id).first() if user.access_level ==1: return False elif user.access_level == 2: return True