From 837667edc9e70d720f3f63c61f941aa78896b7cf Mon Sep 17 00:00:00 2001 From: xream Date: Sun, 22 Dec 2024 21:57:01 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=89=8B=E5=8A=A8=E8=AE=BE=E7=BD=AE?= =?UTF-8?q?=E6=B5=81=E9=87=8F=E4=BF=A1=E6=81=AF=E6=97=B6,=20=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E4=BD=BF=E7=94=A8=E9=93=BE=E6=8E=A5.=20=E6=AD=A4?= =?UTF-8?q?=E6=97=B6=E4=BD=BF=E7=94=A8=E5=93=8D=E5=BA=94=E5=86=85=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/package.json | 2 +- backend/src/restful/download.js | 44 ++++++++++++++++++++++++++-- backend/src/restful/subscriptions.js | 44 ++++++++++++++++++++++++++-- backend/src/utils/flow.js | 3 ++ 4 files changed, 88 insertions(+), 5 deletions(-) diff --git a/backend/package.json b/backend/package.json index 4409a239e..08b829bbe 100644 --- a/backend/package.json +++ b/backend/package.json @@ -1,6 +1,6 @@ { "name": "sub-store", - "version": "2.14.446", + "version": "2.14.447", "description": "Advanced Subscription Manager for QX, Loon, Surge, Stash and ShadowRocket.", "main": "src/main.js", "scripts": { diff --git a/backend/src/restful/download.js b/backend/src/restful/download.js index 090789478..210311d82 100644 --- a/backend/src/restful/download.js +++ b/backend/src/restful/download.js @@ -213,9 +213,29 @@ async function downloadSubscription(req, res) { } } if (sub.subUserinfo) { + let subUserInfo; + if (/^https?:\/\//.test(sub.subUserinfo)) { + try { + subUserInfo = await getFlowHeaders( + undefined, + undefined, + undefined, + proxy || sub.proxy, + sub.subUserinfo, + ); + } catch (e) { + $.error( + `订阅 ${name} 使用自定义流量链接 ${ + sub.subUserinfo + } 获取流量信息时发生错误: ${JSON.stringify(e)}`, + ); + } + } else { + subUserInfo = sub.subUserinfo; + } res.set( 'subscription-userinfo', - [sub.subUserinfo, flowInfo].filter((i) => i).join('; '), + [subUserInfo, flowInfo].filter((i) => i).join('; '), ); } @@ -415,9 +435,29 @@ async function downloadCollection(req, res) { } } if (sub.subUserinfo) { + let subUserInfo; + if (/^https?:\/\//.test(sub.subUserinfo)) { + try { + subUserInfo = await getFlowHeaders( + undefined, + undefined, + undefined, + proxy || sub.proxy, + sub.subUserinfo, + ); + } catch (e) { + $.error( + `组合订阅 ${name} 使用自定义流量链接 ${ + sub.subUserinfo + } 获取流量信息时发生错误: ${JSON.stringify(e)}`, + ); + } + } else { + subUserInfo = sub.subUserinfo; + } res.set( 'subscription-userinfo', - [sub.subUserinfo, flowInfo].filter((i) => i).join('; '), + [subUserInfo, flowInfo].filter((i) => i).join('; '), ); } } diff --git a/backend/src/restful/subscriptions.js b/backend/src/restful/subscriptions.js index 083ec9ed3..6ec5847fb 100644 --- a/backend/src/restful/subscriptions.js +++ b/backend/src/restful/subscriptions.js @@ -57,9 +57,29 @@ async function getFlowInfo(req, res) { !['localFirst', 'remoteFirst'].includes(sub.mergeSources) ) { if (sub.subUserinfo) { + let subUserInfo; + if (/^https?:\/\//.test(sub.subUserinfo)) { + try { + subUserInfo = await getFlowHeaders( + undefined, + undefined, + undefined, + sub.proxy, + sub.subUserinfo, + ); + } catch (e) { + $.error( + `订阅 ${name} 使用自定义流量链接 ${ + sub.subUserinfo + } 获取流量信息时发生错误: ${JSON.stringify(e)}`, + ); + } + } else { + subUserInfo = sub.subUserinfo; + } try { success(res, { - ...parseFlowHeaders(sub.subUserinfo), + ...parseFlowHeaders(subUserInfo), }); } catch (e) { $.error( @@ -149,9 +169,29 @@ async function getFlowInfo(req, res) { startDate: $arguments.startDate, cycleDays: $arguments.cycleDays, }); + let subUserInfo; + if (/^https?:\/\//.test(sub.subUserinfo)) { + try { + subUserInfo = await getFlowHeaders( + undefined, + undefined, + undefined, + sub.proxy, + sub.subUserinfo, + ); + } catch (e) { + $.error( + `订阅 ${name} 使用自定义流量链接 ${ + sub.subUserinfo + } 获取流量信息时发生错误: ${JSON.stringify(e)}`, + ); + } + } else { + subUserInfo = sub.subUserinfo; + } const result = { ...parseFlowHeaders( - [sub.subUserinfo, flowHeaders].filter((i) => i).join('; '), + [subUserInfo, flowHeaders].filter((i) => i).join('; '), ), }; if (remainingDays != null) { diff --git a/backend/src/utils/flow.js b/backend/src/utils/flow.js index 176d56578..111118506 100644 --- a/backend/src/utils/flow.js +++ b/backend/src/utils/flow.js @@ -167,6 +167,9 @@ export async function getFlowHeaders( flowInfo = getFlowField(headers); } } + if (flowInfo) { + flowInfo = flowInfo.trim(); + } if (flowInfo) { headersResourceCache.set(id, flowInfo); }