From 4ea84118c4a520e84b431ba714ae43789944f6ef Mon Sep 17 00:00:00 2001 From: xream Date: Thu, 5 Dec 2024 00:52:11 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20gRPC=20=E6=94=AF=E6=8C=81=20authority?= 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/index.js | 4 ++++ .../core/proxy-utils/parsers/peggy/trojan-uri.js | 1 + .../proxy-utils/parsers/peggy/trojan-uri.peg | 1 + backend/src/core/proxy-utils/producers/clash.js | 1 + .../src/core/proxy-utils/producers/clashmeta.js | 1 + .../core/proxy-utils/producers/shadowrocket.js | 1 + backend/src/core/proxy-utils/producers/stash.js | 1 + backend/src/core/proxy-utils/producers/uri.js | 16 ++++++++++++++++ 9 files changed, 27 insertions(+), 1 deletion(-) diff --git a/backend/package.json b/backend/package.json index c46f131..cc1a245 100644 --- a/backend/package.json +++ b/backend/package.json @@ -1,6 +1,6 @@ { "name": "sub-store", - "version": "2.14.434", + "version": "2.14.435", "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/index.js b/backend/src/core/proxy-utils/parsers/index.js index 55e03b3..9c54b17 100644 --- a/backend/src/core/proxy-utils/parsers/index.js +++ b/backend/src/core/proxy-utils/parsers/index.js @@ -380,6 +380,7 @@ function URI_VMess() { proxy[`${proxy.network}-opts`] = { 'grpc-service-name': getIfNotBlank(transportPath), '_grpc-type': getIfNotBlank(params.type), + '_grpc-authority': getIfNotBlank(params.authority), }; } else { const opts = { @@ -515,6 +516,9 @@ function URI_VLESS() { } if (params.serviceName) { opts[`${proxy.network}-service-name`] = params.serviceName; + if (['grpc'].includes(proxy.network) && params.authority) { + opts['_grpc-authority'] = params.authority; + } } else if (isShadowrocket && params.path) { if (!['ws', 'http', 'h2'].includes(proxy.network)) { opts[`${proxy.network}-service-name`] = params.path; 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 69ae285..f5018d8 100644 --- a/backend/src/core/proxy-utils/parsers/peggy/trojan-uri.js +++ b/backend/src/core/proxy-utils/parsers/peggy/trojan-uri.js @@ -101,6 +101,7 @@ params = "?" head:param tail:("&"@param)* { proxy[proxy.network + '-opts'] = { 'grpc-service-name': params["serviceName"], '_grpc-type': params["mode"], + '_grpc-authority': params["authority"], }; } else { if (params["path"]) { 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 d2fec0a..e42f388 100644 --- a/backend/src/core/proxy-utils/parsers/peggy/trojan-uri.peg +++ b/backend/src/core/proxy-utils/parsers/peggy/trojan-uri.peg @@ -99,6 +99,7 @@ params = "?" head:param tail:("&"@param)* { proxy[proxy.network + '-opts'] = { 'grpc-service-name': params["serviceName"], '_grpc-type': params["mode"], + '_grpc-authority': params["authority"], }; } else { if (params["path"]) { diff --git a/backend/src/core/proxy-utils/producers/clash.js b/backend/src/core/proxy-utils/producers/clash.js index e172f6b..beb40d6 100644 --- a/backend/src/core/proxy-utils/producers/clash.js +++ b/backend/src/core/proxy-utils/producers/clash.js @@ -175,6 +175,7 @@ export default function Clash_Producer() { proxy[`${proxy.network}-opts`] ) { delete proxy[`${proxy.network}-opts`]['_grpc-type']; + delete proxy[`${proxy.network}-opts`]['_grpc-authority']; } return proxy; }); diff --git a/backend/src/core/proxy-utils/producers/clashmeta.js b/backend/src/core/proxy-utils/producers/clashmeta.js index 1e0dac8..4b1383c 100644 --- a/backend/src/core/proxy-utils/producers/clashmeta.js +++ b/backend/src/core/proxy-utils/producers/clashmeta.js @@ -190,6 +190,7 @@ export default function ClashMeta_Producer() { proxy[`${proxy.network}-opts`] ) { delete proxy[`${proxy.network}-opts`]['_grpc-type']; + delete proxy[`${proxy.network}-opts`]['_grpc-authority']; } return proxy; }); diff --git a/backend/src/core/proxy-utils/producers/shadowrocket.js b/backend/src/core/proxy-utils/producers/shadowrocket.js index a47fa2d..25e4f26 100644 --- a/backend/src/core/proxy-utils/producers/shadowrocket.js +++ b/backend/src/core/proxy-utils/producers/shadowrocket.js @@ -193,6 +193,7 @@ export default function ShadowRocket_Producer() { proxy[`${proxy.network}-opts`] ) { delete proxy[`${proxy.network}-opts`]['_grpc-type']; + delete proxy[`${proxy.network}-opts`]['_grpc-authority']; } return proxy; }); diff --git a/backend/src/core/proxy-utils/producers/stash.js b/backend/src/core/proxy-utils/producers/stash.js index ac26b73..b3fd147 100644 --- a/backend/src/core/proxy-utils/producers/stash.js +++ b/backend/src/core/proxy-utils/producers/stash.js @@ -289,6 +289,7 @@ export default function Stash_Producer() { proxy[`${proxy.network}-opts`] ) { delete proxy[`${proxy.network}-opts`]['_grpc-type']; + delete proxy[`${proxy.network}-opts`]['_grpc-authority']; } return proxy; }); diff --git a/backend/src/core/proxy-utils/producers/uri.js b/backend/src/core/proxy-utils/producers/uri.js index e49c6d4..1231ab3 100644 --- a/backend/src/core/proxy-utils/producers/uri.js +++ b/backend/src/core/proxy-utils/producers/uri.js @@ -134,6 +134,8 @@ export default function URI_Producer() { result.type = proxy[`${proxy.network}-opts`]?.['_grpc-type'] || 'gun'; + result.host = + proxy[`${proxy.network}-opts`]?.['_grpc-authority']; } } result = 'vmess://' + Base64.encode(JSON.stringify(result)); @@ -196,6 +198,13 @@ export default function URI_Producer() { vlessTransport += `&mode=${encodeURIComponent( proxy[`${proxy.network}-opts`]?.['_grpc-type'] || 'gun', )}`; + const authority = + proxy[`${proxy.network}-opts`]?.['_grpc-authority']; + if (authority) { + vlessTransport += `&authority=${encodeURIComponent( + authority, + )}`; + } } let vlessTransportServiceName = @@ -261,11 +270,18 @@ export default function URI_Producer() { proxy[`${proxy.network}-opts`]?.[ `${proxy.network}-service-name` ]; + let trojanTransportAuthority = + proxy[`${proxy.network}-opts`]?.['_grpc-authority']; if (trojanTransportServiceName) { trojanTransport += `&serviceName=${encodeURIComponent( trojanTransportServiceName, )}`; } + if (trojanTransportAuthority) { + trojanTransport += `&authority=${encodeURIComponent( + trojanTransportAuthority, + )}`; + } trojanTransport += `&mode=${encodeURIComponent( proxy[`${proxy.network}-opts`]?.['_grpc-type'] || 'gun',