46 lines
1.4 KiB
Python
46 lines
1.4 KiB
Python
"""Input guard endpoints."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from fastapi import APIRouter, Depends, Request
|
|
|
|
from app.api.deps import require_permission
|
|
from app.model.schemas import AuthContext, GuardCheckRequest
|
|
from app.service.audit_service import audit_service
|
|
from app.service.input_guard_service import input_guard_service
|
|
from app.utils.exceptions import GuardBlockedError
|
|
from app.utils.response import success_response
|
|
|
|
router = APIRouter()
|
|
GUARD_CHECK_DEP = Depends(require_permission("guard:check"))
|
|
|
|
|
|
@router.post("/check")
|
|
def check_input(
|
|
payload: GuardCheckRequest,
|
|
request: Request,
|
|
auth: AuthContext = GUARD_CHECK_DEP,
|
|
):
|
|
try:
|
|
result = input_guard_service.check_text(payload.content)
|
|
except GuardBlockedError as exc:
|
|
audit_service.record(
|
|
trace_id=auth.trace_id,
|
|
event_type="input_guard_blocked",
|
|
actor_id=auth.user_id,
|
|
agent_type="platform",
|
|
decision=exc.data["guard_type"] if exc.data else "blocked",
|
|
input_summary={"length": len(payload.content)},
|
|
)
|
|
raise
|
|
|
|
audit_service.record(
|
|
trace_id=auth.trace_id,
|
|
event_type="input_guard_check",
|
|
actor_id=auth.user_id,
|
|
agent_type="platform",
|
|
decision=result["action"],
|
|
input_summary={"length": len(payload.content)},
|
|
)
|
|
return success_response(request, result)
|