fix: 修复订阅流量传递

This commit is contained in:
xream 2024-03-12 00:55:30 +08:00
parent 09495fa607
commit 53bb4866e7
No known key found for this signature in database
GPG Key ID: 1D2C5225471789F9

View File

@ -77,12 +77,44 @@ async function downloadSubscription(req, res) {
}, },
}); });
if (sub.source !== 'local' || url) { if (
sub.source !== 'local' ||
['localFirst', 'remoteFirst'].includes(sub.mergeSources) ||
url
) {
try { try {
// forward flow headers url = `${url || sub.url}`
const flowInfo = await getFlowHeaders(url || sub.url); .split(/[\r\n]+/)
if (flowInfo) { .map((i) => i.trim())
res.set('subscription-userinfo', flowInfo); .filter((i) => i.length)?.[0];
let $arguments = {};
const rawArgs = url.split('#');
url = url.split('#')[0];
if (rawArgs.length > 1) {
try {
// 支持 `#${encodeURIComponent(JSON.stringify({arg1: "1"}))}`
$arguments = JSON.parse(
decodeURIComponent(rawArgs[1]),
);
} catch (e) {
for (const pair of rawArgs[1].split('&')) {
const key = pair.split('=')[0];
const value = pair.split('=')[1];
// 部分兼容之前的逻辑 const value = pair.split('=')[1] || true;
$arguments[key] =
value == null || value === ''
? true
: decodeURIComponent(value);
}
}
}
if (!$arguments.noFlow) {
// forward flow headers
const flowInfo = await getFlowHeaders(url);
if (flowInfo) {
res.set('subscription-userinfo', flowInfo);
}
} }
} catch (err) { } catch (err) {
$.error( $.error(
@ -176,11 +208,42 @@ async function downloadCollection(req, res) {
const subnames = collection.subscriptions; const subnames = collection.subscriptions;
if (subnames.length > 0) { if (subnames.length > 0) {
const sub = findByName(allSubs, subnames[0]); const sub = findByName(allSubs, subnames[0]);
if (sub.source !== 'local') { if (
sub.source !== 'local' ||
['localFirst', 'remoteFirst'].includes(sub.mergeSources)
) {
try { try {
const flowInfo = await getFlowHeaders(sub.url); let url = `${sub.url}`
if (flowInfo) { .split(/[\r\n]+/)
res.set('subscription-userinfo', flowInfo); .map((i) => i.trim())
.filter((i) => i.length)?.[0];
let $arguments = {};
const rawArgs = url.split('#');
url = url.split('#')[0];
if (rawArgs.length > 1) {
try {
// 支持 `#${encodeURIComponent(JSON.stringify({arg1: "1"}))}`
$arguments = JSON.parse(
decodeURIComponent(rawArgs[1]),
);
} catch (e) {
for (const pair of rawArgs[1].split('&')) {
const key = pair.split('=')[0];
const value = pair.split('=')[1];
// 部分兼容之前的逻辑 const value = pair.split('=')[1] || true;
$arguments[key] =
value == null || value === ''
? true
: decodeURIComponent(value);
}
}
}
if (!$arguments.noFlow) {
const flowInfo = await getFlowHeaders(url);
if (flowInfo) {
res.set('subscription-userinfo', flowInfo);
}
} }
} catch (err) { } catch (err) {
$.error( $.error(