feat: 文件支持设置代理/策略, 链接支持传入 proxy 参数指定代理/策略; 修复代理/策略优先级

This commit is contained in:
xream 2024-10-07 22:05:07 +08:00
parent 8ffb060cb4
commit ef85b6d0e9
No known key found for this signature in database
GPG Key ID: 1D2C5225471789F9
4 changed files with 28 additions and 10 deletions

View File

@ -1,6 +1,6 @@
{ {
"name": "sub-store", "name": "sub-store",
"version": "2.14.390", "version": "2.14.391",
"description": "Advanced Subscription Manager for QX, Loon, Surge, Stash and ShadowRocket.", "description": "Advanced Subscription Manager for QX, Loon, Surge, Stash and ShadowRocket.",
"main": "src/main.js", "main": "src/main.js",
"scripts": { "scripts": {

View File

@ -181,7 +181,7 @@ async function downloadSubscription(req, res) {
url, url,
$arguments.flowUserAgent, $arguments.flowUserAgent,
undefined, undefined,
sub.proxy, proxy || sub.proxy,
$arguments.flowUrl, $arguments.flowUrl,
); );
if (flowInfo) { if (flowInfo) {
@ -368,7 +368,7 @@ async function downloadCollection(req, res) {
url, url,
$arguments.flowUserAgent, $arguments.flowUserAgent,
undefined, undefined,
sub.proxy || collection.proxy || proxy, proxy || sub.proxy || collection.proxy,
$arguments.flowUrl, $arguments.flowUrl,
); );
if (flowInfo) { if (flowInfo) {

View File

@ -59,6 +59,7 @@ async function getFile(req, res) {
content, content,
mergeSources, mergeSources,
ignoreFailedRemoteFile, ignoreFailedRemoteFile,
proxy,
} = req.query; } = req.query;
let $options = {}; let $options = {};
if (req.query.$options) { if (req.query.$options) {
@ -82,6 +83,10 @@ async function getFile(req, res) {
url = decodeURIComponent(url); url = decodeURIComponent(url);
$.info(`指定远程文件 URL: ${url}`); $.info(`指定远程文件 URL: ${url}`);
} }
if (proxy) {
proxy = decodeURIComponent(proxy);
$.info(`指定远程订阅使用代理/策略 proxy: ${proxy}`);
}
if (ua) { if (ua) {
ua = decodeURIComponent(ua); ua = decodeURIComponent(ua);
$.info(`指定远程文件 User-Agent: ${ua}`); $.info(`指定远程文件 User-Agent: ${ua}`);
@ -120,6 +125,7 @@ async function getFile(req, res) {
mergeSources, mergeSources,
ignoreFailedRemoteFile, ignoreFailedRemoteFile,
$options, $options,
proxy,
}); });
try { try {
@ -129,6 +135,8 @@ async function getFile(req, res) {
const flowInfo = await getFlowHeaders( const flowInfo = await getFlowHeaders(
subInfoUrl, subInfoUrl,
subInfoUserAgent || file.subInfoUserAgent, subInfoUserAgent || file.subInfoUserAgent,
undefined,
proxy || file.proxy,
); );
if (flowInfo) { if (flowInfo) {
res.set('subscription-userinfo', flowInfo); res.set('subscription-userinfo', flowInfo);

View File

@ -69,7 +69,7 @@ async function produceArtifact({
url, url,
ua || sub.ua, ua || sub.ua,
undefined, undefined,
sub.proxy || proxy, proxy || sub.proxy,
undefined, undefined,
awaitCustomCache, awaitCustomCache,
); );
@ -116,7 +116,7 @@ async function produceArtifact({
url, url,
ua || sub.ua, ua || sub.ua,
undefined, undefined,
sub.proxy || proxy, proxy || sub.proxy,
undefined, undefined,
awaitCustomCache, awaitCustomCache,
); );
@ -221,9 +221,9 @@ async function produceArtifact({
url, url,
sub.ua, sub.ua,
undefined, undefined,
sub.proxy || proxy ||
collection.proxy || sub.proxy ||
proxy, collection.proxy,
); );
} catch (err) { } catch (err) {
errors[url] = err; errors[url] = err;
@ -392,7 +392,12 @@ async function produceArtifact({
.filter((i) => i.length) .filter((i) => i.length)
.map(async (url) => { .map(async (url) => {
try { try {
return await download(url, ua || file.ua); return await download(
url,
ua || file.ua,
undefined,
file.proxy || proxy,
);
} catch (err) { } catch (err) {
errors[url] = err; errors[url] = err;
$.error( $.error(
@ -435,7 +440,12 @@ async function produceArtifact({
.filter((i) => i.length) .filter((i) => i.length)
.map(async (url) => { .map(async (url) => {
try { try {
return await download(url, ua || file.ua); return await download(
url,
ua || file.ua,
undefined,
file.proxy || proxy,
);
} catch (err) { } catch (err) {
errors[url] = err; errors[url] = err;
$.error( $.error(