From 4790bf47d16b9460250c826ea9fcae9fccdc04c8 Mon Sep 17 00:00:00 2001 From: xream Date: Sat, 16 Nov 2024 21:50:30 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20Surge=20=E5=AF=86=E7=A0=81=E8=A7=A3?= =?UTF-8?q?=E6=9E=90=E6=94=AF=E6=8C=81=E9=A6=96=E5=B0=BE=E6=88=90=E5=AF=B9?= =?UTF-8?q?=E7=9A=84=E5=8D=95=E5=BC=95=E5=8F=B7=E5=8F=8C=E5=BC=95=E5=8F=B7?= =?UTF-8?q?,=20=E8=BE=93=E5=87=BA=E6=97=B6=E5=A2=9E=E5=8A=A0=E5=8F=8C?= =?UTF-8?q?=E5=BC=95=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/package.json | 2 +- .../src/core/proxy-utils/parsers/peggy/surge.js | 2 +- .../src/core/proxy-utils/parsers/peggy/surge.peg | 2 +- backend/src/core/proxy-utils/producers/surge.js | 14 +++++++------- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/backend/package.json b/backend/package.json index 7e0bd82..b5524d4 100644 --- a/backend/package.json +++ b/backend/package.json @@ -1,6 +1,6 @@ { "name": "sub-store", - "version": "2.14.417", + "version": "2.14.418", "description": "Advanced Subscription Manager for QX, Loon, Surge, Stash and ShadowRocket.", "main": "src/main.js", "scripts": { diff --git a/backend/src/core/proxy-utils/parsers/peggy/surge.js b/backend/src/core/proxy-utils/parsers/peggy/surge.js index 6d64466..8d198e9 100644 --- a/backend/src/core/proxy-utils/parsers/peggy/surge.js +++ b/backend/src/core/proxy-utils/parsers/peggy/surge.js @@ -193,7 +193,7 @@ snell_psk = comma "psk" equals match:[^,]+ { proxy.psk = match.join(""); } snell_version = comma "version" equals match:$[0-9]+ { proxy.version = parseInt(match.trim()); } usernamek = comma "username" equals match:[^,]+ { proxy.username = match.join(""); } -passwordk = comma "password" equals match:[^,]+ { proxy.password = match.join(""); } +passwordk = comma "password" equals match:[^,]+ { proxy.password = match.join("").replace(/^"(.*?)"$/, '$1').replace(/^'(.*?)'$/, '$1'); } vmess_uuid = comma "username" equals match:[^,]+ { proxy.uuid = match.join(""); } vmess_aead = comma "vmess-aead" equals flag:bool { proxy.aead = flag; } diff --git a/backend/src/core/proxy-utils/parsers/peggy/surge.peg b/backend/src/core/proxy-utils/parsers/peggy/surge.peg index 7c3eb3a..a72ad58 100644 --- a/backend/src/core/proxy-utils/parsers/peggy/surge.peg +++ b/backend/src/core/proxy-utils/parsers/peggy/surge.peg @@ -191,7 +191,7 @@ snell_psk = comma "psk" equals match:[^,]+ { proxy.psk = match.join(""); } snell_version = comma "version" equals match:$[0-9]+ { proxy.version = parseInt(match.trim()); } usernamek = comma "username" equals match:[^,]+ { proxy.username = match.join(""); } -passwordk = comma "password" equals match:[^,]+ { proxy.password = match.join(""); } +passwordk = comma "password" equals match:[^,]+ { proxy.password = match.join("").replace(/^"(.*?)"$/, '$1').replace(/^'(.*?)'$/, '$1'); } vmess_uuid = comma "username" equals match:[^,]+ { proxy.uuid = match.join(""); } vmess_aead = comma "vmess-aead" equals flag:bool { proxy.aead = flag; } diff --git a/backend/src/core/proxy-utils/producers/surge.js b/backend/src/core/proxy-utils/producers/surge.js index 69d3fa9..063b18e 100644 --- a/backend/src/core/proxy-utils/producers/surge.js +++ b/backend/src/core/proxy-utils/producers/surge.js @@ -93,7 +93,7 @@ function shadowsocks(proxy, includeUnsupportedProxy) { throw new Error(`cipher ${proxy.cipher} is not supported`); } result.append(`,encrypt-method=${proxy.cipher}`); - result.appendIfPresent(`,password=${proxy.password}`, 'password'); + result.appendIfPresent(`,password="${proxy.password}"`, 'password'); const ip_version = ipVersions[proxy['ip-version']] || proxy['ip-version']; result.appendIfPresent(`,ip-version=${ip_version}`, 'ip-version'); @@ -193,7 +193,7 @@ function shadowsocks(proxy, includeUnsupportedProxy) { function trojan(proxy) { const result = new Result(proxy); result.append(`${proxy.name}=${proxy.type},${proxy.server},${proxy.port}`); - result.appendIfPresent(`,password=${proxy.password}`, 'password'); + result.appendIfPresent(`,password="${proxy.password}"`, 'password'); const ip_version = ipVersions[proxy['ip-version']] || proxy['ip-version']; result.appendIfPresent(`,ip-version=${ip_version}`, 'ip-version'); @@ -366,7 +366,7 @@ function ssh(proxy) { result.append(`${proxy.name}=ssh,${proxy.server},${proxy.port}`); result.appendIfPresent(`,${proxy.username}`, 'username'); // 所有的类似的字段都有双引号的问题 暂不处理 - result.appendIfPresent(`,${proxy.password}`, 'password'); + result.appendIfPresent(`,"${proxy.password}"`, 'password'); // https://manual.nssurge.com/policy/ssh.html // 需配合 Keystore @@ -431,7 +431,7 @@ function http(proxy) { const type = proxy.tls ? 'https' : 'http'; result.append(`${proxy.name}=${type},${proxy.server},${proxy.port}`); result.appendIfPresent(`,${proxy.username}`, 'username'); - result.appendIfPresent(`,${proxy.password}`, 'password'); + result.appendIfPresent(`,"${proxy.password}"`, 'password'); const ip_version = ipVersions[proxy['ip-version']] || proxy['ip-version']; result.appendIfPresent(`,ip-version=${ip_version}`, 'ip-version'); @@ -509,7 +509,7 @@ function socks5(proxy) { const type = proxy.tls ? 'socks5-tls' : 'socks5'; result.append(`${proxy.name}=${type},${proxy.server},${proxy.port}`); result.appendIfPresent(`,${proxy.username}`, 'username'); - result.appendIfPresent(`,${proxy.password}`, 'password'); + result.appendIfPresent(`,"${proxy.password}"`, 'password'); const ip_version = ipVersions[proxy['ip-version']] || proxy['ip-version']; result.appendIfPresent(`,ip-version=${ip_version}`, 'ip-version'); @@ -675,7 +675,7 @@ function tuic(proxy) { result.append(`${proxy.name}=${type},${proxy.server},${proxy.port}`); result.appendIfPresent(`,uuid=${proxy.uuid}`, 'uuid'); - result.appendIfPresent(`,password=${proxy.password}`, 'password'); + result.appendIfPresent(`,password="${proxy.password}"`, 'password'); result.appendIfPresent(`,token=${proxy.token}`, 'token'); result.appendIfPresent( @@ -950,7 +950,7 @@ function hysteria2(proxy) { const result = new Result(proxy); result.append(`${proxy.name}=hysteria2,${proxy.server},${proxy.port}`); - result.appendIfPresent(`,password=${proxy.password}`, 'password'); + result.appendIfPresent(`,password="${proxy.password}"`, 'password'); if (isPresent(proxy, 'ports')) { result.append(`,port-hopping="${proxy.ports.replace(/,/g, ';')}"`);