Skip to main content

soma_gateway/gateway/
openapi.rs

1use 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;