48 lines
1.3 KiB
Python
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
|