mirror of
https://github.com/clash-verge-rev/clash-verge-rev.git
synced 2026-01-29 08:45:41 +08:00
refactor: external-controller-cors to always show (#4243)
* refactor: external-controller-cors to always show * i18n: update translation * Update UPDATELOG.md
This commit is contained in:
@@ -43,6 +43,7 @@
|
|||||||
- 修复 `Windows` 安装器参数使用错误问题
|
- 修复 `Windows` 安装器参数使用错误问题
|
||||||
- 修复 `IPC` 迁移后节点测速功能异常
|
- 修复 `IPC` 迁移后节点测速功能异常
|
||||||
- 修复 `IPC` 迁移后连接上下行速率计算功能异常
|
- 修复 `IPC` 迁移后连接上下行速率计算功能异常
|
||||||
|
- 修复 `External-Controller-Cors` 无法保存所需前置条件
|
||||||
|
|
||||||
### 🔧 技术改进
|
### 🔧 技术改进
|
||||||
|
|
||||||
|
|||||||
@@ -25,29 +25,19 @@ const DEV_URLS = [
|
|||||||
"http://localhost:3000",
|
"http://localhost:3000",
|
||||||
];
|
];
|
||||||
|
|
||||||
// 判断是否处于开发模式
|
|
||||||
const isDevMode = import.meta.env.MODE === "development";
|
|
||||||
|
|
||||||
// 过滤开发环境URL
|
|
||||||
const filterDevOrigins = (origins: string[]) => {
|
|
||||||
if (isDevMode) {
|
|
||||||
return origins;
|
|
||||||
}
|
|
||||||
return origins.filter((origin: string) => !DEV_URLS.includes(origin.trim()));
|
|
||||||
};
|
|
||||||
|
|
||||||
// 获取完整的源列表,包括开发URL
|
// 获取完整的源列表,包括开发URL
|
||||||
const getFullOrigins = (origins: string[]) => {
|
const getFullOrigins = (origins: string[]) => {
|
||||||
if (!isDevMode) {
|
|
||||||
return origins;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 合并现有源和开发URL,并去重
|
// 合并现有源和开发URL,并去重
|
||||||
const allOrigins = [...origins, ...DEV_URLS];
|
const allOrigins = [...origins, ...DEV_URLS];
|
||||||
const uniqueOrigins = [...new Set(allOrigins)];
|
const uniqueOrigins = [...new Set(allOrigins)];
|
||||||
return uniqueOrigins;
|
return uniqueOrigins;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// 过滤基础URL(确保后续添加)
|
||||||
|
const filterBaseOriginsForUI = (origins: string[]) => {
|
||||||
|
return origins.filter((origin: string) => !DEV_URLS.includes(origin.trim()));
|
||||||
|
};
|
||||||
|
|
||||||
// 统一使用的按钮样式
|
// 统一使用的按钮样式
|
||||||
const buttonStyle = {
|
const buttonStyle = {
|
||||||
borderRadius: "8px",
|
borderRadius: "8px",
|
||||||
@@ -63,16 +53,6 @@ const buttonStyle = {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
// 保存按钮样式
|
|
||||||
const saveButtonStyle = {
|
|
||||||
...buttonStyle,
|
|
||||||
backgroundColor: "#165DFF",
|
|
||||||
color: "white",
|
|
||||||
"&:hover": {
|
|
||||||
backgroundColor: "#0E42D2",
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
// 添加按钮样式
|
// 添加按钮样式
|
||||||
const addButtonStyle = {
|
const addButtonStyle = {
|
||||||
...buttonStyle,
|
...buttonStyle,
|
||||||
@@ -110,10 +90,10 @@ export const HeaderConfiguration = forwardRef<ClashHeaderConfigingRef>(
|
|||||||
allowOrigins: string[];
|
allowOrigins: string[];
|
||||||
}>(() => {
|
}>(() => {
|
||||||
const cors = clash?.["external-controller-cors"];
|
const cors = clash?.["external-controller-cors"];
|
||||||
const origins = cors?.["allow-origins"] ?? ["*"];
|
const origins = cors?.["allow-origins"] ?? [];
|
||||||
return {
|
return {
|
||||||
allowPrivateNetwork: cors?.["allow-private-network"] ?? true,
|
allowPrivateNetwork: cors?.["allow-private-network"] ?? true,
|
||||||
allowOrigins: filterDevOrigins(origins),
|
allowOrigins: filterBaseOriginsForUI(origins),
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -178,10 +158,10 @@ export const HeaderConfiguration = forwardRef<ClashHeaderConfigingRef>(
|
|||||||
useImperativeHandle(ref, () => ({
|
useImperativeHandle(ref, () => ({
|
||||||
open: () => {
|
open: () => {
|
||||||
const cors = clash?.["external-controller-cors"];
|
const cors = clash?.["external-controller-cors"];
|
||||||
const origins = cors?.["allow-origins"] ?? ["*"];
|
const origins = cors?.["allow-origins"] ?? [];
|
||||||
setCorsConfig({
|
setCorsConfig({
|
||||||
allowPrivateNetwork: cors?.["allow-private-network"] ?? true,
|
allowPrivateNetwork: cors?.["allow-private-network"] ?? true,
|
||||||
allowOrigins: filterDevOrigins(origins),
|
allowOrigins: filterBaseOriginsForUI(origins),
|
||||||
});
|
});
|
||||||
setOpen(true);
|
setOpen(true);
|
||||||
},
|
},
|
||||||
@@ -257,7 +237,7 @@ export const HeaderConfiguration = forwardRef<ClashHeaderConfigingRef>(
|
|||||||
color="error"
|
color="error"
|
||||||
size="small"
|
size="small"
|
||||||
onClick={() => handleDeleteOrigin(index)}
|
onClick={() => handleDeleteOrigin(index)}
|
||||||
disabled={corsConfig.allowOrigins.length <= 1}
|
disabled={corsConfig.allowOrigins.length <= 0}
|
||||||
sx={deleteButtonStyle}
|
sx={deleteButtonStyle}
|
||||||
>
|
>
|
||||||
<DeleteIcon fontSize="small" />
|
<DeleteIcon fontSize="small" />
|
||||||
@@ -273,24 +253,22 @@ export const HeaderConfiguration = forwardRef<ClashHeaderConfigingRef>(
|
|||||||
{t("Add")}
|
{t("Add")}
|
||||||
</Button>
|
</Button>
|
||||||
|
|
||||||
{isDevMode && (
|
<div
|
||||||
|
style={{
|
||||||
|
marginTop: 12,
|
||||||
|
padding: 8,
|
||||||
|
backgroundColor: "#f5f5f5",
|
||||||
|
borderRadius: 4,
|
||||||
|
}}
|
||||||
|
>
|
||||||
<div
|
<div
|
||||||
style={{
|
style={{ color: "#666", fontSize: 12, fontStyle: "italic" }}
|
||||||
marginTop: 12,
|
|
||||||
padding: 8,
|
|
||||||
backgroundColor: "#f5f5f5",
|
|
||||||
borderRadius: 4,
|
|
||||||
}}
|
|
||||||
>
|
>
|
||||||
<div
|
{t("Always included origins: {{urls}}", {
|
||||||
style={{ color: "#666", fontSize: 12, fontStyle: "italic" }}
|
urls: DEV_URLS.join(", "),
|
||||||
>
|
})}
|
||||||
{t(
|
|
||||||
"Development mode: Automatically includes Tauri and localhost origins",
|
|
||||||
)}
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
)}
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</ListItem>
|
</ListItem>
|
||||||
</List>
|
</List>
|
||||||
|
|||||||
@@ -652,7 +652,7 @@
|
|||||||
"Allowed Origins": "Allowed Origins",
|
"Allowed Origins": "Allowed Origins",
|
||||||
"Please enter a valid url": "Please enter a valid url",
|
"Please enter a valid url": "Please enter a valid url",
|
||||||
"Add": "Add",
|
"Add": "Add",
|
||||||
"Development mode: Automatically includes Tauri and localhost origins": "Development mode: Automatically includes Tauri and localhost origins",
|
"Always included origins: {{urls}}": "Always included origins: {{urls}}",
|
||||||
"Invalid regular expression": "Invalid regular expression",
|
"Invalid regular expression": "Invalid regular expression",
|
||||||
"Copy Version": "Copy Version",
|
"Copy Version": "Copy Version",
|
||||||
"Version copied to clipboard": "Version copied to clipboard",
|
"Version copied to clipboard": "Version copied to clipboard",
|
||||||
|
|||||||
@@ -652,7 +652,7 @@
|
|||||||
"Allowed Origins": "允许的来源",
|
"Allowed Origins": "允许的来源",
|
||||||
"Please enter a valid url": "请输入有效的网址",
|
"Please enter a valid url": "请输入有效的网址",
|
||||||
"Add": "添加",
|
"Add": "添加",
|
||||||
"Development mode: Automatically includes Tauri and localhost origins": "开发模式:自动包含 Tauri 和 localhost 来源",
|
"Always included origins: {{urls}}": "始终包含来源:{{urls}}",
|
||||||
"Invalid regular expression": "无效的正则表达式",
|
"Invalid regular expression": "无效的正则表达式",
|
||||||
"Copy Version": "复制Verge版本号",
|
"Copy Version": "复制Verge版本号",
|
||||||
"Version copied to clipboard": "Verge版本已复制到剪贴板",
|
"Version copied to clipboard": "Verge版本已复制到剪贴板",
|
||||||
|
|||||||
Reference in New Issue
Block a user