35 lines
956 B
Python
35 lines
956 B
Python
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)
|