diff --git a/backend/package.json b/backend/package.json index a79886f..4fe893a 100644 --- a/backend/package.json +++ b/backend/package.json @@ -1,6 +1,6 @@ { "name": "sub-store", - "version": "2.14.430", + "version": "2.14.431", "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/trojan-uri.js b/backend/src/core/proxy-utils/parsers/peggy/trojan-uri.js index 107b8ce..69ae285 100644 --- a/backend/src/core/proxy-utils/parsers/peggy/trojan-uri.js +++ b/backend/src/core/proxy-utils/parsers/peggy/trojan-uri.js @@ -82,6 +82,8 @@ port = digits:[0-9]+ { params = "?" head:param tail:("&"@param)* { proxy["skip-cert-verify"] = toBool(params["allowInsecure"]); proxy.sni = params["sni"] || params["peer"]; + proxy['client-fingerprint'] = params.fp; + proxy.alpn = params.alpn ? decodeURIComponent(params.alpn).split(',') : undefined; if (toBool(params["ws"])) { proxy.network = "ws"; diff --git a/backend/src/core/proxy-utils/parsers/peggy/trojan-uri.peg b/backend/src/core/proxy-utils/parsers/peggy/trojan-uri.peg index 28a8b87..d2fec0a 100644 --- a/backend/src/core/proxy-utils/parsers/peggy/trojan-uri.peg +++ b/backend/src/core/proxy-utils/parsers/peggy/trojan-uri.peg @@ -80,6 +80,8 @@ port = digits:[0-9]+ { params = "?" head:param tail:("&"@param)* { proxy["skip-cert-verify"] = toBool(params["allowInsecure"]); proxy.sni = params["sni"] || params["peer"]; + proxy['client-fingerprint'] = params.fp; + proxy.alpn = params.alpn ? decodeURIComponent(params.alpn).split(',') : undefined; if (toBool(params["ws"])) { proxy.network = "ws"; diff --git a/backend/src/core/proxy-utils/producers/uri.js b/backend/src/core/proxy-utils/producers/uri.js index 1313501..e49c6d4 100644 --- a/backend/src/core/proxy-utils/producers/uri.js +++ b/backend/src/core/proxy-utils/producers/uri.js @@ -102,7 +102,7 @@ export default function URI_Producer() { port: proxy.port, id: proxy.uuid, type, - aid: 0, + aid: proxy.alterId || 0, net, tls: proxy.tls ? 'tls' : '', }; @@ -290,11 +290,27 @@ export default function URI_Producer() { )}`; } } + let trojanFp = ''; + if (proxy['client-fingerprint']) { + trojanFp = `&fp=${encodeURIComponent( + proxy['client-fingerprint'], + )}`; + } + let trojanAlpn = ''; + if (proxy.alpn) { + trojanAlpn = `&alpn=${encodeURIComponent( + Array.isArray(proxy.alpn) + ? proxy.alpn + : proxy.alpn.join(','), + )}`; + } result = `trojan://${proxy.password}@${proxy.server}:${ proxy.port }?sni=${encodeURIComponent(proxy.sni || proxy.server)}${ proxy['skip-cert-verify'] ? '&allowInsecure=1' : '' - }${trojanTransport}#${encodeURIComponent(proxy.name)}`; + }${trojanTransport}${trojanAlpn}${trojanFp}#${encodeURIComponent( + proxy.name, + )}`; break; case 'hysteria2': let hysteria2params = [];