From cd352cd5743969ca18d89d8e7b6b07f621e5de40 Mon Sep 17 00:00:00 2001 From: xream Date: Wed, 13 Mar 2024 01:55:16 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=94=AF=E6=8C=81=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E4=BB=A3=E7=90=86/=E8=8A=82=E7=82=B9=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E8=AE=A2=E9=98=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/package.json | 2 +- backend/src/restful/download.js | 14 ++++++++++++-- backend/src/restful/preview.js | 14 ++++++++++++-- backend/src/restful/subscriptions.js | 7 ++++++- backend/src/restful/sync.js | 21 ++++++++++++++++++--- backend/src/utils/download.js | 17 +++++++++++++---- backend/src/utils/flow.js | 7 +++++-- 7 files changed, 67 insertions(+), 15 deletions(-) diff --git a/backend/package.json b/backend/package.json index c0d80ece7..a1966cbf7 100644 --- a/backend/package.json +++ b/backend/package.json @@ -1,6 +1,6 @@ { "name": "sub-store", - "version": "2.14.249", + "version": "2.14.250", "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 2fce1a77d..45bd8e9b4 100644 --- a/backend/src/restful/download.js +++ b/backend/src/restful/download.js @@ -111,7 +111,12 @@ async function downloadSubscription(req, res) { } if (!$arguments.noFlow) { // forward flow headers - const flowInfo = await getFlowHeaders(url); + const flowInfo = await getFlowHeaders( + url, + undefined, + undefined, + sub.proxy, + ); if (flowInfo) { res.set('subscription-userinfo', flowInfo); } @@ -243,7 +248,12 @@ async function downloadCollection(req, res) { } } if (!$arguments.noFlow) { - const flowInfo = await getFlowHeaders(url); + const flowInfo = await getFlowHeaders( + url, + undefined, + undefined, + sub.proxy, + ); if (flowInfo) { res.set('subscription-userinfo', flowInfo); } diff --git a/backend/src/restful/preview.js b/backend/src/restful/preview.js index 77f9f6bc1..674578212 100644 --- a/backend/src/restful/preview.js +++ b/backend/src/restful/preview.js @@ -109,7 +109,12 @@ async function compareSub(req, res) { .filter((i) => i.length) .map(async (url) => { try { - return await download(url, sub.ua); + return await download( + url, + sub.ua, + undefined, + sub.proxy, + ); } catch (err) { errors[url] = err; $.error( @@ -195,7 +200,12 @@ async function compareCollection(req, res) { .filter((i) => i.length) .map(async (url) => { try { - return await download(url, sub.ua); + return await download( + url, + sub.ua, + undefined, + sub.proxy, + ); } catch (err) { errors[url] = err; $.error( diff --git a/backend/src/restful/subscriptions.js b/backend/src/restful/subscriptions.js index af3d36748..1a5b3a64b 100644 --- a/backend/src/restful/subscriptions.js +++ b/backend/src/restful/subscriptions.js @@ -113,7 +113,12 @@ async function getFlowInfo(req, res) { }), }); } else { - const flowHeaders = await getFlowHeaders(url); + const flowHeaders = await getFlowHeaders( + url, + undefined, + undefined, + sub.proxy, + ); if (!flowHeaders) { failed( res, diff --git a/backend/src/restful/sync.js b/backend/src/restful/sync.js index fc986046c..e462c5e5d 100644 --- a/backend/src/restful/sync.js +++ b/backend/src/restful/sync.js @@ -62,7 +62,12 @@ async function produceArtifact({ .filter((i) => i.length) .map(async (url) => { try { - return await download(url, ua || sub.ua); + return await download( + url, + ua || sub.ua, + undefined, + sub.proxy, + ); } catch (err) { errors[url] = err; $.error( @@ -102,7 +107,12 @@ async function produceArtifact({ .filter((i) => i.length) .map(async (url) => { try { - return await download(url, ua || sub.ua); + return await download( + url, + ua || sub.ua, + undefined, + sub.proxy, + ); } catch (err) { errors[url] = err; $.error( @@ -198,7 +208,12 @@ async function produceArtifact({ .filter((i) => i.length) .map(async (url) => { try { - return await download(url, sub.ua); + return await download( + url, + sub.ua, + undefined, + sub.proxy, + ); } catch (err) { errors[url] = err; $.error( diff --git a/backend/src/utils/download.js b/backend/src/utils/download.js index 600f2576d..3efee53e5 100644 --- a/backend/src/utils/download.js +++ b/backend/src/utils/download.js @@ -13,7 +13,7 @@ import $ from '@/core/app'; const tasks = new Map(); -export default async function download(rawUrl, ua, timeout) { +export default async function download(rawUrl, ua, timeout, proxy) { let $arguments = {}; let url = rawUrl.replace(/#noFlow$/, ''); const rawArgs = url.split('#'); @@ -78,10 +78,15 @@ export default async function download(rawUrl, ua, timeout) { result = cached; } else { $.info( - `Downloading...\nUser-Agent: ${userAgent}\nTimeout: ${requestTimeout}\nURL: ${url}`, + `Downloading...\nUser-Agent: ${userAgent}\nTimeout: ${requestTimeout}\nProxy: ${proxy}\nURL: ${url}`, ); try { - const { body, headers } = await http.get(url); + const { body, headers } = await http.get({ + url, + proxy, + node: proxy, + 'policy-descriptor': proxy, + }); if (headers) { const flowInfo = getFlowField(headers); @@ -116,7 +121,11 @@ export default async function download(rawUrl, ua, timeout) { // 检查订阅有效性 if ($arguments?.validCheck) { - await validCheck(parseFlowHeaders(await getFlowHeaders(url))); + await validCheck( + parseFlowHeaders( + await getFlowHeaders(url, undefined, undefined, proxy), + ), + ); } if (!isNode) { diff --git a/backend/src/utils/flow.js b/backend/src/utils/flow.js index b7f259dd9..180753756 100644 --- a/backend/src/utils/flow.js +++ b/backend/src/utils/flow.js @@ -9,7 +9,7 @@ export function getFlowField(headers) { )[0]; return headers[subkey]; } -export async function getFlowHeaders(rawUrl, ua, timeout) { +export async function getFlowHeaders(rawUrl, ua, timeout, proxy) { let url = rawUrl; let $arguments = {}; const rawArgs = url.split('#'); @@ -57,6 +57,9 @@ export async function getFlowHeaders(rawUrl, ua, timeout) { 'User-Agent': userAgent, }, timeout: requestTimeout, + proxy, + node: proxy, + 'policy-descriptor': proxy, }); flowInfo = getFlowField(headers); } catch (e) { @@ -178,7 +181,7 @@ export function getRmainingDays(opt = {}) { return daysDiff; } else { - if (!resetDay) throw new Error('未提供月重置日 resetDay'); + if (!resetDay) return; resetDay = parseInt(resetDay); if (isNaN(resetDay) || resetDay <= 0 || resetDay > 31) throw new Error('月重置日应为 1-31 之间的整数');