Feat: Provide a switch for allowing invalid certificates (#450)

This commit is contained in:
Cyenoch 2024-02-25 16:07:06 +08:00 committed by GitHub
parent 38ab68492e
commit e29ce93d32
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 27 additions and 0 deletions

View File

@ -84,6 +84,12 @@ pub struct PrfOption {
#[serde(skip_serializing_if = "Option::is_none")]
pub update_interval: Option<u64>,
/// for `remote` profile
/// disable certificate validation
/// default is `false`
#[serde(skip_serializing_if = "Option::is_none")]
pub danger_accept_invalid_certs: Option<bool>,
}
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?;

View File

@ -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 {

View File

@ -269,6 +269,17 @@ export const ProfileViewer = forwardRef<ProfileViewerRef, Props>(
</StyledBox>
)}
/>
<Controller
name="option.danger_accept_invalid_certs"
control={control}
render={({ field }) => (
<StyledBox>
<InputLabel>{t("Accept Invalid Certs (Danger)")}</InputLabel>
<Switch checked={field.value} {...field} color="primary" />
</StyledBox>
)}
/>
</>
)}
</BaseDialog>

View File

@ -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",

View File

@ -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",

View File

@ -67,6 +67,7 @@
"Update Interval": "更新间隔",
"Use System Proxy": "使用系统代理更新",
"Use Clash Proxy": "使用Clash代理更新",
"Accept Invalid Certs (Danger)": "允许无效证书 (危险)",
"Settings": "设置",
"Clash Setting": "Clash 设置",

View File

@ -173,6 +173,7 @@ interface IProfileOption {
with_proxy?: boolean;
self_proxy?: boolean;
update_interval?: number;
danger_accept_invalid_certs?: boolean;
}
interface IProfilesConfig {