""" Prompts API Hardened - Secure management of AI system instructions. Standardized RBAC Sealing with correct response unwrapping. """ from fastapi import APIRouter, Depends, HTTPException from src.server.services.prompt_service import prompt_service from ..auth.dependencies import get_current_user, requires_permission from ..auth.permissions import USER_MANAGE router = APIRouter(prefix="/api/system/prompts", tags=["prompts"]) @router.get("") @router.get("/list") async def list_all_prompts(current_user: dict = Depends(get_current_user)): """Lists all configured prompts.""" s, res = await prompt_service.list_prompts() if not s: raise HTTPException(status_code=500, detail=str(res)) return res.get("prompts", []) @router.post("/{prompt_name}") async def update_prompt( prompt_name: str, content: dict[str, str], current_user: dict = Depends(requires_permission(USER_MANAGE)) ): """Updates a system prompt. Requires Admin level permission.""" new_prompt = content.get("content") or content.get("prompt") if not new_prompt: raise HTTPException(status_code=422, detail="Prompt content is required") try: s, res = await prompt_service.update_prompt(prompt_name, new_prompt, description=content.get("description")) if not s: raise HTTPException(status_code=500, detail=str(res)) return {"status": "success", "prompt": res} except Exception as e: if "protected" in str(e).lower(): raise HTTPException(status_code=403, detail="Cannot modify system protected prompts.") from e raise HTTPException(status_code=500, detail=str(e)) from e