Improve dashboard LLM validation UX and report flow
This commit is contained in:
@@ -144,4 +144,46 @@ async def download_file(
|
||||
raise HTTPException(status_code=400, detail=str(e))
|
||||
# [/DEF:download_file:Function]
|
||||
|
||||
# [DEF:get_file_by_path:Function]
|
||||
# @PURPOSE: Retrieve a file by validated absolute/relative path under storage root.
|
||||
#
|
||||
# @PRE: path must resolve under configured storage root.
|
||||
# @POST: Returns a FileResponse for existing files.
|
||||
#
|
||||
# @PARAM: path (str) - Absolute or storage-root-relative file path.
|
||||
# @RETURN: FileResponse - The file content.
|
||||
#
|
||||
# @RELATION: CALLS -> StoragePlugin.get_storage_root
|
||||
# @RELATION: CALLS -> StoragePlugin.validate_path
|
||||
@router.get("/file")
|
||||
async def get_file_by_path(
|
||||
path: str,
|
||||
plugin_loader=Depends(get_plugin_loader),
|
||||
_ = Depends(has_permission("plugin:storage", "READ"))
|
||||
):
|
||||
with belief_scope("get_file_by_path"):
|
||||
storage_plugin: StoragePlugin = plugin_loader.get_plugin("storage-manager")
|
||||
if not storage_plugin:
|
||||
raise HTTPException(status_code=500, detail="Storage plugin not loaded")
|
||||
|
||||
requested_path = (path or "").strip()
|
||||
if not requested_path:
|
||||
raise HTTPException(status_code=400, detail="Path is required")
|
||||
|
||||
try:
|
||||
candidate = Path(requested_path)
|
||||
if candidate.is_absolute():
|
||||
abs_path = storage_plugin.validate_path(candidate)
|
||||
else:
|
||||
storage_root = storage_plugin.get_storage_root()
|
||||
abs_path = storage_plugin.validate_path(storage_root / candidate)
|
||||
except ValueError as e:
|
||||
raise HTTPException(status_code=400, detail=str(e))
|
||||
|
||||
if not abs_path.exists() or not abs_path.is_file():
|
||||
raise HTTPException(status_code=404, detail="File not found")
|
||||
|
||||
return FileResponse(path=str(abs_path), filename=abs_path.name)
|
||||
# [/DEF:get_file_by_path:Function]
|
||||
|
||||
# [/DEF:storage_routes:Module]
|
||||
|
||||
Reference in New Issue
Block a user