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); }