import os from fastapi import APIRouter, Depends, HTTPException, Query from ..dependencies import require_admin from ..models.user import User router = APIRouter(prefix="/api/filebrowser", tags=["filebrowser"]) @router.get("") async def browse( path: str = Query("/"), _admin: User = Depends(require_admin), ): path = os.path.normpath(path) if not os.path.isdir(path): raise HTTPException(status_code=404, detail="Pfad nicht gefunden") try: names = sorted(os.listdir(path), key=lambda n: n.lower()) except PermissionError: raise HTTPException(status_code=403, detail="Zugriff verweigert") entries = [] for name in names: if name.startswith("."): continue full = os.path.join(path, name) try: is_dir = os.path.isdir(full) except OSError: continue entries.append({"name": name, "path": full, "isDir": is_dir}) parent_path = os.path.dirname(path) parent = parent_path if parent_path != path else None return {"path": path, "parent": parent, "entries": entries}