From 65c19bc375694fb21f845a85aad87edb74d0781f Mon Sep 17 00:00:00 2001 From: 9qeklajc <9qeklajc> Date: Fri, 24 Oct 2025 11:50:45 +0200 Subject: [PATCH] clean up --- routstr/core/admin.py | 512 +++++++++++++++++----- ui/app/settings/page.tsx | 5 + ui/components/settings/admin-settings.tsx | 134 ++++++ ui/lib/api/services/admin.ts | 133 ++++-- 4 files changed, 635 insertions(+), 149 deletions(-) create mode 100644 ui/components/settings/admin-settings.tsx diff --git a/routstr/core/admin.py b/routstr/core/admin.py index bb11be3b..f84fc8b9 100644 --- a/routstr/core/admin.py +++ b/routstr/core/admin.py @@ -9,7 +9,7 @@ from fastapi.responses import HTMLResponse from pydantic import BaseModel from sqlmodel import select -from ..payment.models import Model, _row_to_model, list_models +from ..payment.models import _row_to_model, list_models from ..proxy import refresh_model_maps, reinitialize_upstreams from ..wallet import ( fetch_all_balances, @@ -37,7 +37,7 @@ def require_admin_api(request: Request) -> None: expiry = admin_sessions.get(token) if expiry and expiry > int(datetime.now(timezone.utc).timestamp()): return - + admin_cookie = request.cookies.get("admin_password") if not admin_cookie or admin_cookie != settings.admin_password: raise HTTPException(status_code=403, detail="Unauthorized") @@ -50,7 +50,7 @@ def is_admin_authenticated(request: Request) -> bool: expiry = admin_sessions.get(token) if expiry and expiry > int(datetime.now(timezone.utc).timestamp()): return True - + admin_cookie = request.cookies.get("admin_password") return bool(admin_cookie and admin_cookie == settings.admin_password) @@ -210,35 +210,36 @@ class AdminLoginRequest(BaseModel): @admin_router.post("/api/login") -async def admin_login(request: Request, payload: AdminLoginRequest) -> dict[str, object]: +async def admin_login( + request: Request, payload: AdminLoginRequest +) -> dict[str, object]: try: current = SettingsService.get() admin_pw = current.admin_password except Exception: admin_pw = os.getenv("ADMIN_PASSWORD", "") - + if not admin_pw: raise HTTPException(status_code=500, detail="Admin password not configured") - + if payload.password != admin_pw: raise HTTPException(status_code=401, detail="Invalid password") - + token = secrets.token_urlsafe(32) - expiry_timestamp = int(datetime.now(timezone.utc).timestamp()) + ADMIN_SESSION_DURATION + expiry_timestamp = ( + int(datetime.now(timezone.utc).timestamp()) + ADMIN_SESSION_DURATION + ) admin_sessions[token] = expiry_timestamp - + expired_tokens = [ - t for t, exp in admin_sessions.items() + t + for t, exp in admin_sessions.items() if exp <= int(datetime.now(timezone.utc).timestamp()) ] for t in expired_tokens: del admin_sessions[t] - - return { - "ok": True, - "token": token, - "expires_in": ADMIN_SESSION_DURATION - } + + return {"ok": True, "token": token, "expires_in": ADMIN_SESSION_DURATION} @admin_router.post("/api/logout", dependencies=[Depends(require_admin_api)]) @@ -248,7 +249,7 @@ async def admin_logout(request: Request) -> dict[str, object]: token = auth_header.split(" ", 1)[1] if token in admin_sessions: del admin_sessions[token] - + return {"ok": True} @@ -398,7 +399,7 @@ async def dashboard(request: Request) -> str: + """