From 4c239729c3e1b899ecbc6793c3682848e8de1729 Mon Sep 17 00:00:00 2001 From: Amr Bashir Date: Fri, 12 Jul 2024 15:52:53 +0300 Subject: [PATCH] fix(core): fix raw invoke body for isolation pattern (#10167) * fix(core): fix raw invoke body for isolation pattern The `isolation` pattern requests are made using JSON but the payload could be raw bytes, so we send the original `Content-Type` from frontend and make sure to deserialize the payload using that one instead of `Content-Type` from request headers * clippy * disable plist embed in generate_context in tests * change file * docs [skip ci] * move unused_variables [skip ci] * last commit regression [skip ci] * fix test * add example, do not text encode raw request * check type instead of contenttype --------- Co-authored-by: Lucas Nogueira --- .changes/generate_context-test.md | 6 + .changes/isolation-raw-request.md | 5 + .changes/utils-raw-isolation-payload.md | 5 + core/tauri-build/src/codegen/context.rs | 1 + core/tauri-codegen/src/context.rs | 8 +- core/tauri-macros/src/context.rs | 19 +- core/tauri-plugin/src/build/mod.rs | 2 +- core/tauri-utils/src/pattern/isolation.js | 19 +- core/tauri-utils/src/pattern/isolation.rs | 19 +- core/tauri/scripts/ipc.js | 4 +- core/tauri/src/ipc/mod.rs | 1 + core/tauri/src/ipc/protocol.rs | 222 +++++++++++++++++- core/tauri/src/manager/mod.rs | 2 +- core/tauri/src/vibrancy/macos.rs | 1 - .../test/fixture/isolation/dist/index.html | 6 + .../isolation/isolation-dist/index.html | 10 + .../fixture/isolation/isolation-dist/index.js | 8 + .../isolation/src-tauri/icons/icon.ico | Bin 0 -> 86642 bytes .../isolation/src-tauri/icons/icon.ico~dev | Bin 0 -> 57594 bytes .../isolation/src-tauri/icons/icon.png | Bin 0 -> 974 bytes .../isolation/src-tauri/tauri.conf.json | 27 +++ examples/api/src-tauri/build.rs | 8 +- .../api/src-tauri/capabilities/run-app.json | 3 +- .../permissions/autogenerated/echo.toml | 11 + examples/api/src-tauri/src/cmd.rs | 5 + examples/api/src-tauri/src/lib.rs | 1 + examples/api/src/App.svelte | 12 +- examples/api/src/views/Communication.svelte | 11 + 28 files changed, 389 insertions(+), 27 deletions(-) create mode 100644 .changes/generate_context-test.md create mode 100644 .changes/isolation-raw-request.md create mode 100644 .changes/utils-raw-isolation-payload.md create mode 100644 core/tauri/test/fixture/isolation/dist/index.html create mode 100644 core/tauri/test/fixture/isolation/isolation-dist/index.html create mode 100644 core/tauri/test/fixture/isolation/isolation-dist/index.js create mode 100644 core/tauri/test/fixture/isolation/src-tauri/icons/icon.ico create mode 100644 core/tauri/test/fixture/isolation/src-tauri/icons/icon.ico~dev create mode 100644 core/tauri/test/fixture/isolation/src-tauri/icons/icon.png create mode 100644 core/tauri/test/fixture/isolation/src-tauri/tauri.conf.json create mode 100644 examples/api/src-tauri/permissions/autogenerated/echo.toml diff --git a/.changes/generate_context-test.md b/.changes/generate_context-test.md new file mode 100644 index 000000000..a2f262907 --- /dev/null +++ b/.changes/generate_context-test.md @@ -0,0 +1,6 @@ +--- +"tauri-macros": "patch" +"tauri-codegen": "patch" +--- + +Add support for `test = true` in `generate_context!` macro to skip some code generation that could affect some tests, for now it only skips empedding a plist on macOS. diff --git a/.changes/isolation-raw-request.md b/.changes/isolation-raw-request.md new file mode 100644 index 000000000..05330e428 --- /dev/null +++ b/.changes/isolation-raw-request.md @@ -0,0 +1,5 @@ +--- +"tauri": "patch:bug" +--- + +Fix deserialization of raw invoke requests when using `isolation` pattern. diff --git a/.changes/utils-raw-isolation-payload.md b/.changes/utils-raw-isolation-payload.md new file mode 100644 index 000000000..9b31e05a5 --- /dev/null +++ b/.changes/utils-raw-isolation-payload.md @@ -0,0 +1,5 @@ +--- +"tauri-utils": "patch:feat" +--- + +Add `RawIsolationPayload::content_type` method. diff --git a/core/tauri-build/src/codegen/context.rs b/core/tauri-build/src/codegen/context.rs index 695e8ed73..f003523ad 100644 --- a/core/tauri-build/src/codegen/context.rs +++ b/core/tauri-build/src/codegen/context.rs @@ -129,6 +129,7 @@ impl CodegenContext { root: quote::quote!(::tauri), capabilities: self.capabilities, assets: None, + test: false, })?; // get the full output file path diff --git a/core/tauri-codegen/src/context.rs b/core/tauri-codegen/src/context.rs index 55b00692b..bd48c3c2e 100644 --- a/core/tauri-codegen/src/context.rs +++ b/core/tauri-codegen/src/context.rs @@ -43,6 +43,8 @@ pub struct ContextData { pub capabilities: Option>, /// The custom assets implementation pub assets: Option, + /// Skip runtime-only types generation for tests (e.g. embed-plist usage). + pub test: bool, } fn inject_script_hashes(document: &NodeRef, key: &AssetKey, csp_hashes: &mut CspHashes) { @@ -140,8 +142,12 @@ pub fn context_codegen(data: ContextData) -> EmbeddedAssetsResult { root, capabilities: additional_capabilities, assets, + test, } = data; + #[allow(unused_variables)] + let running_tests = test; + let target = std::env::var("TAURI_ENV_TARGET_TRIPLE") .as_deref() .map(Target::from_triple) @@ -291,7 +297,7 @@ pub fn context_codegen(data: ContextData) -> EmbeddedAssetsResult { }; #[cfg(target_os = "macos")] - let info_plist = if target == Target::MacOS && dev { + let info_plist = if target == Target::MacOS && dev && !running_tests { let info_plist_path = config_parent.join("Info.plist"); let mut info_plist = if info_plist_path.exists() { plist::Value::from_file(&info_plist_path) diff --git a/core/tauri-macros/src/context.rs b/core/tauri-macros/src/context.rs index 9b166919b..9469ea17f 100644 --- a/core/tauri-macros/src/context.rs +++ b/core/tauri-macros/src/context.rs @@ -8,7 +8,7 @@ use std::path::PathBuf; use syn::{ parse::{Parse, ParseBuffer}, punctuated::Punctuated, - Expr, ExprLit, Lit, LitStr, Meta, PathArguments, PathSegment, Token, + Expr, ExprLit, Lit, LitBool, LitStr, Meta, PathArguments, PathSegment, Token, }; use tauri_codegen::{context_codegen, get_config, ContextData}; use tauri_utils::{config::parse::does_supported_file_name_exist, platform::Target}; @@ -18,6 +18,7 @@ pub(crate) struct ContextItems { root: syn::Path, capabilities: Option>, assets: Option, + test: bool, } impl Parse for ContextItems { @@ -31,6 +32,7 @@ impl Parse for ContextItems { let mut root = None; let mut capabilities = None; let mut assets = None; + let mut test = false; let config_file = input.parse::().ok().map(|raw| { let _ = input.parse::(); let path = PathBuf::from(raw.value()); @@ -93,6 +95,17 @@ impl Parse for ContextItems { "assets" => { assets.replace(v.value); } + "test" => { + if let Expr::Lit(ExprLit { + lit: Lit::Bool(LitBool { value, .. }), + .. + }) = v.value + { + test = value; + } else { + return Err(syn::Error::new(input.span(), "unexpected value for test")); + } + } name => { return Err(syn::Error::new( input.span(), @@ -105,6 +118,8 @@ impl Parse for ContextItems { return Err(syn::Error::new(input.span(), "unexpected list input")); } } + + let _ = input.parse::(); } Ok(Self { @@ -128,6 +143,7 @@ impl Parse for ContextItems { }), capabilities, assets, + test, }) } } @@ -142,6 +158,7 @@ pub(crate) fn generate_context(context: ContextItems) -> TokenStream { root: context.root.to_token_stream(), capabilities: context.capabilities, assets: context.assets, + test: context.test, }) .and_then(|data| context_codegen(data).map_err(|e| e.to_string())); diff --git a/core/tauri-plugin/src/build/mod.rs b/core/tauri-plugin/src/build/mod.rs index a9e498f27..e4c632ac9 100644 --- a/core/tauri-plugin/src/build/mod.rs +++ b/core/tauri-plugin/src/build/mod.rs @@ -124,7 +124,7 @@ impl<'a> Builder<'a> { acl::build::generate_docs( &permissions, &autogenerated, - &name.strip_prefix("tauri-plugin-").unwrap_or(&name), + name.strip_prefix("tauri-plugin-").unwrap_or(&name), )?; } diff --git a/core/tauri-utils/src/pattern/isolation.js b/core/tauri-utils/src/pattern/isolation.js index f1908bffc..880ceb212 100644 --- a/core/tauri-utils/src/pattern/isolation.js +++ b/core/tauri-utils/src/pattern/isolation.js @@ -37,20 +37,27 @@ * @param {object} data * @return {Promise<{nonce: number[], payload: number[]}>} */ - async function encrypt(data) { + async function encrypt(payload) { const algorithm = Object.create(null) algorithm.name = 'AES-GCM' algorithm.iv = window.crypto.getRandomValues(new Uint8Array(12)) - const encoder = new TextEncoder() - const encoded = encoder.encode(__RAW_process_ipc_message_fn__(data).data) + const { contentType, data } = __RAW_process_ipc_message_fn__(payload) + + const message = + typeof data === 'string' + ? new TextEncoder().encode(data) + : ArrayBuffer.isView(data) || data instanceof ArrayBuffer + ? data + : new Uint8Array(data) return window.crypto.subtle - .encrypt(algorithm, aesGcmKey, encoded) + .encrypt(algorithm, aesGcmKey, message) .then((payload) => { const result = Object.create(null) result.nonce = Array.from(new Uint8Array(algorithm.iv)) result.payload = Array.from(new Uint8Array(payload)) + result.contentType = contentType return result }) } @@ -66,7 +73,9 @@ const keys = data.payload ? Object.keys(data.payload) : [] return ( keys.length > 0 && - keys.every((key) => key === 'nonce' || key === 'payload') + keys.every( + (key) => key === 'nonce' || key === 'payload' || key === 'contentType' + ) ) } return false diff --git a/core/tauri-utils/src/pattern/isolation.rs b/core/tauri-utils/src/pattern/isolation.rs index afffdf487..11351005b 100644 --- a/core/tauri-utils/src/pattern/isolation.rs +++ b/core/tauri-utils/src/pattern/isolation.rs @@ -73,6 +73,14 @@ impl AesGcmPair { pub fn key(&self) -> &Aes256Gcm { &self.key } + + #[doc(hidden)] + pub fn encrypt(&self, nonce: &[u8; 12], payload: &[u8]) -> Result, Error> { + self + .key + .encrypt(nonce.into(), payload) + .map_err(|_| self::Error::Aes) + } } /// All cryptographic keys required for Isolation encryption @@ -97,7 +105,7 @@ impl Keys { /// Decrypts a message using the generated keys. pub fn decrypt(&self, raw: RawIsolationPayload<'_>) -> Result, Error> { - let RawIsolationPayload { nonce, payload } = raw; + let RawIsolationPayload { nonce, payload, .. } = raw; let nonce: [u8; 12] = nonce.as_ref().try_into()?; self .aes_gcm @@ -109,9 +117,18 @@ impl Keys { /// Raw representation of #[derive(Debug, serde::Deserialize)] +#[serde(rename_all = "camelCase")] pub struct RawIsolationPayload<'a> { nonce: Cow<'a, [u8]>, payload: Cow<'a, [u8]>, + content_type: Cow<'a, str>, +} + +impl<'a> RawIsolationPayload<'a> { + /// Content type of this payload. + pub fn content_type(&self) -> &Cow<'a, str> { + &self.content_type + } } impl<'a> TryFrom<&'a Vec> for RawIsolationPayload<'a> { diff --git a/core/tauri/scripts/ipc.js b/core/tauri/scripts/ipc.js index 77b21f5d3..28cf33150 100644 --- a/core/tauri/scripts/ipc.js +++ b/core/tauri/scripts/ipc.js @@ -39,7 +39,9 @@ const keys = Object.keys(event.data.payload || {}) return ( keys.length > 0 && - keys.every((key) => key === 'nonce' || key === 'payload') + keys.every( + (key) => key === 'contentType' || key === 'nonce' || key === 'payload' + ) ) } return false diff --git a/core/tauri/src/ipc/mod.rs b/core/tauri/src/ipc/mod.rs index 1c02986e3..cc05a08a8 100644 --- a/core/tauri/src/ipc/mod.rs +++ b/core/tauri/src/ipc/mod.rs @@ -46,6 +46,7 @@ pub type OwnedInvokeResponder = /// Possible values of an IPC payload. #[derive(Debug, Clone)] +#[cfg_attr(test, derive(PartialEq))] pub enum InvokeBody { /// Json payload. Json(JsonValue), diff --git a/core/tauri/src/ipc/protocol.rs b/core/tauri/src/ipc/protocol.rs index 3d06ecd44..ad67d70b2 100644 --- a/core/tauri/src/ipc/protocol.rs +++ b/core/tauri/src/ipc/protocol.rs @@ -388,6 +388,15 @@ fn parse_invoke_request( // so we must ignore it because some commands use the IPC for faster response let has_payload = !body.is_empty(); + #[allow(unused_mut)] + let mut content_type = parts + .headers + .get(http::header::CONTENT_TYPE) + .and_then(|h| h.to_str().ok()) + .map(|mime| mime.parse()) + .unwrap_or(Ok(mime::APPLICATION_OCTET_STREAM)) + .map_err(|_| "unknown content type")?; + #[cfg(feature = "isolation")] if let crate::Pattern::Isolation { crypto_keys, .. } = &*manager.pattern { // if the platform does not support request body, we ignore it @@ -395,8 +404,18 @@ fn parse_invoke_request( #[cfg(feature = "tracing")] let _span = tracing::trace_span!("ipc::request::decrypt_isolation_payload").entered(); - body = crate::utils::pattern::isolation::RawIsolationPayload::try_from(&body) - .and_then(|raw| crypto_keys.decrypt(raw)) + (body, content_type) = crate::utils::pattern::isolation::RawIsolationPayload::try_from(&body) + .and_then(|raw| { + let content_type = raw.content_type().clone(); + crypto_keys.decrypt(raw).map(|decrypted| { + ( + decrypted, + content_type + .parse() + .unwrap_or(mime::APPLICATION_OCTET_STREAM), + ) + }) + }) .map_err(|e| e.to_string())?; } } @@ -440,14 +459,6 @@ fn parse_invoke_request( .map_err(|_| "Tauri error header value must be a numeric string")?, ); - let content_type = parts - .headers - .get(http::header::CONTENT_TYPE) - .and_then(|h| h.to_str().ok()) - .map(|mime| mime.parse()) - .unwrap_or(Ok(mime::APPLICATION_OCTET_STREAM)) - .map_err(|_| "unknown content type")?; - #[cfg(feature = "tracing")] let span = tracing::trace_span!("ipc::request::deserialize").entered(); @@ -481,3 +492,194 @@ fn parse_invoke_request( Ok(payload) } + +#[cfg(test)] +mod tests { + use std::str::FromStr; + + use super::*; + use crate::{manager::AppManager, plugin::PluginStore, StateManager, Wry}; + use http::header::*; + use serde_json::json; + use tauri_macros::generate_context; + + #[test] + fn parse_invoke_request() { + let context = generate_context!("test/fixture/src-tauri/tauri.conf.json", crate, test = true); + let manager: AppManager = AppManager::with_handlers( + context, + PluginStore::default(), + Box::new(|_| false), + None, + Default::default(), + StateManager::new(), + Default::default(), + Default::default(), + Default::default(), + (None, "".into()), + crate::generate_invoke_key().unwrap(), + ); + + let cmd = "write_something"; + let url = "tauri://localhost"; + let invoke_key = "1234ahdsjkl123"; + let callback = 12378123; + let error = 6243; + let headers = HeaderMap::from_iter(vec![ + ( + CONTENT_TYPE, + HeaderValue::from_str(mime::APPLICATION_OCTET_STREAM.as_ref()).unwrap(), + ), + ( + HeaderName::from_str(TAURI_INVOKE_KEY_HEADER_NAME).unwrap(), + HeaderValue::from_str(invoke_key).unwrap(), + ), + ( + HeaderName::from_str(TAURI_CALLBACK_HEADER_NAME).unwrap(), + HeaderValue::from_str(&callback.to_string()).unwrap(), + ), + ( + HeaderName::from_str(TAURI_ERROR_HEADER_NAME).unwrap(), + HeaderValue::from_str(&error.to_string()).unwrap(), + ), + (ORIGIN, HeaderValue::from_str("tauri://localhost").unwrap()), + ]); + + let mut request = Request::builder().uri(format!("ipc://localhost/{cmd}")); + *request.headers_mut().unwrap() = headers.clone(); + + let body = vec![123, 31, 45]; + let request = request.body(body.clone()).unwrap(); + let invoke_request = super::parse_invoke_request(&manager, request).unwrap(); + + assert_eq!(invoke_request.cmd, cmd); + assert_eq!(invoke_request.callback.0, callback); + assert_eq!(invoke_request.error.0, error); + assert_eq!(invoke_request.invoke_key, invoke_key); + assert_eq!(invoke_request.url, url.parse().unwrap()); + assert_eq!(invoke_request.headers, headers); + assert_eq!(invoke_request.body, InvokeBody::Raw(body)); + + let body = json!({ + "key": 1, + "anotherKey": "asda", + }); + + let mut headers = headers.clone(); + headers.insert( + CONTENT_TYPE, + HeaderValue::from_str(mime::APPLICATION_JSON.as_ref()).unwrap(), + ); + + let mut request = Request::builder().uri(format!("ipc://localhost/{cmd}")); + *request.headers_mut().unwrap() = headers.clone(); + + let request = request.body(serde_json::to_vec(&body).unwrap()).unwrap(); + let invoke_request = super::parse_invoke_request(&manager, request).unwrap(); + + assert_eq!(invoke_request.headers, headers); + assert_eq!(invoke_request.body, InvokeBody::Json(body)); + } + + #[test] + #[cfg(feature = "isolation")] + fn parse_invoke_request_isolation() { + let context = generate_context!( + "test/fixture/isolation/src-tauri/tauri.conf.json", + crate, + test = false + ); + + let crate::pattern::Pattern::Isolation { crypto_keys, .. } = &context.pattern else { + unreachable!() + }; + + let mut nonce = [0u8; 12]; + getrandom::getrandom(&mut nonce).unwrap(); + + let body_raw = vec![1, 41, 65, 12, 78]; + let body_bytes = crypto_keys.aes_gcm().encrypt(&nonce, &body_raw).unwrap(); + let isolation_payload_raw = json!({ + "nonce": nonce, + "payload": body_bytes, + "contentType": mime::APPLICATION_OCTET_STREAM.to_string(), + }); + + let body_json = json!({ + "key": 1, + "anotherKey": "string" + }); + let body_bytes = crypto_keys + .aes_gcm() + .encrypt(&nonce, &serde_json::to_vec(&body_json).unwrap()) + .unwrap(); + let isolation_payload_json = json!({ + "nonce": nonce, + "payload": body_bytes, + "contentType": mime::APPLICATION_JSON.to_string(), + }); + + let manager: AppManager = AppManager::with_handlers( + context, + PluginStore::default(), + Box::new(|_| false), + None, + Default::default(), + StateManager::new(), + Default::default(), + Default::default(), + Default::default(), + (None, "".into()), + crate::generate_invoke_key().unwrap(), + ); + + let cmd = "write_something"; + let url = "tauri://localhost"; + let invoke_key = "1234ahdsjkl123"; + let callback = 12378123; + let error = 6243; + + let headers = HeaderMap::from_iter(vec![ + ( + CONTENT_TYPE, + HeaderValue::from_str(mime::APPLICATION_JSON.as_ref()).unwrap(), + ), + ( + HeaderName::from_str(TAURI_INVOKE_KEY_HEADER_NAME).unwrap(), + HeaderValue::from_str(invoke_key).unwrap(), + ), + ( + HeaderName::from_str(TAURI_CALLBACK_HEADER_NAME).unwrap(), + HeaderValue::from_str(&callback.to_string()).unwrap(), + ), + ( + HeaderName::from_str(TAURI_ERROR_HEADER_NAME).unwrap(), + HeaderValue::from_str(&error.to_string()).unwrap(), + ), + (ORIGIN, HeaderValue::from_str("tauri://localhost").unwrap()), + ]); + + let mut request = Request::builder().uri(format!("ipc://localhost/{cmd}")); + *request.headers_mut().unwrap() = headers.clone(); + let body = serde_json::to_vec(&isolation_payload_raw).unwrap(); + let request = request.body(body).unwrap(); + let invoke_request = super::parse_invoke_request(&manager, request).unwrap(); + + assert_eq!(invoke_request.cmd, cmd); + assert_eq!(invoke_request.callback.0, callback); + assert_eq!(invoke_request.error.0, error); + assert_eq!(invoke_request.invoke_key, invoke_key); + assert_eq!(invoke_request.url, url.parse().unwrap()); + assert_eq!(invoke_request.headers, headers); + assert_eq!(invoke_request.body, InvokeBody::Raw(body_raw)); + + let mut request = Request::builder().uri(format!("ipc://localhost/{cmd}")); + *request.headers_mut().unwrap() = headers.clone(); + let body = serde_json::to_vec(&isolation_payload_json).unwrap(); + let request = request.body(body).unwrap(); + let invoke_request = super::parse_invoke_request(&manager, request).unwrap(); + + assert_eq!(invoke_request.headers, headers); + assert_eq!(invoke_request.body, InvokeBody::Json(body_json)); + } +} diff --git a/core/tauri/src/manager/mod.rs b/core/tauri/src/manager/mod.rs index 8410e9e2b..f75eea079 100644 --- a/core/tauri/src/manager/mod.rs +++ b/core/tauri/src/manager/mod.rs @@ -692,7 +692,7 @@ mod test { #[test] fn check_get_url() { - let context = generate_context!("test/fixture/src-tauri/tauri.conf.json", crate); + let context = generate_context!("test/fixture/src-tauri/tauri.conf.json", crate, test = true); let manager: AppManager = AppManager::with_handlers( context, PluginStore::default(), diff --git a/core/tauri/src/vibrancy/macos.rs b/core/tauri/src/vibrancy/macos.rs index d1305718c..1af3f44ff 100644 --- a/core/tauri/src/vibrancy/macos.rs +++ b/core/tauri/src/vibrancy/macos.rs @@ -2,7 +2,6 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: MIT -#![cfg(target_os = "macos")] #![allow(deprecated)] use crate::utils::config::WindowEffectsConfig; diff --git a/core/tauri/test/fixture/isolation/dist/index.html b/core/tauri/test/fixture/isolation/dist/index.html new file mode 100644 index 000000000..698a35779 --- /dev/null +++ b/core/tauri/test/fixture/isolation/dist/index.html @@ -0,0 +1,6 @@ + + + + + + diff --git a/core/tauri/test/fixture/isolation/isolation-dist/index.html b/core/tauri/test/fixture/isolation/isolation-dist/index.html new file mode 100644 index 000000000..27c8d3f39 --- /dev/null +++ b/core/tauri/test/fixture/isolation/isolation-dist/index.html @@ -0,0 +1,10 @@ + + + + + Isolation Secure Script + + + + + diff --git a/core/tauri/test/fixture/isolation/isolation-dist/index.js b/core/tauri/test/fixture/isolation/isolation-dist/index.js new file mode 100644 index 000000000..6510a210e --- /dev/null +++ b/core/tauri/test/fixture/isolation/isolation-dist/index.js @@ -0,0 +1,8 @@ +// Copyright 2019-2024 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + +window.__TAURI_ISOLATION_HOOK__ = (payload, options) => { + console.log('hook', payload, options) + return payload +} diff --git a/core/tauri/test/fixture/isolation/src-tauri/icons/icon.ico b/core/tauri/test/fixture/isolation/src-tauri/icons/icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..b3636e4b22ba65db9061cd60a77b02c92022dfd6 GIT binary patch literal 86642 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 AKmY&$ literal 0 HcmV?d00001 diff --git a/core/tauri/test/fixture/isolation/src-tauri/icons/icon.ico~dev b/core/tauri/test/fixture/isolation/src-tauri/icons/icon.ico~dev new file mode 100644 index 0000000000000000000000000000000000000000..db7fd98204424b6b9b02fa06ad18f05c089f93b5 GIT binary patch literal 57594 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 ny0Oq8K3_V5(4c+dzp8=O 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 literal 0 HcmV?d00001 diff --git a/core/tauri/test/fixture/isolation/src-tauri/tauri.conf.json b/core/tauri/test/fixture/isolation/src-tauri/tauri.conf.json new file mode 100644 index 000000000..5aae4629a --- /dev/null +++ b/core/tauri/test/fixture/isolation/src-tauri/tauri.conf.json @@ -0,0 +1,27 @@ +{ + "$schema": "../../../../../../core/tauri-config-schema/schema.json", + "identifier": "isolation.tauri.example", + "build": { + "frontendDist": "../dist", + "devUrl": "http://localhost:4000" + }, + "app": { + "windows": [ + { + "title": "Isolation Tauri App" + } + ], + "security": { + "csp": "default-src blob: data: filesystem: ws: wss: http: https: tauri: 'unsafe-eval' 'unsafe-inline' 'self'; connect-src ipc: http://ipc.localhost", + "pattern": { + "use": "isolation", + "options": { + "dir": "../isolation-dist" + } + } + } + }, + "bundle": { + "active": true + } +} diff --git a/examples/api/src-tauri/build.rs b/examples/api/src-tauri/build.rs index 40216f916..2b72c77a1 100644 --- a/examples/api/src-tauri/build.rs +++ b/examples/api/src-tauri/build.rs @@ -10,9 +10,11 @@ fn main() { "app-menu", tauri_build::InlinedPlugin::new().commands(&["toggle", "popup"]), ) - .app_manifest( - tauri_build::AppManifest::new().commands(&["log_operation", "perform_request"]), - ), + .app_manifest(tauri_build::AppManifest::new().commands(&[ + "log_operation", + "perform_request", + "echo", + ])), ) .expect("failed to run tauri-build"); } diff --git a/examples/api/src-tauri/capabilities/run-app.json b/examples/api/src-tauri/capabilities/run-app.json index 424fe5dd6..2aa2fcfb1 100644 --- a/examples/api/src-tauri/capabilities/run-app.json +++ b/examples/api/src-tauri/capabilities/run-app.json @@ -16,6 +16,7 @@ ] }, "allow-perform-request", + "allow-echo", "app-menu:default", "sample:allow-ping-scoped", "sample:global-scope", @@ -68,4 +69,4 @@ "webview:allow-create-webview-window", "webview:allow-print" ] -} +} \ No newline at end of file diff --git a/examples/api/src-tauri/permissions/autogenerated/echo.toml b/examples/api/src-tauri/permissions/autogenerated/echo.toml new file mode 100644 index 000000000..d8c458ee8 --- /dev/null +++ b/examples/api/src-tauri/permissions/autogenerated/echo.toml @@ -0,0 +1,11 @@ +# Automatically generated - DO NOT EDIT! + +[[permission]] +identifier = "allow-echo" +description = "Enables the echo command without any pre-configured scope." +commands.allow = ["echo"] + +[[permission]] +identifier = "deny-echo" +description = "Denies the echo command without any pre-configured scope." +commands.deny = ["echo"] diff --git a/examples/api/src-tauri/src/cmd.rs b/examples/api/src-tauri/src/cmd.rs index feeba329a..80ae03d10 100644 --- a/examples/api/src-tauri/src/cmd.rs +++ b/examples/api/src-tauri/src/cmd.rs @@ -45,3 +45,8 @@ pub fn perform_request(endpoint: String, body: RequestBody) -> ApiResponse { message: "message response".into(), } } + +#[command] +pub fn echo(request: tauri::ipc::Request<'_>) -> tauri::ipc::Response { + tauri::ipc::Response::new(request.body().clone()) +} diff --git a/examples/api/src-tauri/src/lib.rs b/examples/api/src-tauri/src/lib.rs index ec676bbbe..ba1c41d9b 100644 --- a/examples/api/src-tauri/src/lib.rs +++ b/examples/api/src-tauri/src/lib.rs @@ -141,6 +141,7 @@ pub fn run_app) + Send + 'static>( .invoke_handler(tauri::generate_handler![ cmd::log_operation, cmd::perform_request, + cmd::echo ]) .build(tauri::tauri_build_context!()) .expect("error while building tauri application"); diff --git a/examples/api/src/App.svelte b/examples/api/src/App.svelte index 7051680ec..7aa6ceb92 100644 --- a/examples/api/src/App.svelte +++ b/examples/api/src/App.svelte @@ -83,12 +83,22 @@ let messages = writable([]) let consoleTextEl async function onMessage(value) { + const valueStr = + typeof value === 'string' + ? value + : JSON.stringify( + value instanceof ArrayBuffer + ? Array.from(new Uint8Array(value)) + : value, + null, + 1 + ) messages.update((r) => [ ...r, { html: `

[${new Date().toLocaleTimeString()}]: ` +
-          (typeof value === 'string' ? value : JSON.stringify(value, null, 1)) +
+          valueStr +
           '
' } ]) diff --git a/examples/api/src/views/Communication.svelte b/examples/api/src/views/Communication.svelte index ec6a8a673..cdee98ad4 100644 --- a/examples/api/src/views/Communication.svelte +++ b/examples/api/src/views/Communication.svelte @@ -36,6 +36,16 @@ .catch(onMessage) } + function echo() { + invoke('echo', { + message: 'Tauri JSON request!' + }) + .then(onMessage) + .catch(onMessage) + + invoke('echo', [1, 2, 3]).then(onMessage).catch(onMessage) + } + function emitEvent() { webviewWindow.emit('js-event', 'this is the payload string') } @@ -49,4 +59,5 @@ +