diff --git a/Cargo.lock b/Cargo.lock index c55ba0e4f..6300bf8f9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -258,7 +258,7 @@ dependencies = [ "serde", "serde_json", "thiserror 1.0.69", - "x509-certificate", + "x509-certificate 0.23.1", ] [[package]] @@ -349,7 +349,7 @@ dependencies = [ "widestring", "windows-sys 0.52.0", "x509", - "x509-certificate", + "x509-certificate 0.23.1", "xml-rs", "yasna", "zeroize", @@ -397,7 +397,7 @@ dependencies = [ "signature 2.2.0", "thiserror 1.0.69", "url", - "x509-certificate", + "x509-certificate 0.23.1", "xml-rs", "xz2", ] @@ -1482,16 +1482,16 @@ dependencies = [ [[package]] name = "cargo-mobile2" -version = "0.17.4" +version = "0.17.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "197498a32cc339dac8e77a319eacf00688b5ac633628f007c4465f303cc69105" +checksum = "1821b10b80c2dc11d2001646435931a9913dc30d025036ed6b2f2e5c95e3ad12" dependencies = [ "colored", "core-foundation 0.10.0", "deunicode", "duct", "dunce", - "embed-resource 2.5.1", + "embed-resource", "english-numbers", "freedesktop_entry_parser", "handlebars", @@ -1508,12 +1508,12 @@ dependencies = [ "serde", "serde_json", "textwrap", - "thiserror 1.0.69", + "thiserror 2.0.10", "toml 0.8.19", "ureq", - "which 6.0.3", - "windows", - "x509-certificate", + "which", + "windows 0.59.0", + "x509-certificate 0.24.0", ] [[package]] @@ -2082,7 +2082,7 @@ dependencies = [ "reqwest 0.11.27", "ring", "signature 2.2.0", - "x509-certificate", + "x509-certificate 0.23.1", ] [[package]] @@ -2692,20 +2692,6 @@ dependencies = [ "serde", ] -[[package]] -name = "embed-resource" -version = "2.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b68b6f9f63a0b6a38bc447d4ce84e2b388f3ec95c99c641c8ff0dd3ef89a6379" -dependencies = [ - "cc", - "memchr", - "rustc_version", - "toml 0.8.19", - "vswhom", - "winreg 0.52.0", -] - [[package]] name = "embed-resource" version = "3.0.1" @@ -6361,7 +6347,7 @@ dependencies = [ "aes-gcm", "aes-kw", "argon2", - "base64 0.22.1", + "base64 0.21.7", "bitfield", "block-padding", "blowfish", @@ -8981,7 +8967,7 @@ dependencies = [ "tao-macros", "unicode-segmentation", "url", - "windows", + "windows 0.58.0", "windows-core 0.58.0", "windows-version", "x11-dl", @@ -9078,7 +9064,7 @@ dependencies = [ "webkit2gtk", "webview2-com", "window-vibrancy", - "windows", + "windows 0.58.0", ] [[package]] @@ -9279,7 +9265,7 @@ dependencies = [ "signal-hook", "signal-hook-tokio", "tokio", - "which 7.0.1", + "which", ] [[package]] @@ -9320,7 +9306,7 @@ dependencies = [ "serde", "serde_json", "tempfile", - "x509-certificate", + "x509-certificate 0.23.1", ] [[package]] @@ -9414,7 +9400,7 @@ dependencies = [ "tauri-utils 2.1.1", "thiserror 2.0.10", "url", - "windows", + "windows 0.58.0", ] [[package]] @@ -9438,7 +9424,7 @@ dependencies = [ "url", "webkit2gtk", "webview2-com", - "windows", + "windows 0.58.0", "wry", ] @@ -9579,7 +9565,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56eaa45f707bedf34d19312c26d350bc0f3c59a47e58e8adbeecdc850d2c13a0" dependencies = [ - "embed-resource 3.0.1", + "embed-resource", "toml 0.8.19", ] @@ -10342,22 +10328,39 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "ureq" -version = "2.12.1" +version = "3.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02d1a66277ed75f640d608235660df48c8e3c19f3b4edb6a263315626cc3c01d" +checksum = "aa6a209bb4b8d5903579fc4f8cd12ce5594f1ed6b735bf290ab5e2bdb3e70013" dependencies = [ "base64 0.22.1", + "cc", + "der 0.7.9", "flate2", "log", "native-tls", - "once_cell", + "percent-encoding", "rustls 0.23.20", + "rustls-pemfile 2.2.0", "rustls-pki-types", "socks", - "url", + "ureq-proto", + "utf-8", + "webpki-root-certs", "webpki-roots 0.26.7", ] +[[package]] +name = "ureq-proto" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c51fe73e1d8c4e06bb2698286f7e7453c6fc90528d6d2e7fc36bb4e87fe09b1" +dependencies = [ + "base64 0.22.1", + "http 1.2.0", + "httparse", + "log", +] + [[package]] name = "url" version = "2.5.4" @@ -10748,6 +10751,15 @@ dependencies = [ "system-deps", ] +[[package]] +name = "webpki-root-certs" +version = "0.26.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cd5da49bdf1f30054cfe0b8ce2958b8fbeb67c4d82c8967a598af481bef255c" +dependencies = [ + "rustls-pki-types", +] + [[package]] name = "webpki-roots" version = "0.25.4" @@ -10771,10 +10783,10 @@ checksum = "823e7ebcfaea51e78f72c87fc3b65a1e602c321f407a0b36dbb327d7bb7cd921" dependencies = [ "webview2-com-macros", "webview2-com-sys", - "windows", + "windows 0.58.0", "windows-core 0.58.0", - "windows-implement", - "windows-interface", + "windows-implement 0.58.0", + "windows-interface 0.58.0", ] [[package]] @@ -10795,7 +10807,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a82bce72db6e5ee83c68b5de1e2cd6ea195b9fbff91cb37df5884cbe3222df4" dependencies = [ "thiserror 1.0.69", - "windows", + "windows 0.58.0", "windows-core 0.58.0", ] @@ -10805,18 +10817,6 @@ version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "53a85b86a771b1c87058196170769dd264f66c0782acf1ae6cc51bfd64b39082" -[[package]] -name = "which" -version = "6.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4ee928febd44d98f2f459a4a79bd4d928591333a494a10a868418ac1b39cf1f" -dependencies = [ - "either", - "home", - "rustix 0.38.43", - "winsafe", -] - [[package]] name = "which" version = "7.0.1" @@ -10890,6 +10890,16 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "windows" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f919aee0a93304be7f62e8e5027811bbba96bcb1de84d6618be56e43f8a32a1" +dependencies = [ + "windows-core 0.59.0", + "windows-targets 0.53.0", +] + [[package]] name = "windows-core" version = "0.52.0" @@ -10905,13 +10915,26 @@ version = "0.58.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6ba6d44ec8c2591c134257ce647b7ea6b20335bf6379a27dac5f1641fcf59f99" dependencies = [ - "windows-implement", - "windows-interface", + "windows-implement 0.58.0", + "windows-interface 0.58.0", "windows-result 0.2.0", "windows-strings 0.1.0", "windows-targets 0.52.6", ] +[[package]] +name = "windows-core" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "810ce18ed2112484b0d4e15d022e5f598113e220c53e373fb31e67e21670c1ce" +dependencies = [ + "windows-implement 0.59.0", + "windows-interface 0.59.0", + "windows-result 0.3.0", + "windows-strings 0.3.0", + "windows-targets 0.53.0", +] + [[package]] name = "windows-implement" version = "0.58.0" @@ -10923,6 +10946,17 @@ dependencies = [ "syn 2.0.95", ] +[[package]] +name = "windows-implement" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83577b051e2f49a058c308f17f273b570a6a758386fc291b5f6a934dd84e48c1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.95", +] + [[package]] name = "windows-interface" version = "0.58.0" @@ -10934,6 +10968,17 @@ dependencies = [ "syn 2.0.95", ] +[[package]] +name = "windows-interface" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb26fd936d991781ea39e87c3a27285081e3c0da5ca0fcbc02d368cc6f52ff01" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.95", +] + [[package]] name = "windows-registry" version = "0.2.0" @@ -11449,7 +11494,7 @@ dependencies = [ "webkit2gtk", "webkit2gtk-sys", "webview2-com", - "windows", + "windows 0.58.0", "windows-core 0.58.0", "windows-version", "x11-dl", @@ -11537,6 +11582,25 @@ dependencies = [ "zeroize", ] +[[package]] +name = "x509-certificate" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e57b9f8bcae7c1f36479821ae826d75050c60ce55146fd86d3553ed2573e2762" +dependencies = [ + "bcder", + "bytes", + "chrono", + "der 0.7.9", + "hex", + "pem", + "ring", + "signature 2.2.0", + "spki 0.7.3", + "thiserror 1.0.69", + "zeroize", +] + [[package]] name = "xattr" version = "1.4.0" diff --git a/crates/tauri-bundler/Cargo.toml b/crates/tauri-bundler/Cargo.toml index 27fc31c95..d9d73eba8 100644 --- a/crates/tauri-bundler/Cargo.toml +++ b/crates/tauri-bundler/Cargo.toml @@ -32,7 +32,7 @@ tempfile = "3" log = { version = "0.4.21", features = ["kv"] } dirs = "6" os_pipe = "1" -ureq = { version = "2", default-features = false, features = ["socks-proxy"] } +ureq = { version = "3", default-features = false, features = ["socks-proxy"] } native-tls = { version = "0.2", optional = true } hex = "0.4" semver = "1" @@ -73,4 +73,4 @@ path = "src/lib.rs" default = ["rustls"] native-tls = ["ureq/native-tls"] native-tls-vendored = ["native-tls", "native-tls/vendored"] -rustls = ["ureq/tls"] +rustls = ["ureq/rustls"] diff --git a/crates/tauri-bundler/src/bundle/windows/util.rs b/crates/tauri-bundler/src/bundle/windows/util.rs index c9d1c9bac..8f4bce1f8 100644 --- a/crates/tauri-bundler/src/bundle/windows/util.rs +++ b/crates/tauri-bundler/src/bundle/windows/util.rs @@ -7,6 +7,8 @@ use std::{ path::{Path, PathBuf}, }; +use ureq::ResponseExt; + use crate::utils::http_utils::download; pub const WEBVIEW2_BOOTSTRAPPER_URL: &str = "https://go.microsoft.com/fwlink/p/?LinkId=2124703"; @@ -22,9 +24,12 @@ pub const WIX_OUTPUT_FOLDER_NAME: &str = "msi"; pub const WIX_UPDATER_OUTPUT_FOLDER_NAME: &str = "msi-updater"; pub fn webview2_guid_path(url: &str) -> crate::Result<(String, String)> { - let agent = ureq::AgentBuilder::new().try_proxy_from_env(true).build(); + let agent: ureq::Agent = ureq::Agent::config_builder() + .proxy(ureq::Proxy::try_from_env()) + .build() + .into(); let response = agent.head(url).call().map_err(Box::new)?; - let final_url = response.get_url(); + let final_url = response.get_uri().to_string(); let remaining_url = final_url.strip_prefix(WEBVIEW2_URL_PREFIX).ok_or_else(|| { anyhow::anyhow!( "WebView2 URL prefix mismatch. Expected `{}`, found `{}`.", diff --git a/crates/tauri-bundler/src/utils/http_utils.rs b/crates/tauri-bundler/src/utils/http_utils.rs index ec8577770..3456dd664 100644 --- a/crates/tauri-bundler/src/utils/http_utils.rs +++ b/crates/tauri-bundler/src/utils/http_utils.rs @@ -47,12 +47,15 @@ fn generate_github_alternative_url(url: &str) -> Option<(ureq::Agent, String)> { generate_github_mirror_url_from_template(url) .or_else(|| generate_github_mirror_url_from_base(url)) - .map(|alt_url| (ureq::AgentBuilder::new().build(), alt_url)) + .map(|alt_url| (ureq::agent(), alt_url)) } fn create_agent_and_url(url: &str) -> (ureq::Agent, String) { generate_github_alternative_url(url).unwrap_or(( - ureq::AgentBuilder::new().try_proxy_from_env(true).build(), + ureq::Agent::config_builder() + .proxy(ureq::Proxy::try_from_env()) + .build() + .into(), url.to_owned(), )) } @@ -65,7 +68,7 @@ pub fn download(url: &str) -> crate::Result> { let response = agent.get(&final_url).call().map_err(Box::new)?; let mut bytes = Vec::new(); - response.into_reader().read_to_end(&mut bytes)?; + response.into_body().into_reader().read_to_end(&mut bytes)?; Ok(bytes) } diff --git a/crates/tauri-cli/Cargo.toml b/crates/tauri-cli/Cargo.toml index 668680547..f8937aa4c 100644 --- a/crates/tauri-cli/Cargo.toml +++ b/crates/tauri-cli/Cargo.toml @@ -75,7 +75,7 @@ handlebars = "6" include_dir = "0.7" minisign = "=0.7.3" base64 = "0.22" -ureq = { version = "2", default-features = false, features = ["gzip"] } +ureq = { version = "3", default-features = false, features = ["gzip"] } os_info = "3" semver = "1" regex = "1" @@ -148,4 +148,4 @@ native-tls = [ "ureq/native-tls", ] native-tls-vendored = ["native-tls", "tauri-bundler/native-tls-vendored"] -rustls = ["tauri-bundler/rustls", "cargo-mobile2/rustls", "ureq/tls"] +rustls = ["tauri-bundler/rustls", "cargo-mobile2/rustls", "ureq/rustls"] diff --git a/crates/tauri-cli/src/helpers/cargo_manifest.rs b/crates/tauri-cli/src/helpers/cargo_manifest.rs index c8269a0d6..6e9ed5ba1 100644 --- a/crates/tauri-cli/src/helpers/cargo_manifest.rs +++ b/crates/tauri-cli/src/helpers/cargo_manifest.rs @@ -99,13 +99,13 @@ impl std::fmt::Display for CrateVersion { pub fn crate_latest_version(name: &str) -> Option { let url = format!("https://docs.rs/crate/{name}/"); - match ureq::get(&url).call() { - Ok(response) => match (response.status(), response.header("location")) { - (302, Some(location)) => Some(location.replace(&url, "")), - _ => None, - }, - Err(_) => None, + let response = ureq::get(&url).call().ok()?; + if response.status().is_redirection() { + if let Some(location) = response.headers().get("location") { + return location.to_str().ok().map(|s| s.replace(&url, "")); + } } + None } pub fn crate_version(