Files
nas-tools/dashboard/backend/routers/docker_router.py
Gan, Jimmy 4201917e17
Deploy Dashboard (Dev) / deploy-dev (push) Successful in 2m17s
fix: harden dashboard RBAC and cookie auth flows
Restrict Docker/Files writes to admins, move terminal websocket auth to cookie-first with temporary query fallback, and migrate refresh-token handling to httpOnly cookies for safer session persistence.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-09 23:44:23 +08:00

38 lines
1.2 KiB
Python

import docker
from fastapi import APIRouter, Depends, Query
from config import DOCKER_HOST
from rbac import require_admin
router = APIRouter()
client = docker.DockerClient(base_url=DOCKER_HOST)
@router.get("/containers")
def list_containers():
return [
{
"id": c.short_id,
"name": c.name,
"status": c.status,
"health": (c.attrs.get("State", {}).get("Health", {}) or {}).get("Status", ""),
"image": c.image.tags[0] if c.image.tags else str(c.image.id)[:20],
"ports": c.ports,
}
for c in client.containers.list(all=True)
]
@router.post("/containers/{container_id}/{action}", dependencies=[Depends(require_admin())])
def container_action(container_id: str, action: str):
if action not in ("start", "stop", "restart"):
return {"error": "invalid action"}
c = client.containers.get(container_id)
getattr(c, action)()
return {"ok": True}
@router.get("/containers/{container_id}/logs")
def container_logs(container_id: str, tail: int = Query(200, le=10000)):
c = client.containers.get(container_id)
return {"logs": c.logs(tail=tail, timestamps=True).decode(errors="replace")}