Files
stackpilot/backend/routers/images.py
T

48 lines
1.3 KiB
Python

"""Image listing + update-check endpoints."""
from __future__ import annotations
from fastapi import APIRouter, Depends, Query, Request
from sqlmodel import Session
from auth import get_current_user, require_admin
from database import get_session
from models.user import User
from services import audit_service, image_service, update_service
router = APIRouter(prefix="/api/images", tags=["images"])
def _ip(request: Request) -> str:
return request.client.host if request.client else "unknown"
@router.get("")
def list_images(_user: User = Depends(get_current_user)) -> list[dict]:
return image_service.list_images()
@router.get("/updates")
def updates(_user: User = Depends(get_current_user)) -> dict:
return update_service.get_cache()
@router.post("/check")
async def check(_user: User = Depends(require_admin)) -> dict:
return await update_service.check_all()
@router.post("/prune")
def prune(
request: Request,
all_unused: bool = Query(False, alias="all"),
session: Session = Depends(get_session),
user: User = Depends(require_admin),
) -> dict:
result = image_service.prune_images(all_unused)
audit_service.record(
session, user=user.username, action="image.prune", target="*",
detail=f"all={all_unused} reclaimed={result.get('SpaceReclaimed')}",
ip=_ip(request),
)
return result