diff --git a/README.md b/README.md index 3f38f24c01..95f4d3e6c3 100644 --- a/README.md +++ b/README.md @@ -310,6 +310,7 @@ upcoming CLI tool. | DENO_FLAGS | None | Override the flags passed to deno (default --allow-all) to tighten permissions. Minimum permissions needed are "--allow-read=args.json --allow-write=result.json" | Worker | | PIP_LOCAL_DEPENDENCIES | None | Specify dependencies that are installed locally and do not need to be solved nor installed again | | ADDITIONAL_PYTHON_PATHS | None | Specify python paths (separated by a :) to be appended to the PYTHONPATH of the python jobs. To be used with PIP_LOCAL_DEPENDENCIES to use python codebases within Windmill | Worker | +| INCLUDE_HEADERS | None | Whitelist of headers that are passed to jobs as args (separated by a comma) | Server | diff --git a/backend/Cargo.lock b/backend/Cargo.lock index b2b78ca7e9..1c4610d306 100644 --- a/backend/Cargo.lock +++ b/backend/Cargo.lock @@ -4682,6 +4682,7 @@ dependencies = [ "hmac", "hyper", "itertools", + "lazy_static", "magic-crypt", "mime_guess", "rand 0.8.5", diff --git a/backend/windmill-api/Cargo.toml b/backend/windmill-api/Cargo.toml index b1d8d6debf..be164c109c 100644 --- a/backend/windmill-api/Cargo.toml +++ b/backend/windmill-api/Cargo.toml @@ -70,3 +70,4 @@ cookie.workspace = true sha2.workspace = true urlencoding.workspace = true async-stripe.workspace = true +lazy_static.workspace = true \ No newline at end of file diff --git a/backend/windmill-api/src/jobs.rs b/backend/windmill-api/src/jobs.rs index 3bf1ca2769..94b67baf86 100644 --- a/backend/windmill-api/src/jobs.rs +++ b/backend/windmill-api/src/jobs.rs @@ -270,6 +270,14 @@ pub struct RunJobQuery { queue_limit: Option, } +lazy_static::lazy_static! { + static ref INCLUDE_HEADERS: Vec = std::env::var("INCLUDE_HEADERS") + .ok().map(|x| x + .split(',') + .map(|s| s.to_string()) + .collect()).unwrap_or_default(); +} + impl RunJobQuery { async fn get_scheduled_for<'c>( &self, @@ -290,11 +298,14 @@ impl RunJobQuery { headers: HeaderMap, mut args: serde_json::Map, ) -> serde_json::Map { - self.include_header + let whitelist = self + .include_header .as_ref() .map(|s| s.split(",").map(|s| s.to_string()).collect::>()) - .unwrap_or_default() + .unwrap_or_default(); + whitelist .iter() + .chain(INCLUDE_HEADERS.iter()) .for_each(|h| { if let Some(v) = headers.get(h) { args.insert(