From 42e83f4de81ae169fc035070b59cda69ead6c0e7 Mon Sep 17 00:00:00 2001 From: HugoCasa Date: Fri, 9 May 2025 23:08:51 +0200 Subject: [PATCH] fix: add back missing query args from http trigger object + correct wm_trigger shape (#5722) --- backend/windmill-api/src/args.rs | 52 ++++++++++++------- backend/windmill-api/src/http_trigger_args.rs | 8 +-- 2 files changed, 37 insertions(+), 23 deletions(-) diff --git a/backend/windmill-api/src/args.rs b/backend/windmill-api/src/args.rs index 567237cb05..9b929804e6 100644 --- a/backend/windmill-api/src/args.rs +++ b/backend/windmill-api/src/args.rs @@ -355,7 +355,7 @@ where let uri = request.uri(); let request_query = Query::::try_from_uri(uri).unwrap().0; let headers = build_headers(&headers_map, request_query.include_header, is_http_trigger); - let query_decode = DecodeQueries::from_uri(uri); + let query_decode = DecodeQueries::from_uri(uri, is_http_trigger); let mut query = HashMap::new(); if let Some(DecodeQueries(queries)) = query_decode { query.extend(queries); @@ -500,37 +500,49 @@ where type Rejection = Response; async fn from_request_parts(parts: &mut Parts, _state: &S) -> Result { - Ok(DecodeQueries::from_uri(&parts.uri).unwrap_or_else(|| DecodeQueries(HashMap::new()))) + Ok(DecodeQueries::from_uri(&parts.uri, false) + .unwrap_or_else(|| DecodeQueries(HashMap::new()))) } } impl DecodeQueries { - pub fn from_uri(uri: &Uri) -> Option { + pub fn from_uri(uri: &Uri, is_http_trigger: bool) -> Option { let query = uri.query(); if query.is_none() { return None; } let query = query.unwrap(); - let include_query = serde_urlencoded::from_str::(query) - .map(|x| x.include_query) - .ok() - .flatten() - .unwrap_or_default(); - let parse_query_args = include_query - .split(",") - .map(|s| s.to_string()) - .collect::>(); - let mut args = HashMap::new(); - if !parse_query_args.is_empty() { + if is_http_trigger { let queries = serde_urlencoded::from_str::>(query).unwrap_or_default(); - parse_query_args.iter().for_each(|h| { - if let Some(v) = queries.get(h) { - args.insert(h.to_string(), to_raw_value(v)); - } - }); + Some(DecodeQueries( + queries + .into_iter() + .map(|(k, v)| (k, to_raw_value(&v))) + .collect(), + )) + } else { + let include_query = serde_urlencoded::from_str::(query) + .map(|x| x.include_query) + .ok() + .flatten() + .unwrap_or_default(); + let parse_query_args = include_query + .split(",") + .map(|s| s.to_string()) + .collect::>(); + let mut args = HashMap::new(); + if !parse_query_args.is_empty() { + let queries = serde_urlencoded::from_str::>(query) + .unwrap_or_default(); + parse_query_args.iter().for_each(|h| { + if let Some(v) = queries.get(h) { + args.insert(h.to_string(), to_raw_value(v)); + } + }); + } + Some(DecodeQueries(args)) } - Some(DecodeQueries(args)) } } diff --git a/backend/windmill-api/src/http_trigger_args.rs b/backend/windmill-api/src/http_trigger_args.rs index 5675f1a1b0..e825f4fce8 100644 --- a/backend/windmill-api/src/http_trigger_args.rs +++ b/backend/windmill-api/src/http_trigger_args.rs @@ -158,9 +158,10 @@ impl HttpTriggerArgs { wrap_body: bool, ) -> Result { let mut extra = HashMap::new(); - - extra.insert( - "wm_trigger".to_string(), + let mut wm_trigger = HashMap::new(); + wm_trigger.insert("kind".to_string(), to_raw_value(&"http".to_string())); + wm_trigger.insert( + "http".to_string(), to_raw_value(&HttpTriggerWmTrigger { route: route_path, path: called_path, @@ -170,6 +171,7 @@ impl HttpTriggerArgs { headers: &self.0.metadata.headers, }), ); + extra.insert("wm_trigger".to_string(), to_raw_value(&wm_trigger)); let mut args = self.to_main_args(wrap_body)?;