feat: improve system bypass settings

This commit is contained in:
huzibaca 2024-12-10 14:37:11 +08:00
parent 2a4a3c8250
commit 4f4fe4c41c

View File

@ -76,7 +76,6 @@ export const SysproxyViewer = forwardRef<DialogRef>((props, ref) => {
proxy_auto_config, proxy_auto_config,
pac_file_content, pac_file_content,
enable_proxy_guard, enable_proxy_guard,
enable_bypass_check,
use_default_bypass, use_default_bypass,
system_proxy_bypass, system_proxy_bypass,
proxy_guard_duration, proxy_guard_duration,
@ -85,20 +84,28 @@ export const SysproxyViewer = forwardRef<DialogRef>((props, ref) => {
const [value, setValue] = useState({ const [value, setValue] = useState({
guard: enable_proxy_guard, guard: enable_proxy_guard,
bypass: system_proxy_bypass, bypass: system_proxy_bypass,
bypass_check: enable_bypass_check ?? true,
duration: proxy_guard_duration ?? 10, duration: proxy_guard_duration ?? 10,
use_default: use_default_bypass ?? true, use_default: use_default_bypass ?? true,
pac: proxy_auto_config, pac: proxy_auto_config,
pac_content: pac_file_content ?? DEFAULT_PAC, pac_content: pac_file_content ?? DEFAULT_PAC,
}); });
const defaultBypass = () => {
if (isWindows) {
return "localhost;127.*;192.168.*;10.*;172.16.*;172.17.*;172.18.*;172.19.*;172.20.*;172.21.*;172.22.*;172.23.*;172.24.*;172.25.*;172.26.*;172.27.*;172.28.*;172.29.*;172.30.*;172.31.*;<local>";
}
if (getSystem() === "linux") {
return "localhost,127.0.0.1,192.168.0.0/16,10.0.0.0/8,172.16.0.0/12,::1";
}
return "127.0.0.1,192.168.0.0/16,10.0.0.0/8,172.16.0.0/12,localhost,*.local,*.crashlytics.com,<local>";
};
useImperativeHandle(ref, () => ({ useImperativeHandle(ref, () => ({
open: () => { open: () => {
setOpen(true); setOpen(true);
setValue({ setValue({
guard: enable_proxy_guard, guard: enable_proxy_guard,
bypass: system_proxy_bypass, bypass: system_proxy_bypass,
bypass_check: enable_bypass_check ?? true,
duration: proxy_guard_duration ?? 10, duration: proxy_guard_duration ?? 10,
use_default: use_default_bypass ?? true, use_default: use_default_bypass ?? true,
pac: proxy_auto_config, pac: proxy_auto_config,
@ -115,6 +122,10 @@ export const SysproxyViewer = forwardRef<DialogRef>((props, ref) => {
Notice.error(t("Proxy Daemon Duration Cannot be Less than 1 Second")); Notice.error(t("Proxy Daemon Duration Cannot be Less than 1 Second"));
return; return;
} }
if (value.bypass && !validReg.test(value.bypass)) {
Notice.error(t("Invalid Bypass Format"));
return;
}
const patch: Partial<IVergeConfig> = {}; const patch: Partial<IVergeConfig> = {};
@ -127,9 +138,7 @@ export const SysproxyViewer = forwardRef<DialogRef>((props, ref) => {
if (value.bypass !== system_proxy_bypass) { if (value.bypass !== system_proxy_bypass) {
patch.system_proxy_bypass = value.bypass; patch.system_proxy_bypass = value.bypass;
} }
if (value.bypass_check !== enable_bypass_check) {
patch.enable_bypass_check = value.bypass_check;
}
if (value.pac !== proxy_auto_config) { if (value.pac !== proxy_auto_config) {
patch.proxy_auto_config = value.pac; patch.proxy_auto_config = value.pac;
} }
@ -139,10 +148,7 @@ export const SysproxyViewer = forwardRef<DialogRef>((props, ref) => {
if (value.pac_content !== pac_file_content) { if (value.pac_content !== pac_file_content) {
patch.pac_file_content = value.pac_content; patch.pac_file_content = value.pac_content;
} }
if (value.bypass && value.bypass_check && !validReg.test(value.bypass)) {
Notice.error(t("Invalid Bypass Format"));
return;
}
try { try {
await patchVerge(patch); await patchVerge(patch);
setOpen(false); setOpen(false);
@ -247,26 +253,12 @@ export const SysproxyViewer = forwardRef<DialogRef>((props, ref) => {
/> />
</ListItem> </ListItem>
)} )}
{!value.pac && (
<ListItem sx={{ padding: "5px 2px" }}>
<ListItemText primary={t("Use Bypass Check")} />
<Switch
edge="end"
disabled={!enabled}
checked={value.bypass_check}
onChange={(_, e) => setValue((v) => ({ ...v, bypass_check: e }))}
/>
</ListItem>
)}
{!value.pac && !value.use_default && ( {!value.pac && !value.use_default && (
<> <>
<ListItemText primary={t("Proxy Bypass")} /> <ListItemText primary={t("Proxy Bypass")} />
<TextField <TextField
error={ error={value.bypass ? !validReg.test(value.bypass) : false}
value.bypass && value.bypass_check
? !validReg.test(value.bypass)
: false
}
disabled={!enabled} disabled={!enabled}
size="small" size="small"
multiline multiline
@ -277,6 +269,11 @@ export const SysproxyViewer = forwardRef<DialogRef>((props, ref) => {
setValue((v) => ({ ...v, bypass: e.target.value })); setValue((v) => ({ ...v, bypass: e.target.value }));
}} }}
/> />
</>
)}
{!value.pac && value.use_default && (
<>
<ListItemText primary={t("Bypass")} /> <ListItemText primary={t("Bypass")} />
<FlexBox> <FlexBox>
<TextField <TextField
@ -285,11 +282,12 @@ export const SysproxyViewer = forwardRef<DialogRef>((props, ref) => {
multiline multiline
rows={4} rows={4}
sx={{ width: "100%" }} sx={{ width: "100%" }}
value={sysproxy?.bypass || "-"} value={defaultBypass()}
/> />
</FlexBox> </FlexBox>
</> </>
)} )}
{value.pac && ( {value.pac && (
<> <>
<ListItem sx={{ padding: "5px 2px", alignItems: "start" }}> <ListItem sx={{ padding: "5px 2px", alignItems: "start" }}>