diff --git a/backend/ee-repo-ref.txt b/backend/ee-repo-ref.txt index 2104f8ba8c..9923d56e66 100644 --- a/backend/ee-repo-ref.txt +++ b/backend/ee-repo-ref.txt @@ -1 +1 @@ -01f384348341c87c5a0b32c4be7c699975ee7d6d \ No newline at end of file +aedaf655693cb9bab59fcf79a48c60aad6822668 \ No newline at end of file diff --git a/backend/windmill-api/openapi.yaml b/backend/windmill-api/openapi.yaml index 2c5a8cec85..3b0d784bd7 100644 --- a/backend/windmill-api/openapi.yaml +++ b/backend/windmill-api/openapi.yaml @@ -724,6 +724,8 @@ paths: type: string tls_implicit: type: boolean + disable_tls: + type: boolean required: - host - username @@ -731,6 +733,7 @@ paths: - port - from - tls_implicit + - disable_tls required: - to - smtp diff --git a/backend/windmill-common/src/server.rs b/backend/windmill-common/src/server.rs index 9fb39ad18b..b0c768a86f 100644 --- a/backend/windmill-common/src/server.rs +++ b/backend/windmill-common/src/server.rs @@ -10,6 +10,7 @@ pub struct Smtp { pub port: u16, pub from: String, pub tls_implicit: Option, + pub disable_tls: Option, } #[derive(Serialize, Deserialize, PartialEq)] @@ -20,6 +21,7 @@ pub struct SmtpConfigOpt { pub smtp_port: Option, pub smtp_from: Option, pub smtp_tls_implicit: Option, + pub smtp_disable_tls: Option, } pub async fn load_smtp_config(db: &DB) -> error::Result> { @@ -39,6 +41,7 @@ pub async fn load_smtp_config(db: &DB) -> error::Result> { username, password, tls_implicit: config.smtp_tls_implicit, + disable_tls: config.smtp_disable_tls, port: config.smtp_port.unwrap_or(587), from: config .smtp_from @@ -60,6 +63,9 @@ pub async fn load_smtp_config(db: &DB) -> error::Result> { tls_implicit: std::env::var("SMTP_TLS_IMPLICIT") .ok() .and_then(|p| p.parse().ok()), + disable_tls: std::env::var("SMTP_DISABLE_TLS") + .ok() + .and_then(|p| p.parse().ok()), port: std::env::var("SMTP_PORT") .ok() .and_then(|p| p.parse().ok()) @@ -87,6 +93,7 @@ impl Default for SmtpConfigOpt { smtp_port: None, smtp_tls_implicit: None, smtp_username: None, + smtp_disable_tls: None, } } } diff --git a/backend/windmill-worker/src/bun_executor.rs b/backend/windmill-worker/src/bun_executor.rs index 5b7c2a06c0..a7d92874e1 100644 --- a/backend/windmill-worker/src/bun_executor.rs +++ b/backend/windmill-worker/src/bun_executor.rs @@ -1304,6 +1304,8 @@ try {{ job.args.as_ref() }; + append_logs(&job.id, &job.workspace_id, format!("{init_logs}\n"), db).await; + let result = crate::js_eval::eval_fetch_timeout( env_code, inner_content.clone(), @@ -1324,14 +1326,7 @@ try {{ "Executed native code in {}ms", started_at.elapsed().as_millis() ); - append_logs( - &job.id, - &job.workspace_id, - format!("{}\n{}", init_logs, result.1), - db, - ) - .await; - return Ok(result.0); + return Ok(result); } } append_logs(&job.id, &job.workspace_id, init_logs, db).await; diff --git a/backend/windmill-worker/src/js_eval.rs b/backend/windmill-worker/src/js_eval.rs index da4eda39ef..45ee1cefd2 100644 --- a/backend/windmill-worker/src/js_eval.rs +++ b/backend/windmill-worker/src/js_eval.rs @@ -754,9 +754,9 @@ pub async fn eval_fetch_timeout( _w_id: &str, _load_client: bool, _occupation_metrics: &mut OccupancyMetrics, -) -> anyhow::Result<(Box, String)> { +) -> anyhow::Result> { use serde_json::value::to_raw_value; - Ok((to_raw_value("require deno_core").unwrap(), "".to_string())) + Ok(to_raw_value("require deno_core").unwrap()) } #[cfg(feature = "deno_core")] @@ -774,7 +774,9 @@ pub async fn eval_fetch_timeout( w_id: &str, load_client: bool, occupation_metrics: &mut OccupancyMetrics, -) -> anyhow::Result<(Box, String)> { +) -> anyhow::Result> { + use windmill_queue::append_logs; + let (sender, mut receiver) = oneshot::channel::(); let parsed_args = windmill_parser_ts::parse_deno_signature(&ts_expr, true, None)?.args; @@ -805,6 +807,8 @@ pub async fn eval_fetch_timeout( )); } + let db_ = db.clone(); + let w_id_ = w_id.to_string(); let result_f = tokio::task::spawn_blocking(move || { let ops = vec![op_get_static_args(), op_log()]; let ext = Extension { name: "windmill", ops: ops.into(), ..Default::default() }; @@ -892,28 +896,31 @@ pub async fn eval_fetch_timeout( .build()?; let future = async { - tokio::select! { + let r = tokio::select! { r = eval_fetch(&mut js_runtime, &js_expr, Some(env_code), load_client) => Ok(r), _ = memory_limit_rx.recv() => Err(Error::ExecutionErr("Memory limit reached, killing isolate".to_string())) - } + }; + + append_logs( + &job_id, + w_id_.as_str(), + format!( + "{extra_logs}{}", + js_runtime.op_state().borrow().borrow::().s + ), + db_, + ) + .await; + + r }; let r = runtime.block_on(future)?; // tracing::info!("total: {:?}", instant.elapsed()); - (r as anyhow::Result>).map(|x| { - ( - x, - js_runtime - .op_state() - .borrow() - .borrow::() - .s - .clone(), - ) - }) + r }); - let (res, logs) = run_future_with_polling_update_job_poller( + let res = run_future_with_polling_update_job_poller( job_id, job_timeout, db, @@ -932,7 +939,7 @@ pub async fn eval_fetch_timeout( e })?; *mem_peak = (res.get().len() / 1000) as i32; - Ok((res, format!("{extra_logs}{logs}"))) + Ok(res) } #[cfg(feature = "deno_core")] diff --git a/backend/windmill-worker/src/worker.rs b/backend/windmill-worker/src/worker.rs index f4d78bf0ef..1b7dcfa970 100644 --- a/backend/windmill-worker/src/worker.rs +++ b/backend/windmill-worker/src/worker.rs @@ -1703,7 +1703,7 @@ async fn do_nativets( canceled_by: &mut Option, worker_name: &str, occupancy_metrics: &mut OccupancyMetrics, -) -> windmill_common::error::Result<(Box, String)> { +) -> windmill_common::error::Result> { let args = build_args_map(job, client, db).await?.map(Json); let job_args = if args.is_some() { args.as_ref() @@ -1711,7 +1711,7 @@ async fn do_nativets( job.args.as_ref() }; - let result = eval_fetch_timeout( + Ok(eval_fetch_timeout( env_code, code.clone(), transpile_ts(code)?, @@ -1726,8 +1726,7 @@ async fn do_nativets( true, occupancy_metrics, ) - .await?; - Ok((result.0, result.1)) + .await?) } #[derive(Deserialize, Serialize, Default)] @@ -2356,7 +2355,8 @@ async fn handle_code_execution_job( .map(|(k, v)| format!("const {} = '{}';\nprocess.env['{}'] = '{}';\n", k, v, k, v)) .collect::>() .join("\n")); - let (result, ts_logs) = do_nativets( + + let result = do_nativets( job, &client, env_code, @@ -2368,7 +2368,6 @@ async fn handle_code_execution_job( occupancy_metrics, ) .await?; - append_logs(&job.id, &job.workspace_id, ts_logs, db).await; return Ok(result); } diff --git a/frontend/src/lib/components/InstanceSettings.svelte b/frontend/src/lib/components/InstanceSettings.svelte index 9cdd9f165f..f9b2c90151 100644 --- a/frontend/src/lib/components/InstanceSettings.svelte +++ b/frontend/src/lib/components/InstanceSettings.svelte @@ -1014,12 +1014,26 @@
+
+ { + if (values[setting.key].smtp_disable_tls) { + values[setting.key].smtp_tls_implicit = false + } + }} + options={{ right: 'Disable TLS' }} + label="Disable TLS" + /> +
{/if} {:else if setting.fieldType == 'object_store_config'} @@ -1082,7 +1096,8 @@ password: smtp['smtp_password'], port: smtp['smtp_port'], from: smtp['smtp_from'], - tls_implicit: smtp['smtp_tls_implicit'] + tls_implicit: smtp['smtp_tls_implicit'], + disable_tls: smtp['smtp_disable_tls'] } } }) diff --git a/frontend/src/lib/components/flows/propPicker/PropPickerWrapper.svelte b/frontend/src/lib/components/flows/propPicker/PropPickerWrapper.svelte index cbf9e058e5..c180463f36 100644 --- a/frontend/src/lib/components/flows/propPicker/PropPickerWrapper.svelte +++ b/frontend/src/lib/components/flows/propPicker/PropPickerWrapper.svelte @@ -101,7 +101,6 @@ {displayContext} {error} {pickableProperties} - {notSelectable} allowCopy={!notSelectable && !$propPickerConfig} on:select={({ detail }) => { dispatch('select', detail) diff --git a/frontend/src/lib/components/propertyPicker/ObjectViewer.svelte b/frontend/src/lib/components/propertyPicker/ObjectViewer.svelte index aaea69e58a..034689bdec 100644 --- a/frontend/src/lib/components/propertyPicker/ObjectViewer.svelte +++ b/frontend/src/lib/components/propertyPicker/ObjectViewer.svelte @@ -83,13 +83,15 @@ {#if level != 0 && keys.length > 1} + - {/if} {#if level == 0 && topBrackets}{/if} @@ -194,8 +196,8 @@ size="xs2" variant="border" on:click={collapse} - wrapperClasses="inline-flex w-fit h-4" - btnClasses="font-normal rounded-[0.275rem] h-4 p-1" + wrapperClasses="inline-flex w-fit" + btnClasses="font-normal h-4 text-2xs px-1 text-primary rounded-[0.275rem]" > {openBracket}{collapsedSymbol}{closeBracket} diff --git a/frontend/src/lib/components/propertyPicker/PropPicker.svelte b/frontend/src/lib/components/propertyPicker/PropPicker.svelte index a4c3d2fe28..0e27cab996 100644 --- a/frontend/src/lib/components/propertyPicker/PropPicker.svelte +++ b/frontend/src/lib/components/propertyPicker/PropPicker.svelte @@ -12,7 +12,6 @@ export let pickableProperties: PickableProperties export let displayContext = true - export let notSelectable: boolean export let error: boolean = false export let allowCopy = false @@ -186,12 +185,12 @@ - {/if} @@ -219,8 +218,8 @@ on:click={() => { displayVariable = false }} - wrapperClasses="inline-flex w-fit h-4" - btnClasses="font-normal text-primary rounded-[0.275rem]">-- {'{...}'} @@ -259,8 +258,8 @@ on:click={() => { displayResources = false }} - wrapperClasses="inline-flex w-fit h-4" - btnClasses="font-normal text-primary rounded-[0.275rem]">-- {'{...}'}