From 7b7dc79c74dd9db128311a32ae38c083348751ad Mon Sep 17 00:00:00 2001 From: git-sac Date: Fri, 3 Apr 2026 19:29:38 +0800 Subject: [PATCH] fix: decode percent-encoded username/password before building Basic Auth header (#6716) URLs with percent-encoded characters in credentials (e.g. %40 for @) were being double-encoded after Url::parse() + as_str() serialization, causing the constructed Basic Auth header to contain the wrong credentials and resulting in 401 Unauthorized errors. --- src-tauri/src/utils/network.rs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src-tauri/src/utils/network.rs b/src-tauri/src/utils/network.rs index 245fd72a7..1066d3610 100644 --- a/src-tauri/src/utils/network.rs +++ b/src-tauri/src/utils/network.rs @@ -155,7 +155,13 @@ impl NetworkManager { if !parsed.username().is_empty() && let Some(pass) = parsed.password() { - let auth_str = format!("{}:{}", parsed.username(), pass); + let username = percent_encoding::percent_decode_str(parsed.username()) + .decode_utf8_lossy() + .into_owned(); + let password = percent_encoding::percent_decode_str(pass) + .decode_utf8_lossy() + .into_owned(); + let auth_str = format!("{}:{}", username, password); let encoded = general_purpose::STANDARD.encode(auth_str); extra_headers.insert("Authorization", HeaderValue::from_str(&format!("Basic {}", encoded))?); }