from __future__ import annotations import hashlib import secrets from fastapi import Request from app.config import get_settings def _secure_equal(left: str, right: str) -> bool: left_digest = hashlib.sha256(left.encode("utf-8")).digest() right_digest = hashlib.sha256(right.encode("utf-8")).digest() return secrets.compare_digest(left_digest, right_digest) def is_admin(request: Request) -> bool: return bool(request.session.get("is_admin")) def login_admin(request: Request, username: str, password: str) -> bool: settings = get_settings() if _secure_equal(username, settings.admin_username) and _secure_equal( password, settings.admin_password ): request.session["is_admin"] = True request.session["admin_user"] = username return True return False def logout_admin(request: Request) -> None: request.session.pop("is_admin", None) request.session.pop("admin_user", None)