2026-08-11 00:12:09 +02:00
|
|
|
from fastapi import APIRouter, Depends, Header, HTTPException
|
2026-08-09 02:17:41 +02:00
|
|
|
from sqlalchemy import select
|
2026-08-11 00:12:09 +02:00
|
|
|
from sqlalchemy.orm import Session
|
2026-08-09 02:17:41 +02:00
|
|
|
|
2026-08-11 00:12:09 +02:00
|
|
|
from . import settings
|
2026-08-09 02:17:41 +02:00
|
|
|
from .db import get_session
|
2026-08-11 11:23:52 +02:00
|
|
|
from .models import Install, Workflow
|
2026-08-11 00:12:09 +02:00
|
|
|
from .schemas import WorkflowOut
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def require_admin(authorization: str = Header(default="")):
|
|
|
|
|
if authorization != f"Bearer {settings.admin_token()}":
|
|
|
|
|
raise HTTPException(status_code=401, detail="invalid admin token")
|
|
|
|
|
|
2026-08-09 02:17:41 +02:00
|
|
|
|
|
|
|
|
router = APIRouter(
|
|
|
|
|
prefix="/api/admin", tags=["admin"], dependencies=[Depends(require_admin)]
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
2026-08-11 00:12:09 +02:00
|
|
|
@router.get("/workflows", response_model=list[WorkflowOut])
|
2026-08-09 02:17:41 +02:00
|
|
|
def list_all(session: Session = Depends(get_session)):
|
|
|
|
|
rows = session.scalars(
|
2026-08-11 00:12:09 +02:00
|
|
|
select(Workflow).order_by(Workflow.downloads.desc())
|
2026-08-09 02:17:41 +02:00
|
|
|
).all()
|
2026-08-11 00:12:09 +02:00
|
|
|
return [WorkflowOut(id=w.id, downloads=w.downloads) for w in rows]
|
2026-08-11 11:23:52 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
@router.get("/installs")
|
|
|
|
|
def list_installs(session: Session = Depends(get_session)):
|
|
|
|
|
rows = session.scalars(
|
|
|
|
|
select(Install).order_by(Install.id.desc()).limit(200)
|
|
|
|
|
).all()
|
|
|
|
|
return [
|
|
|
|
|
{
|
|
|
|
|
"install_id": r.install_id,
|
|
|
|
|
"version": r.version,
|
|
|
|
|
"os": r.os,
|
|
|
|
|
"platform": r.platform,
|
|
|
|
|
"created_at": r.created_at,
|
|
|
|
|
}
|
|
|
|
|
for r in rows
|
|
|
|
|
]
|