diff --git a/backend/spi/spi-plugin/src/api/ci/plugin_ci_exec_api.rs b/backend/spi/spi-plugin/src/api/ci/plugin_ci_exec_api.rs index 13248eb44..725811c02 100644 --- a/backend/spi/spi-plugin/src/api/ci/plugin_ci_exec_api.rs +++ b/backend/spi/spi-plugin/src/api/ci/plugin_ci_exec_api.rs @@ -35,6 +35,7 @@ impl PluginExecApi { } TardisResp::ok(PluginExecReq { body: Some(tardis::serde_json::Value::String(msg.0)), + query: None, header: None, }) } diff --git a/backend/spi/spi-plugin/src/dto/plugin_exec_dto.rs b/backend/spi/spi-plugin/src/dto/plugin_exec_dto.rs index 5c6e3feab..b65cdc97a 100644 --- a/backend/spi/spi-plugin/src/dto/plugin_exec_dto.rs +++ b/backend/spi/spi-plugin/src/dto/plugin_exec_dto.rs @@ -6,6 +6,7 @@ use tardis::{serde_json::Value, web::poem_openapi}; #[derive(poem_openapi::Object, Serialize, Deserialize, Debug)] pub struct PluginExecReq { pub header: Option>, + pub query: Option>, pub body: Option, } diff --git a/backend/spi/spi-plugin/src/serv/plugin_exec_serv.rs b/backend/spi/spi-plugin/src/serv/plugin_exec_serv.rs index a9eceefcd..ee40cd14c 100644 --- a/backend/spi/spi-plugin/src/serv/plugin_exec_serv.rs +++ b/backend/spi/spi-plugin/src/serv/plugin_exec_serv.rs @@ -1,3 +1,6 @@ +use std::collections::HashMap; +use std::path::Path; + use bios_basic::rbum::serv::rbum_item_serv::RbumItemCrudOperation; use bios_basic::rbum::serv::rbum_kind_serv::RbumKindServ; use tardis::basic::dto::TardisContext; @@ -27,6 +30,7 @@ impl PluginExecServ { &spi_bs.conn_uri, Self::build_url( &format!("{}{}", if spi_api.path_and_query.starts_with('/') { "" } else { "/" }, &spi_api.path_and_query), + exec_req.query, exec_req.body.clone(), funs, )? @@ -71,7 +75,18 @@ impl PluginExecServ { return Err(funs.err().not_found(&PluginApiServ::get_obj_name(), "exec", "exec api is not fond", "")); } - fn build_url(path: &str, body: Option, funs: &TardisFunsInst) -> TardisResult { + fn build_url(path: &str, query: Option>, body: Option, funs: &TardisFunsInst) -> TardisResult { + let mut path = path.to_string(); + if let Some(query) = query { + let query_str = query.iter().map(|(k, v)| format!("{}={}", k, v)).collect::>().join("&"); + if path.ends_with('?') { + path.push_str(&query_str); + } else if path.contains('?') { + path.push_str(&format!("&{}", query_str)); + } else { + path.push_str(&format!("?{}", query_str)); + } + } if !path.contains(':') { return Ok(path.to_string()); } diff --git a/backend/spi/spi-plugin/tests/test_plugin_exec.rs b/backend/spi/spi-plugin/tests/test_plugin_exec.rs index 43778291a..07ac0cebe 100644 --- a/backend/spi/spi-plugin/tests/test_plugin_exec.rs +++ b/backend/spi/spi-plugin/tests/test_plugin_exec.rs @@ -26,6 +26,7 @@ pub async fn test(client: &mut TestHttpClient) -> TardisResult<()> { TardisFuns::crypto.base64.encode(&TardisFuns::json.obj_to_string(&client.context()).unwrap()), )])), body: Some(json!({ "msg": "object" })), + query: None, }, ) .await;