soma_gateway/gateway/
openapi.rs1use serde_json::Value;
2use thiserror::Error;
3
4#[derive(Debug, Clone, PartialEq, Eq)]
5pub struct OpenApiOperationRef {
6 pub namespace: String,
7 pub operation_id: String,
8}
9
10#[derive(Debug, Error, PartialEq, Eq)]
11pub enum OpenApiAdapterError {
12 #[error("OpenAPI spec URL denied by SSRF policy")]
13 SpecUrlDenied,
14 #[error("params must be a JSON object")]
15 ParamsMustBeObject,
16}
17
18pub fn validate_spec_url(url: &str) -> Result<(), OpenApiAdapterError> {
19 let parsed = url::Url::parse(url).map_err(|_| OpenApiAdapterError::SpecUrlDenied)?;
20 soma_openapi::ssrf::validate_spec_url("gateway", &parsed)
21 .map(|_| ())
22 .map_err(|_| OpenApiAdapterError::SpecUrlDenied)
23}
24
25pub fn validate_operation_params(params: &Value) -> Result<(), OpenApiAdapterError> {
26 if params.is_object() {
27 return Ok(());
28 }
29 Err(OpenApiAdapterError::ParamsMustBeObject)
30}
31
32#[cfg(test)]
33#[path = "openapi_tests.rs"]
34mod tests;