From 66db0a47512617ff912cf1a6fdcd5df0dc0fca7f Mon Sep 17 00:00:00 2001 From: Cyenoch Date: Sun, 25 Feb 2024 16:07:06 +0800 Subject: [PATCH] Feat: Provide a switch for allowing invalid certificates (#450) --- src-tauri/src/config/prfitem.rs | 9 +++++++++ src-tauri/src/utils/resolve.rs | 1 + src/components/profile/profile-viewer.tsx | 11 +++++++++++ src/locales/en.json | 1 + src/locales/ru.json | 3 +++ src/locales/zh.json | 1 + src/services/types.d.ts | 1 + 7 files changed, 27 insertions(+) diff --git a/src-tauri/src/config/prfitem.rs b/src-tauri/src/config/prfitem.rs index 4d3094e2..f62e053f 100644 --- a/src-tauri/src/config/prfitem.rs +++ b/src-tauri/src/config/prfitem.rs @@ -84,6 +84,12 @@ pub struct PrfOption { #[serde(skip_serializing_if = "Option::is_none")] pub update_interval: Option, + + /// for `remote` profile + /// disable certificate validation + /// default is `false` + #[serde(skip_serializing_if = "Option::is_none")] + pub danger_accept_invalid_certs: Option, } impl PrfOption { @@ -93,6 +99,7 @@ impl PrfOption { a.user_agent = b.user_agent.or(a.user_agent); a.with_proxy = b.with_proxy.or(a.with_proxy); a.self_proxy = b.self_proxy.or(a.self_proxy); + a.danger_accept_invalid_certs = b.danger_accept_invalid_certs.or(a.danger_accept_invalid_certs); a.update_interval = b.update_interval.or(a.update_interval); Some(a) } @@ -170,6 +177,7 @@ impl PrfItem { let opt_ref = option.as_ref(); let with_proxy = opt_ref.map_or(false, |o| o.with_proxy.unwrap_or(false)); let self_proxy = opt_ref.map_or(false, |o| o.self_proxy.unwrap_or(false)); + let accept_invalid_certs = opt_ref.map_or(false, |o| o.danger_accept_invalid_certs.unwrap_or(false)); let user_agent = opt_ref.and_then(|o| o.user_agent.clone()); let update_interval = opt_ref.and_then(|o| o.update_interval); @@ -216,6 +224,7 @@ impl PrfItem { None => "clash-verge/unknown".to_string(), }; + builder = builder.danger_accept_invalid_certs(accept_invalid_certs); builder = builder.user_agent(user_agent.unwrap_or(version)); let resp = builder.build()?.get(url).send().await?; diff --git a/src-tauri/src/utils/resolve.rs b/src-tauri/src/utils/resolve.rs index 8b7864a9..295d04fc 100644 --- a/src-tauri/src/utils/resolve.rs +++ b/src-tauri/src/utils/resolve.rs @@ -243,6 +243,7 @@ pub async fn resolve_scheme(param: String) { user_agent: None, with_proxy: Some(true), self_proxy: None, + danger_accept_invalid_certs: None, update_interval: None, }; if let Ok(item) = PrfItem::from_url(url, None, None, Some(option)).await { diff --git a/src/components/profile/profile-viewer.tsx b/src/components/profile/profile-viewer.tsx index cdb190ec..170fffdc 100644 --- a/src/components/profile/profile-viewer.tsx +++ b/src/components/profile/profile-viewer.tsx @@ -269,6 +269,17 @@ export const ProfileViewer = forwardRef( )} /> + + ( + + {t("Accept Invalid Certs (Danger)")} + + + )} + /> )} diff --git a/src/locales/en.json b/src/locales/en.json index 90f5c195..c0217c4e 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -67,6 +67,7 @@ "Update Interval": "Update Interval", "Use System Proxy": "Use System Proxy", "Use Clash Proxy": "Use Clash Proxy", + "Accept Invalid Certs (Danger)": "Allows Invalid Certificates (Danger)", "Settings": "Settings", "Clash Setting": "Clash Setting", diff --git a/src/locales/ru.json b/src/locales/ru.json index 53a665f3..f91faac8 100644 --- a/src/locales/ru.json +++ b/src/locales/ru.json @@ -65,6 +65,9 @@ "Descriptions": "Описания", "Subscription URL": "URL подписки", "Update Interval": "Интервал обновления", + "Use System Proxy": "Использовать системный прокси для обновления", + "Use Clash Proxy": "Использовать прокси Clash для обновления", + "Accept Invalid Certs (Danger)": "Принимать недействительные сертификаты (Опасно)", "Settings": "Настройки", "Clash Setting": "Настройки Clash", diff --git a/src/locales/zh.json b/src/locales/zh.json index 4298e276..ddaf06d0 100644 --- a/src/locales/zh.json +++ b/src/locales/zh.json @@ -67,6 +67,7 @@ "Update Interval": "更新间隔", "Use System Proxy": "使用系统代理更新", "Use Clash Proxy": "使用Clash代理更新", + "Accept Invalid Certs (Danger)": "允许无效证书 (危险)", "Settings": "设置", "Clash Setting": "Clash 设置", diff --git a/src/services/types.d.ts b/src/services/types.d.ts index 9184d074..89112b47 100644 --- a/src/services/types.d.ts +++ b/src/services/types.d.ts @@ -173,6 +173,7 @@ interface IProfileOption { with_proxy?: boolean; self_proxy?: boolean; update_interval?: number; + danger_accept_invalid_certs?: boolean; } interface IProfilesConfig {