diff --git a/Cargo.lock b/Cargo.lock index baa640cd9..c25053c9f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -156,7 +156,7 @@ dependencies = [ "objc2-foundation 0.3.2", "parking_lot", "percent-encoding", - "windows-sys 0.60.2", + "windows-sys 0.59.0", "wl-clipboard-rs", "x11rb", ] @@ -1332,8 +1332,8 @@ dependencies = [ [[package]] name = "clash_verge_service_ipc" -version = "2.0.26" -source = "git+https://github.com/clash-verge-rev/clash-verge-service-ipc#37b9964a9bce767b5b95ea2be75613b23400c9f0" +version = "2.0.27" +source = "git+https://github.com/clash-verge-rev/clash-verge-service-ipc#43274f2db38959090797b35416c404ee482e8744" dependencies = [ "anyhow", "compact_str", @@ -2120,7 +2120,7 @@ dependencies = [ "libc", "option-ext", "redox_users 0.5.2", - "windows-sys 0.61.2", + "windows-sys 0.59.0", ] [[package]] @@ -2393,7 +2393,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.61.2", + "windows-sys 0.59.0", ] [[package]] @@ -3616,7 +3616,7 @@ dependencies = [ "libc", "percent-encoding", "pin-project-lite", - "socket2 0.6.1", + "socket2 0.5.10", "system-configuration", "tokio", "tower-service", @@ -3949,7 +3949,7 @@ checksum = "3640c1c38b8e4e43584d8df18be5fc6b0aa314ce6ebf51b53313d4306cca8e46" dependencies = [ "hermit-abi 0.5.2", "libc", - "windows-sys 0.61.2", + "windows-sys 0.59.0", ] [[package]] @@ -4755,7 +4755,7 @@ version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" dependencies = [ - "windows-sys 0.61.2", + "windows-sys 0.59.0", ] [[package]] @@ -5225,7 +5225,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7d8fae84b431384b68627d0f9b3b1245fcf9f46f6c0e3dc902e9dce64edd1967" dependencies = [ "libc", - "windows-sys 0.61.2", + "windows-sys 0.45.0", ] [[package]] @@ -6034,7 +6034,7 @@ dependencies = [ "quinn-udp", "rustc-hash", "rustls", - "socket2 0.6.1", + "socket2 0.5.10", "thiserror 2.0.17", "tokio", "tracing", @@ -6071,9 +6071,9 @@ dependencies = [ "cfg_aliases", "libc", "once_cell", - "socket2 0.6.1", + "socket2 0.5.10", "tracing", - "windows-sys 0.60.2", + "windows-sys 0.59.0", ] [[package]] @@ -6645,7 +6645,7 @@ dependencies = [ "errno", "libc", "linux-raw-sys 0.11.0", - "windows-sys 0.61.2", + "windows-sys 0.59.0", ] [[package]] @@ -8182,7 +8182,7 @@ dependencies = [ "getrandom 0.3.4", "once_cell", "rustix 1.1.2", - "windows-sys 0.61.2", + "windows-sys 0.59.0", ] [[package]] @@ -9580,7 +9580,7 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.61.2", + "windows-sys 0.48.0", ] [[package]] diff --git a/Changelog.md b/Changelog.md index 8d5d7b50c..9e2940380 100644 --- a/Changelog.md +++ b/Changelog.md @@ -33,5 +33,6 @@ - 使用「编辑节点」添加节点时,自动将节点添加到第一个 `select` 类型的代理组的第一位 - 隐藏侧边导航栏和悬浮跳转导航的滚动条 - 完善对 AnyTLS / Mieru / Sudoku 的 GUI 支持 +- macOS 和 Linux 对服务 IPC 权限进一步限制 diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index 9d11d8f13..4efe91ed1 100755 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -94,7 +94,7 @@ tauri-plugin-devtools = { version = "2.0.1" } tauri-plugin-mihomo = { git = "https://github.com/clash-verge-rev/tauri-plugin-mihomo" } clash_verge_logger = { git = "https://github.com/clash-verge-rev/clash-verge-logger" } async-trait = "0.1.89" -clash_verge_service_ipc = { version = "2.0.26", features = [ +clash_verge_service_ipc = { version = "2.0.27", features = [ "client", ], git = "https://github.com/clash-verge-rev/clash-verge-service-ipc" } arc-swap = "1.8.0" diff --git a/src-tauri/src/core/service.rs b/src-tauri/src/core/service.rs index 0e1e9defe..e43ee36dd 100644 --- a/src-tauri/src/core/service.rs +++ b/src-tauri/src/core/service.rs @@ -295,54 +295,6 @@ fn force_reinstall_service() -> Result<()> { }) } -/// 检查服务版本 - 使用IPC通信 -async fn check_service_version() -> Result { - let version_arc: Result = { - logging!(info, Type::Service, "开始检查服务版本 (IPC)"); - let result = clash_verge_service_ipc::get_version().await; - logging!(debug, Type::Service, "检查服务版本 (IPC) 结果: {:?}", result); - - // 检查错误信息是否是JSON序列化错误或预期值错误,以适配老版本服务 - // 这可能是因为老版本服务的API不兼容,导致无法正确解析响应 - // 如果是这种情况,直接返回空字符串,表示无法获取版本 - if let Err(e) = result.as_ref() - && (e.to_string().contains("JSON serialization error") || e.to_string().contains("expected value")) - { - logging!( - warn, - Type::Service, - "服务版本检查失败,可能是老版本服务 API 不兼容: {}", - e - ); - return Ok("".to_string()); - } - - // 因为上面的错误处理 Error 可能会被忽略,所以这里需要再次检查 - let response = result.context("无法连接到Clash Verge Service")?; - if response.code > 0 { - let err_msg = response.message; - logging!(error, Type::Service, "获取服务版本失败: {}", err_msg); - return Err(anyhow::anyhow!(err_msg)); - } - - let version = response.data.unwrap_or_else(|| "unknown".into()); - Ok(version) - }; - - match version_arc.as_ref() { - Ok(v) => Ok(v.clone()), - Err(e) => Err(anyhow::Error::msg(e.to_string())), - } -} - -/// 检查服务是否需要重装 -pub async fn check_service_needs_reinstall() -> Result { - match check_service_version().await { - Ok(version) => Ok(version != clash_verge_service_ipc::VERSION), - Err(e) => Err(e), - } -} - /// 尝试使用服务启动core pub(super) async fn start_with_existing_service(config_file: &PathBuf) -> Result<()> { logging!(info, Type::Service, "尝试使用现有服务启动核心"); @@ -483,20 +435,10 @@ impl ServiceManager { /// 综合服务状态检查(一次性完成所有检查) pub async fn check_service_comprehensive(&self) -> ServiceStatus { - match check_service_needs_reinstall().await { - Ok(need) => { - logging!(debug, Type::Service, "服务当前可用,检查是否需要重装"); - if need { - logging!(debug, Type::Service, "服务需要重装且需要重装"); - ServiceStatus::NeedsReinstall - } else { - ServiceStatus::Ready - } - } - Err(err) => { - logging!(warn, Type::Service, "服务不可用,检查安装状态"); - ServiceStatus::Unavailable(err.to_string()) - } + if clash_verge_service_ipc::is_reinstall_service_needed().await { + ServiceStatus::NeedsReinstall + } else { + ServiceStatus::Ready } }