feat: 手动设置流量信息时, 支持使用链接. 此时使用响应内容

This commit is contained in:
xream 2024-12-22 21:57:01 +08:00
parent 0069b0ce83
commit 837667edc9
No known key found for this signature in database
GPG Key ID: 1D2C5225471789F9
4 changed files with 88 additions and 5 deletions

View File

@ -1,6 +1,6 @@
{ {
"name": "sub-store", "name": "sub-store",
"version": "2.14.446", "version": "2.14.447",
"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

@ -213,9 +213,29 @@ async function downloadSubscription(req, res) {
} }
} }
if (sub.subUserinfo) { 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( res.set(
'subscription-userinfo', '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) { 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( res.set(
'subscription-userinfo', 'subscription-userinfo',
[sub.subUserinfo, flowInfo].filter((i) => i).join('; '), [subUserInfo, flowInfo].filter((i) => i).join('; '),
); );
} }
} }

View File

@ -57,9 +57,29 @@ async function getFlowInfo(req, res) {
!['localFirst', 'remoteFirst'].includes(sub.mergeSources) !['localFirst', 'remoteFirst'].includes(sub.mergeSources)
) { ) {
if (sub.subUserinfo) { 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 { try {
success(res, { success(res, {
...parseFlowHeaders(sub.subUserinfo), ...parseFlowHeaders(subUserInfo),
}); });
} catch (e) { } catch (e) {
$.error( $.error(
@ -149,9 +169,29 @@ async function getFlowInfo(req, res) {
startDate: $arguments.startDate, startDate: $arguments.startDate,
cycleDays: $arguments.cycleDays, 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 = { const result = {
...parseFlowHeaders( ...parseFlowHeaders(
[sub.subUserinfo, flowHeaders].filter((i) => i).join('; '), [subUserInfo, flowHeaders].filter((i) => i).join('; '),
), ),
}; };
if (remainingDays != null) { if (remainingDays != null) {

View File

@ -167,6 +167,9 @@ export async function getFlowHeaders(
flowInfo = getFlowField(headers); flowInfo = getFlowField(headers);
} }
} }
if (flowInfo) {
flowInfo = flowInfo.trim();
}
if (flowInfo) { if (flowInfo) {
headersResourceCache.set(id, flowInfo); headersResourceCache.set(id, flowInfo);
} }