🏗️ refactor proxy handling to replace stcpModel with visitorsModel and enhance configuration structure in ServerService
This commit is contained in:
parent
f77605a73d
commit
f0d8c20f4d
@ -200,7 +200,7 @@
|
||||
// httpUser: m.httpUser || "",
|
||||
// httpPassword: m.httpPassword || "",
|
||||
// // 以下为stcp参数
|
||||
// stcpModel: "visited",
|
||||
// visitorsModel: "visitorsProvider",
|
||||
// serverName: "",
|
||||
// secretKey: m?.secretKey || "",
|
||||
// bindAddr: "",
|
||||
@ -234,7 +234,7 @@
|
||||
// httpUser: m.httpUser || "",
|
||||
// httpPassword: m.httpPassword || "",
|
||||
// // 以下为stcp参数
|
||||
// stcpModel: "visitors",
|
||||
// visitorsModel: "visitors",
|
||||
// serverName: m?.serverName,
|
||||
// secretKey: m?.secretKey || "",
|
||||
// bindAddr: m?.bindAddr,
|
||||
|
@ -58,7 +58,7 @@
|
||||
// }
|
||||
// [[${
|
||||
// (m.type === "stcp" || m.type === "xtcp" || m.type === "sudp") &&
|
||||
// m.stcpModel === "visitors"
|
||||
// m.visitorsModel === "visitors"
|
||||
// ? "visitors"
|
||||
// : "proxies"
|
||||
// }]]
|
||||
@ -105,12 +105,12 @@
|
||||
//
|
||||
// break;
|
||||
// case "xtcp":
|
||||
// if (m.stcpModel === "visitors") {
|
||||
// if (m.visitorsModel === "visitors") {
|
||||
// toml += `keepTunnelOpen = ${m.keepTunnelOpen}\n`;
|
||||
// }
|
||||
// case "stcp":
|
||||
// case "sudp":
|
||||
// if (m.stcpModel === "visitors") {
|
||||
// if (m.visitorsModel === "visitors") {
|
||||
// // 访问者
|
||||
// toml += `serverName = "${m.serverName}"
|
||||
// bindAddr = "${m.bindAddr}"
|
||||
@ -119,7 +119,7 @@
|
||||
// toml += `fallbackTo = "${m.fallbackTo}"
|
||||
// fallbackTimeoutMs = ${m.fallbackTimeoutMs || 500}\n`;
|
||||
// }
|
||||
// } else if (m.stcpModel === "visited") {
|
||||
// } else if (m.visitorsModel === "visitorsProvider") {
|
||||
// // 被访问者
|
||||
// toml += `localIP = "${m.localIp}"
|
||||
// localPort = ${m.localPort}\n`;
|
||||
@ -274,12 +274,12 @@
|
||||
// }
|
||||
// break;
|
||||
// case "xtcp":
|
||||
// if (m.stcpModel === "visitors") {
|
||||
// if (m.visitorsModel === "visitors") {
|
||||
// ini += `keep_tunnel_open = ${m.keepTunnelOpen}\n`;
|
||||
// }
|
||||
// case "stcp":
|
||||
// case "sudp":
|
||||
// if (m.stcpModel === "visitors") {
|
||||
// if (m.visitorsModel === "visitors") {
|
||||
// // 访问者
|
||||
// ini += `
|
||||
// role = visitor
|
||||
@ -291,7 +291,7 @@
|
||||
// fallback_to = ${m.fallbackTo}
|
||||
// fallback_timeout_ms = ${m.fallbackTimeoutMs || 500}\n`;
|
||||
// }
|
||||
// } else if (m.stcpModel === "visited") {
|
||||
// } else if (m.visitorsModel === "visitorsProvider") {
|
||||
// // 被访问者
|
||||
// ini += `
|
||||
// local_ip = "${m.localIp}"
|
||||
|
@ -5,6 +5,8 @@ class GlobalConstant {
|
||||
public static TOML_EXT = ".toml";
|
||||
public static GZ_EXT = ".gz";
|
||||
public static TAR_GZ_EXT = ".tar.gz";
|
||||
public static LOCAL_IP = "127.0.0.1";
|
||||
public static FRPC_LOGIN_FAIL_EXIT = false;
|
||||
|
||||
public static FRP_ARCH_VERSION_MAPPING = {
|
||||
win32_x64: ["window", "amd64"],
|
||||
|
@ -56,50 +56,64 @@ class ServerService extends BaseService<OpenSourceFrpcDesktopServer> {
|
||||
const proxies = await this._proxyDao.findAll();
|
||||
const enabledProxies = proxies
|
||||
.filter(f => f.status === 1)
|
||||
.filter(f => f.visitorsModel !== "visitors")
|
||||
.map(proxy => {
|
||||
if (proxy.type === "tcp") {
|
||||
const {
|
||||
_id,
|
||||
status,
|
||||
basicAuth,
|
||||
bindAddr,
|
||||
subdomain,
|
||||
httpUser,
|
||||
httpPassword,
|
||||
fallbackTo,
|
||||
fallbackTimeoutMs,
|
||||
https2http,
|
||||
https2httpCaFile,
|
||||
https2httpKeyFile,
|
||||
stcpModel,
|
||||
customDomains,
|
||||
locations,
|
||||
hostHeaderRewrite,
|
||||
keepTunnelOpen,
|
||||
secretKey,
|
||||
serverName,
|
||||
...frpProxyConfig
|
||||
} = proxy;
|
||||
frpProxyConfig.localPort = parseInt(frpProxyConfig.localPort);
|
||||
frpProxyConfig.remotePort = parseInt(frpProxyConfig.remotePort);
|
||||
return frpProxyConfig;
|
||||
} else {
|
||||
if (proxy.type === "tcp" || proxy.type === "udp") {
|
||||
return {
|
||||
name: proxy.name,
|
||||
type: proxy.type,
|
||||
localIP: proxy.localIP,
|
||||
localPort: parseInt(proxy.localPort),
|
||||
remotePort: parseInt(proxy.remotePort)
|
||||
};
|
||||
} else if (proxy.type === "http" || proxy.type === "https") {
|
||||
const { _id, status, ...frpProxyConfig } = proxy;
|
||||
return frpProxyConfig;
|
||||
} else if (
|
||||
proxy.type === "stcp" ||
|
||||
proxy.type === "xtcp" ||
|
||||
proxy.type === "sudp"
|
||||
) {
|
||||
return {
|
||||
name: proxy.name,
|
||||
type: proxy.type,
|
||||
localIP: proxy.localIP,
|
||||
localPort: parseInt(proxy.localPort),
|
||||
secretKey: proxy.secretKey
|
||||
};
|
||||
}
|
||||
});
|
||||
|
||||
const enableVisitors = proxies
|
||||
.filter(f => f.status === 1)
|
||||
.filter(f => f.visitorsModel === "visitors")
|
||||
.map(proxy => {
|
||||
return {
|
||||
name: proxy.name,
|
||||
type: proxy.type,
|
||||
// serverUser: proxy.serverUser,
|
||||
serverName: proxy.serverName,
|
||||
secretKey: proxy.secretKey,
|
||||
bindAddr: proxy.bindAddr,
|
||||
bindPort: proxy.bindPort,
|
||||
// keepTunnelOpen: proxy.keepTunnelOpen
|
||||
// maxRetriesAnHour: proxy.maxRetriesAnHour,
|
||||
// minRetryInterval: proxy.minRetryInterval,
|
||||
};
|
||||
});
|
||||
|
||||
const { frpcVersion, _id, system, ...commonConfig } = server;
|
||||
const frpcConfig = { ...commonConfig };
|
||||
frpcConfig.log.to = PathUtils.getFrpcLogFilePath();
|
||||
frpcConfig.loginFailExit = false;
|
||||
frpcConfig.webServer.addr = "127.0.0.1";
|
||||
const toml = TOML.stringify({ ...frpcConfig, proxies: enabledProxies });
|
||||
frpcConfig.loginFailExit = GlobalConstant.FRPC_LOGIN_FAIL_EXIT;
|
||||
frpcConfig.webServer.addr = GlobalConstant.LOCAL_IP;
|
||||
const toml = TOML.stringify({
|
||||
...frpcConfig,
|
||||
proxies: enabledProxies,
|
||||
visitors: enableVisitors
|
||||
});
|
||||
|
||||
fs.writeFileSync(
|
||||
outputPath, // 配置文件目录
|
||||
toml, // 配置文件内容
|
||||
{ flag: "w" }
|
||||
);
|
||||
fs.writeFileSync(outputPath, toml, { flag: "w" });
|
||||
}
|
||||
|
||||
async importTomlConfig() {
|
||||
|
@ -56,7 +56,7 @@ const defaultForm: FrpcProxy = {
|
||||
localPort: "8080",
|
||||
remotePort: "8080",
|
||||
customDomains: [""],
|
||||
stcpModel: "visitors",
|
||||
visitorsModel: "visitors",
|
||||
serverName: "",
|
||||
secretKey: "",
|
||||
bindAddr: "",
|
||||
@ -84,14 +84,14 @@ const editForm = ref<FrpcProxy>(_.cloneDeep(defaultForm));
|
||||
*/
|
||||
const proxyTypes = ref(["http", "https", "tcp", "udp", "stcp", "xtcp", "sudp"]);
|
||||
|
||||
const stcpModels = ref([
|
||||
const visitorsModels = ref([
|
||||
{
|
||||
label: "访问者",
|
||||
value: "visitors"
|
||||
},
|
||||
{
|
||||
label: "被访问者",
|
||||
value: "visited"
|
||||
value: "visitorsProvider"
|
||||
}
|
||||
]);
|
||||
|
||||
@ -132,7 +132,7 @@ const editFormRules = reactive<FormRules>({
|
||||
trigger: "blur"
|
||||
}
|
||||
],
|
||||
stcpModel: [{ required: true, message: "请选择stcp模式", trigger: "blur" }],
|
||||
visitorsModel: [{ required: true, message: "请选择stcp模式", trigger: "blur" }],
|
||||
secretKey: [
|
||||
{ required: true, message: "请输入stcp共享密钥", trigger: "blur" }
|
||||
],
|
||||
@ -188,12 +188,12 @@ const isXtcp = computed(() => {
|
||||
return editForm.value.type === "xtcp";
|
||||
});
|
||||
|
||||
const isStcpVisited = computed(() => {
|
||||
const isStcpvisitorsProvider = computed(() => {
|
||||
return (
|
||||
(editForm.value.type === "stcp" ||
|
||||
editForm.value.type === "sudp" ||
|
||||
editForm.value.type === "xtcp") &&
|
||||
editForm.value.stcpModel === "visited"
|
||||
editForm.value.visitorsModel === "visitorsProvider"
|
||||
);
|
||||
});
|
||||
|
||||
@ -202,7 +202,7 @@ const isStcpVisitors = computed(() => {
|
||||
(editForm.value.type === "stcp" ||
|
||||
editForm.value.type === "sudp" ||
|
||||
editForm.value.type === "xtcp") &&
|
||||
editForm.value.stcpModel === "visitors"
|
||||
editForm.value.visitorsModel === "visitors"
|
||||
);
|
||||
});
|
||||
|
||||
@ -382,13 +382,13 @@ const allowCopyAccessAddress = (proxy: FrpcProxy) => {
|
||||
) {
|
||||
return false;
|
||||
}
|
||||
if (proxy.type === "stcp" && proxy.stcpModel === "visited") {
|
||||
if (proxy.type === "stcp" && proxy.visitorsModel === "visitorsProvider") {
|
||||
return false;
|
||||
}
|
||||
if (proxy.type === "xtcp" && proxy.stcpModel === "visited") {
|
||||
if (proxy.type === "xtcp" && proxy.visitorsModel === "visitorsProvider") {
|
||||
return false;
|
||||
}
|
||||
if (proxy.type === "sudp" && proxy.stcpModel === "visited") {
|
||||
if (proxy.type === "sudp" && proxy.visitorsModel === "visitorsProvider") {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
@ -401,10 +401,10 @@ const handleCopyAccessAddress = (proxy: FrpcProxy) => {
|
||||
) {
|
||||
return;
|
||||
}
|
||||
if (proxy.type === "stcp" && proxy.stcpModel === "visited") {
|
||||
if (proxy.type === "stcp" && proxy.visitorsModel === "visitorsProvider") {
|
||||
return;
|
||||
}
|
||||
if (proxy.type === "xtcp" && proxy.stcpModel === "visited") {
|
||||
if (proxy.type === "xtcp" && proxy.visitorsModel === "visitorsProvider") {
|
||||
return;
|
||||
}
|
||||
let accessAddressStr = "";
|
||||
@ -637,7 +637,7 @@ onUnmounted(() => {
|
||||
(proxy.type === 'stcp' ||
|
||||
proxy.type === 'xtcp' ||
|
||||
proxy.type === 'sudp') &&
|
||||
proxy.stcpModel === 'visitors'
|
||||
proxy.visitorsModel === 'visitors'
|
||||
"
|
||||
size="small"
|
||||
>
|
||||
@ -649,7 +649,7 @@ onUnmounted(() => {
|
||||
(proxy.type === 'stcp' ||
|
||||
proxy.type === 'xtcp' ||
|
||||
proxy.type === 'sudp') &&
|
||||
proxy.stcpModel === 'visited'
|
||||
proxy.visitorsModel === 'visitorsProvider'
|
||||
"
|
||||
>被访问者
|
||||
</el-tag>
|
||||
@ -722,7 +722,7 @@ onUnmounted(() => {
|
||||
(proxy.type !== 'stcp' &&
|
||||
proxy.type !== 'xtcp' &&
|
||||
proxy.type !== 'sudp') ||
|
||||
proxy.stcpModel !== 'visitors'
|
||||
proxy.visitorsModel !== 'visitors'
|
||||
"
|
||||
>
|
||||
<p class="text-[#ADADAD] font-bold">内网地址</p>
|
||||
@ -739,7 +739,7 @@ onUnmounted(() => {
|
||||
(proxy.type !== 'stcp' &&
|
||||
proxy.type !== 'xtcp' &&
|
||||
proxy.type !== 'sudp') ||
|
||||
proxy.stcpModel !== 'visitors'
|
||||
proxy.visitorsModel !== 'visitors'
|
||||
"
|
||||
>
|
||||
<p class="text-[#ADADAD] font-bold">内网端口</p>
|
||||
@ -752,7 +752,7 @@ onUnmounted(() => {
|
||||
(proxy.type === 'stcp' ||
|
||||
proxy.type === 'xtcp' ||
|
||||
proxy.type === 'sudp') &&
|
||||
proxy.stcpModel === 'visitors'
|
||||
proxy.visitorsModel === 'visitors'
|
||||
"
|
||||
>
|
||||
<p class="text-[#ADADAD] font-bold">访问者名称</p>
|
||||
@ -765,7 +765,7 @@ onUnmounted(() => {
|
||||
(proxy.type === 'stcp' ||
|
||||
proxy.type === 'xtcp' ||
|
||||
proxy.type === 'sudp') &&
|
||||
proxy.stcpModel === 'visitors'
|
||||
proxy.visitorsModel === 'visitors'
|
||||
"
|
||||
>
|
||||
<p class="text-[#ADADAD] font-bold">绑定地址</p>
|
||||
@ -778,7 +778,7 @@ onUnmounted(() => {
|
||||
(proxy.type === 'stcp' ||
|
||||
proxy.type === 'xtcp' ||
|
||||
proxy.type === 'sudp') &&
|
||||
proxy.stcpModel === 'visitors'
|
||||
proxy.visitorsModel === 'visitors'
|
||||
"
|
||||
>
|
||||
<p class="text-[#ADADAD] font-bold">绑定端口</p>
|
||||
@ -834,10 +834,10 @@ onUnmounted(() => {
|
||||
</el-col>
|
||||
<template v-if="isStcp || isSudp || isXtcp">
|
||||
<el-col :span="12">
|
||||
<el-form-item :label="`${editForm.type}模式:`" prop="stcpModel">
|
||||
<el-radio-group v-model="editForm.stcpModel">
|
||||
<el-form-item :label="`${editForm.type}模式:`" prop="visitorsModel">
|
||||
<el-radio-group v-model="editForm.visitorsModel">
|
||||
<el-radio
|
||||
v-for="p in stcpModels"
|
||||
v-for="p in visitorsModels"
|
||||
:key="p.value"
|
||||
:label="p.label"
|
||||
:value="p.value"
|
||||
@ -902,7 +902,7 @@ onUnmounted(() => {
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<template v-if="!(isStcp || isXtcp || isSudp) || isStcpVisited">
|
||||
<template v-if="!(isStcp || isXtcp || isSudp) || isStcpvisitorsProvider">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="内网地址:" prop="localIP">
|
||||
<el-autocomplete
|
||||
|
2
types/frp.d.ts
vendored
2
types/frp.d.ts
vendored
@ -63,7 +63,7 @@ interface FrpcProxyConfig {
|
||||
customDomains: string[];
|
||||
locations: string[];
|
||||
hostHeaderRewrite: string;
|
||||
stcpModel: string;
|
||||
visitorsModel: string;
|
||||
serverName: string;
|
||||
secretKey: string;
|
||||
bindAddr: string;
|
||||
|
2
types/global.d.ts
vendored
2
types/global.d.ts
vendored
@ -21,7 +21,7 @@ declare global {
|
||||
localPort: any;
|
||||
remotePort: string;
|
||||
customDomains: string[];
|
||||
stcpModel: string;
|
||||
visitorsModel: string;
|
||||
serverName: string;
|
||||
secretKey: string;
|
||||
bindAddr: string;
|
||||
|
Loading…
Reference in New Issue
Block a user