From f0d8c20f4d06a97062537a96d2a62c771fb66801 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E5=98=89=E4=BC=9F?= <8473136@qq.com> Date: Wed, 26 Feb 2025 14:56:10 +0800 Subject: [PATCH] :building_construction: refactor proxy handling to replace stcpModel with visitorsModel and enhance configuration structure in ServerService --- electron/api/config.ts | 4 +- electron/api/frpc.ts | 14 +++--- electron/core/GlobalConstant.ts | 2 + electron/service/ServerService.ts | 84 ++++++++++++++++++------------- src/views/proxy/index.vue | 46 ++++++++--------- types/frp.d.ts | 2 +- types/global.d.ts | 2 +- 7 files changed, 85 insertions(+), 69 deletions(-) diff --git a/electron/api/config.ts b/electron/api/config.ts index 17b1fb6..444904d 100644 --- a/electron/api/config.ts +++ b/electron/api/config.ts @@ -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, diff --git a/electron/api/frpc.ts b/electron/api/frpc.ts index e9d061c..00e8365 100644 --- a/electron/api/frpc.ts +++ b/electron/api/frpc.ts @@ -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}" diff --git a/electron/core/GlobalConstant.ts b/electron/core/GlobalConstant.ts index 6c041f5..4ed4ae8 100644 --- a/electron/core/GlobalConstant.ts +++ b/electron/core/GlobalConstant.ts @@ -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"], diff --git a/electron/service/ServerService.ts b/electron/service/ServerService.ts index d557ff1..a490e23 100644 --- a/electron/service/ServerService.ts +++ b/electron/service/ServerService.ts @@ -56,50 +56,64 @@ class ServerService extends BaseService { 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() { diff --git a/src/views/proxy/index.vue b/src/views/proxy/index.vue index fc4bed4..6346c06 100644 --- a/src/views/proxy/index.vue +++ b/src/views/proxy/index.vue @@ -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(_.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({ 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' " >被访问者 @@ -722,7 +722,7 @@ onUnmounted(() => { (proxy.type !== 'stcp' && proxy.type !== 'xtcp' && proxy.type !== 'sudp') || - proxy.stcpModel !== 'visitors' + proxy.visitorsModel !== 'visitors' " >

内网地址

@@ -739,7 +739,7 @@ onUnmounted(() => { (proxy.type !== 'stcp' && proxy.type !== 'xtcp' && proxy.type !== 'sudp') || - proxy.stcpModel !== 'visitors' + proxy.visitorsModel !== 'visitors' " >

内网端口

@@ -752,7 +752,7 @@ onUnmounted(() => { (proxy.type === 'stcp' || proxy.type === 'xtcp' || proxy.type === 'sudp') && - proxy.stcpModel === 'visitors' + proxy.visitorsModel === 'visitors' " >

访问者名称

@@ -765,7 +765,7 @@ onUnmounted(() => { (proxy.type === 'stcp' || proxy.type === 'xtcp' || proxy.type === 'sudp') && - proxy.stcpModel === 'visitors' + proxy.visitorsModel === 'visitors' " >

绑定地址

@@ -778,7 +778,7 @@ onUnmounted(() => { (proxy.type === 'stcp' || proxy.type === 'xtcp' || proxy.type === 'sudp') && - proxy.stcpModel === 'visitors' + proxy.visitorsModel === 'visitors' " >

绑定端口

@@ -834,10 +834,10 @@ onUnmounted(() => {