Files
ai.allucanget.biz/frontend/app/routes/admin.py
T
zwitschi a4b874598d Refactor Nginx configuration and update project dependencies
- Cleaned up the Nginx configuration for the Coolify deployment, ensuring proper formatting and organization.
- Updated the `pyproject.toml` file to maintain consistent formatting.
- Reformatted the `requirements.txt` file for better readability while keeping the dependencies unchanged.
2026-09-03 15:05:27 +02:00

75 lines
2.4 KiB
Python

"""Admin blueprint."""
from flask import Blueprint, flash, jsonify, redirect, render_template, request, session, url_for
from ..helpers import _api, admin_required
admin_bp = Blueprint("admin", __name__)
@admin_bp.get("/admin")
@admin_required
def index():
token = session["access_token"]
stats_resp = _api("GET", "/admin/stats", token=token)
users_resp = _api("GET", "/users", token=token)
stats = stats_resp.json() if stats_resp.status_code == 200 else {}
users = users_resp.json() if users_resp.status_code == 200 else []
return render_template("admin.html", stats=stats, users=users)
@admin_bp.post("/admin/users/<user_id>/role")
@admin_required
def set_role(user_id: str):
role = request.form.get("role", "user")
_api("PUT", f"/users/{user_id}/role",
token=session["access_token"], json={"role": role})
flash(f"Role updated to '{role}'.", "success")
return redirect(url_for("admin.index"))
@admin_bp.post("/admin/users/<user_id>/delete")
@admin_required
def delete_user(user_id: str):
_api("DELETE", f"/users/{user_id}", token=session["access_token"])
flash("User deleted.", "success")
return redirect(url_for("admin.index"))
@admin_bp.get("/admin/models")
@admin_required
def models():
"""Show model cache status and list all models."""
return render_template("admin/models.html")
# ── Admin API proxies (same-origin for browser JS) ────────────────────────
@admin_bp.get("/api/admin/videos")
@admin_required
def list_videos():
resp = _api("GET", "/admin/videos", token=session["access_token"])
return jsonify(resp.json()), resp.status_code
@admin_bp.post("/api/admin/videos/<job_id>/retry")
@admin_required
def retry_video(job_id: str):
resp = _api(
"POST", f"/admin/videos/{job_id}/retry", token=session["access_token"])
return jsonify(resp.json()), resp.status_code
@admin_bp.post("/api/admin/videos/<job_id>/cancel")
@admin_required
def cancel_video(job_id: str):
resp = _api(
"POST", f"/admin/videos/{job_id}/cancel", token=session["access_token"])
return jsonify(resp.json()), resp.status_code
@admin_bp.delete("/api/admin/videos/<job_id>")
@admin_required
def delete_video(job_id: str):
resp = _api(
"DELETE", f"/admin/videos/{job_id}", token=session["access_token"])
return jsonify(resp.json()), resp.status_code