From f5efc248da511e0924c9673b947d5de7ef69ac45 Mon Sep 17 00:00:00 2001 From: Lucas Nogueira Date: Mon, 7 Mar 2022 20:59:01 -0300 Subject: [PATCH] fix(core): runtime CSP changes on Linux --- .changes/fix-csp-linux.md | 5 +++++ core/tauri/src/manager.rs | 23 ++++++++++------------- 2 files changed, 15 insertions(+), 13 deletions(-) create mode 100644 .changes/fix-csp-linux.md diff --git a/.changes/fix-csp-linux.md b/.changes/fix-csp-linux.md new file mode 100644 index 000000000..cdc655495 --- /dev/null +++ b/.changes/fix-csp-linux.md @@ -0,0 +1,5 @@ +--- +"tauri": patch +--- + +Fix CSP usage on Linux when changing it via the `on_web_resource_request` handler. diff --git a/core/tauri/src/manager.rs b/core/tauri/src/manager.rs index 21af5358f..172dcc50c 100644 --- a/core/tauri/src/manager.rs +++ b/core/tauri/src/manager.rs @@ -126,13 +126,7 @@ fn set_csp( default_src.push(format_real_schema(schema)); } - #[allow(clippy::let_and_return)] - let csp = Csp::DirectiveMap(csp).to_string(); - #[cfg(target_os = "linux")] - { - *asset = set_html_csp(asset, &csp); - } - csp + Csp::DirectiveMap(csp).to_string() } #[cfg(target_os = "linux")] @@ -826,13 +820,16 @@ impl WindowManager { // if it's an HTML file, we need to set the CSP meta tag on Linux #[cfg(target_os = "linux")] - if let (Some(original_csp), Some(response_csp)) = ( - asset.csp_header, - response.headers().get("Content-Security_Policy"), - ) { + if let Some(response_csp) = response.headers().get("Content-Security-Policy") { let response_csp = String::from_utf8_lossy(response_csp.as_bytes()); - if response_csp != original_csp { - let body = set_html_csp(&String::from_utf8_lossy(response.body()), &response_csp); + let body = set_html_csp(&String::from_utf8_lossy(response.body()), &response_csp); + *response.body_mut() = body.as_bytes().to_vec(); + } + } else { + #[cfg(target_os = "linux")] + { + if let Some(csp) = &asset.csp_header { + let body = set_html_csp(&String::from_utf8_lossy(response.body()), csp); *response.body_mut() = body.as_bytes().to_vec(); } }