From 146c2d966f18dacf63e110ed4783399089fdd54f Mon Sep 17 00:00:00 2001 From: xream Date: Fri, 11 Jul 2025 10:36:43 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20Surge=20username=20password=20=E9=80=BB?= =?UTF-8?q?=E8=BE=91=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/package.json | 2 +- backend/src/core/proxy-utils/parsers/peggy/surge.js | 6 +++--- backend/src/core/proxy-utils/parsers/peggy/surge.peg | 6 +++--- backend/src/core/proxy-utils/producers/surge.js | 12 ++++++------ 4 files changed, 13 insertions(+), 13 deletions(-) diff --git a/backend/package.json b/backend/package.json index 0b0f554..ca46472 100644 --- a/backend/package.json +++ b/backend/package.json @@ -1,6 +1,6 @@ { "name": "sub-store", - "version": "2.19.73", + "version": "2.19.74", "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 594b351..8491732 100644 --- a/backend/src/core/proxy-utils/parsers/peggy/surge.js +++ b/backend/src/core/proxy-utils/parsers/peggy/surge.js @@ -179,8 +179,8 @@ username = & { peg$currPos = end; return true; } -} { proxy.username = $.username; } -password = comma match:[^,]+ { proxy.password = match.join("").replace(/^"(.*)"$/, '$1'); } +} { proxy.username = $.username.trim().replace(/^"(.*?)"$/, '$1').replace(/^'(.*?)'$/, '$1'); } +password = comma match:[^,]+ { proxy.password = match.join("").replace(/^"(.*)"$/, '$1').replace(/^'(.*?)'$/, '$1'); } tls = comma "tls" equals flag:bool { proxy.tls = flag; } sni = comma "sni" equals sni:("off"/domain) { @@ -196,7 +196,7 @@ tls_fingerprint = comma "server-cert-fingerprint-sha256" equals tls_fingerprint: 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(""); } +usernamek = comma "username" equals match:[^,]+ { proxy.username = match.join("").replace(/^"(.*?)"$/, '$1').replace(/^'(.*?)'$/, '$1'); } 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 1a0e53c..e840145 100644 --- a/backend/src/core/proxy-utils/parsers/peggy/surge.peg +++ b/backend/src/core/proxy-utils/parsers/peggy/surge.peg @@ -176,8 +176,8 @@ username = & { peg$currPos = end; return true; } -} { proxy.username = $.username; } -password = comma match:[^,]+ { proxy.password = match.join("").replace(/^"(.*)"$/, '$1'); } +} { proxy.username = $.username.trim().replace(/^"(.*?)"$/, '$1').replace(/^'(.*?)'$/, '$1'); } +password = comma match:[^,]+ { proxy.password = match.join("").replace(/^"(.*)"$/, '$1').replace(/^'(.*?)'$/, '$1'); } tls = comma "tls" equals flag:bool { proxy.tls = flag; } sni = comma "sni" equals sni:("off"/domain) { @@ -193,7 +193,7 @@ tls_fingerprint = comma "server-cert-fingerprint-sha256" equals tls_fingerprint: 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(""); } +usernamek = comma "username" equals match:[^,]+ { proxy.username = match.join("").replace(/^"(.*?)"$/, '$1').replace(/^'(.*?)'$/, '$1'); } 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 f24b832..7446239 100644 --- a/backend/src/core/proxy-utils/producers/surge.js +++ b/backend/src/core/proxy-utils/producers/surge.js @@ -370,9 +370,9 @@ function vmess(proxy, includeUnsupportedProxy) { function ssh(proxy) { const result = new Result(proxy); result.append(`${proxy.name}=ssh,${proxy.server},${proxy.port}`); - result.appendIfPresent(`,${proxy.username}`, 'username'); + result.appendIfPresent(`,username="${proxy.username}"`, 'username'); // 所有的类似的字段都有双引号的问题 暂不处理 - result.appendIfPresent(`,"${proxy.password}"`, 'password'); + result.appendIfPresent(`,password="${proxy.password}"`, 'password'); // https://manual.nssurge.com/policy/ssh.html // 需配合 Keystore @@ -439,8 +439,8 @@ function http(proxy) { const result = new Result(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(`,username="${proxy.username}"`, 'username'); + result.appendIfPresent(`,password="${proxy.password}"`, 'password'); const ip_version = ipVersions[proxy['ip-version']] || proxy['ip-version']; result.appendIfPresent(`,ip-version=${ip_version}`, 'ip-version'); @@ -565,8 +565,8 @@ function socks5(proxy) { const result = new Result(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(`,username="${proxy.username}"`, 'username'); + result.appendIfPresent(`,password="${proxy.password}"`, 'password'); const ip_version = ipVersions[proxy['ip-version']] || proxy['ip-version']; result.appendIfPresent(`,ip-version=${ip_version}`, 'ip-version');