30 lines
829 B
Python
30 lines
829 B
Python
"""Admin-visible change history."""
|
|
from __future__ import annotations
|
|
|
|
import json
|
|
|
|
from fastapi import APIRouter, Depends, Request
|
|
|
|
from ..auth import Ctx
|
|
from ..deps import get_ctx
|
|
|
|
router = APIRouter()
|
|
|
|
|
|
@router.get("/v1/audit")
|
|
def get_audit(request: Request, ctx: Ctx = Depends(get_ctx), limit: int = 100, since: str | None = None):
|
|
ctx.require_admin(request)
|
|
q = "SELECT id, actor, action, detail_json, created_at FROM audit_log"
|
|
params: list = []
|
|
if since:
|
|
q += " WHERE created_at >= %s"
|
|
params.append(since)
|
|
q += " ORDER BY id DESC LIMIT %s"
|
|
params.append(max(1, min(limit, 500)))
|
|
events = []
|
|
for r in ctx.conn.execute(q, params).fetchall():
|
|
d = dict(r)
|
|
d["detail"] = json.loads(d.pop("detail_json"))
|
|
events.append(d)
|
|
return {"events": events}
|