diff --git a/Cargo.lock b/Cargo.lock index 13b1616970..04e93d55e2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6575,6 +6575,7 @@ dependencies = [ "tauri", "tauri-plugin", "tauri-plugin-fs", + "tauri-plugin-store", "thiserror", "url", ] @@ -6723,7 +6724,7 @@ dependencies = [ [[package]] name = "tauri-plugin-single-instance" -version = "2.0.0-beta.1" +version = "2.0.0-beta.2" dependencies = [ "log", "serde", diff --git a/plugins/http/Cargo.toml b/plugins/http/Cargo.toml index 3b06c2a2fa..875f1c24a2 100644 --- a/plugins/http/Cargo.toml +++ b/plugins/http/Cargo.toml @@ -30,6 +30,7 @@ http = "0.2" reqwest = { version = "0.11", default-features = false } url = { workspace = true } data-url = "0.3" +tauri-plugin-store = { path = "../store", version = "2.0.0-beta.1", optional = true } [features] multipart = [ "reqwest/multipart" ] @@ -44,7 +45,7 @@ rustls-tls-manual-roots = [ "reqwest/rustls-tls-manual-roots" ] rustls-tls-webpki-roots = [ "reqwest/rustls-tls-webpki-roots" ] rustls-tls-native-roots = [ "reqwest/rustls-tls-native-roots" ] blocking = [ "reqwest/blocking" ] -cookies = [ "reqwest/cookies" ] +cookies = [ "reqwest/cookies", "tauri-plugin-store" ] gzip = [ "reqwest/gzip" ] brotli = [ "reqwest/brotli" ] deflate = [ "reqwest/deflate" ] diff --git a/plugins/http/src/commands.rs b/plugins/http/src/commands.rs index d4b2469bf3..2f35723544 100644 --- a/plugins/http/src/commands.rs +++ b/plugins/http/src/commands.rs @@ -14,10 +14,7 @@ use tauri::{ AppHandle, Manager, ResourceId, Runtime, }; -use crate::{ - scope::{Entry, Scope}, - Error, Result, -}; +use crate::{scope::{Entry, Scope}, Error, Result, HttpExt}; struct ReqwestResponse(reqwest::Response); @@ -190,6 +187,11 @@ pub async fn fetch( builder = attach_proxy(proxy_config, builder)?; } + #[cfg(feature = "cookies")] + { + builder = builder.cookie_provider(app.http().jar.clone()); + } + let mut request = builder.build()?.request(method.clone(), url); for (name, value) in &headers { diff --git a/plugins/http/src/lib.rs b/plugins/http/src/lib.rs index e4aa7ba1e4..d750f58e5e 100644 --- a/plugins/http/src/lib.rs +++ b/plugins/http/src/lib.rs @@ -6,6 +6,11 @@ //! //! Access the HTTP client written in Rust. +#[cfg(feature = "cookies")] +use std::sync::Arc; +#[cfg(feature = "cookies")] +use tauri_plugin_store::StoreBuilder; + pub use reqwest; use tauri::{ plugin::{Builder, TauriPlugin}, @@ -21,6 +26,8 @@ mod scope; struct Http { #[allow(dead_code)] app: AppHandle, + #[cfg(feature = "cookies")] + jar: Arc } trait HttpExt { @@ -43,7 +50,14 @@ pub fn init() -> TauriPlugin { commands::fetch_read_body, ]) .setup(|app, _api| { - app.manage(Http { app: app.clone() }); + #[cfg(feature = "cookies")] + let mut store = StoreBuilder::new("http/cookies.bin".parse()?).build(app); + + app.manage(Http { + app: app.clone(), + #[cfg(feature = "cookies")] + jar: Arc::new(reqwest::cookie::Jar::default()), + }); Ok(()) }) .build()