Evaluate an L7 request against the OPA engine. Returns `(allowed, deny_reason)`.
(
engine: &TunnelPolicyEngine,
ctx: &L7EvalContext,
request: &L7RequestInfo,
)
| 1490 | /// |
| 1491 | /// Returns `(allowed, deny_reason)`. |
| 1492 | pub fn evaluate_l7_request( |
| 1493 | engine: &TunnelPolicyEngine, |
| 1494 | ctx: &L7EvalContext, |
| 1495 | request: &L7RequestInfo, |
| 1496 | ) -> Result<(bool, String)> { |
| 1497 | if let Some(jsonrpc) = &request.jsonrpc |
| 1498 | && jsonrpc.is_batch |
| 1499 | && !jsonrpc.calls.is_empty() |
| 1500 | { |
| 1501 | if jsonrpc.has_response { |
| 1502 | let (allowed, reason) = evaluate_l7_request_once(engine, ctx, request)?; |
| 1503 | if !allowed { |
| 1504 | return Ok((false, reason)); |
| 1505 | } |
| 1506 | } |
| 1507 | for call in &jsonrpc.calls { |
| 1508 | let item_request = jsonrpc_request_for_call(request, call); |
| 1509 | let (allowed, reason) = evaluate_l7_request_once(engine, ctx, &item_request)?; |
| 1510 | if !allowed { |
| 1511 | return Ok((false, reason)); |
| 1512 | } |
| 1513 | } |
| 1514 | return Ok((true, String::new())); |
| 1515 | } |
| 1516 | |
| 1517 | evaluate_l7_request_once(engine, ctx, request) |
| 1518 | } |
| 1519 | |
| 1520 | fn evaluate_jsonrpc_l7_request_for_log( |
| 1521 | engine: &TunnelPolicyEngine, |