mirror of
https://github.com/lush2020/CF-Workers-SUB.git
synced 2026-03-21 11:02:41 +08:00
更新_worker.js,优化订阅格式判断逻辑,简化代码并统一响应头构建
This commit is contained in:
77
_worker.js
77
_worker.js
@@ -93,18 +93,18 @@ export default {
|
|||||||
await sendMessage(`#获取订阅 ${FileName}`, request.headers.get('CF-Connecting-IP'), `UA: ${userAgentHeader}</tg-spoiler>\n域名: ${url.hostname}\n<tg-spoiler>入口: ${url.pathname + url.search}</tg-spoiler>`);
|
await sendMessage(`#获取订阅 ${FileName}`, request.headers.get('CF-Connecting-IP'), `UA: ${userAgentHeader}</tg-spoiler>\n域名: ${url.hostname}\n<tg-spoiler>入口: ${url.pathname + url.search}</tg-spoiler>`);
|
||||||
|
|
||||||
let 订阅格式 = 'base64';
|
let 订阅格式 = 'base64';
|
||||||
if (userAgent.includes('null') || userAgent.includes('subconverter') || userAgent.includes('nekobox') || userAgent.includes(('CF-Workers-SUB').toLowerCase())) {
|
if (!(userAgent.includes('null') || userAgent.includes('subconverter') || userAgent.includes('nekobox') || userAgent.includes(('CF-Workers-SUB').toLowerCase()))) {
|
||||||
订阅格式 = 'base64';
|
if (userAgent.includes('sing-box') || userAgent.includes('singbox') || url.searchParams.has('sb') || url.searchParams.has('singbox')) {
|
||||||
} else if (userAgent.includes('clash') || userAgent.includes('meta') || userAgent.includes('mihomo') || (url.searchParams.has('clash') && !userAgent.includes('subconverter'))) {
|
订阅格式 = 'singbox';
|
||||||
订阅格式 = 'clash';
|
} else if (userAgent.includes('surge') || url.searchParams.has('surge')) {
|
||||||
} else if (userAgent.includes('sing-box') || userAgent.includes('singbox') || ((url.searchParams.has('sb') || url.searchParams.has('singbox')) && !userAgent.includes('subconverter'))) {
|
订阅格式 = 'surge';
|
||||||
订阅格式 = 'singbox';
|
} else if (userAgent.includes('quantumult') || url.searchParams.has('quanx')) {
|
||||||
} else if (userAgent.includes('surge') || (url.searchParams.has('surge') && !userAgent.includes('subconverter'))) {
|
订阅格式 = 'quanx';
|
||||||
订阅格式 = 'surge';
|
} else if (userAgent.includes('loon') || url.searchParams.has('loon')) {
|
||||||
} else if (userAgent.includes('quantumult%20x') || (url.searchParams.has('quanx') && !userAgent.includes('subconverter'))) {
|
订阅格式 = 'loon';
|
||||||
订阅格式 = 'quanx';
|
} else if (userAgent.includes('clash') || userAgent.includes('meta') || userAgent.includes('mihomo') || url.searchParams.has('clash')) {
|
||||||
} else if (userAgent.includes('loon') || (url.searchParams.has('loon') && !userAgent.includes('subconverter'))) {
|
订阅格式 = 'clash';
|
||||||
订阅格式 = 'loon';
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let subConverterUrl;
|
let subConverterUrl;
|
||||||
@@ -168,14 +168,16 @@ export default {
|
|||||||
base64Data = encodeBase64(result)
|
base64Data = encodeBase64(result)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 构建响应头对象
|
||||||
|
const responseHeaders = {
|
||||||
|
"content-type": "text/plain; charset=utf-8",
|
||||||
|
"Profile-Update-Interval": `${SUBUpdateTime}`,
|
||||||
|
"Profile-web-page-url": request.url.includes('?') ? request.url.split('?')[0] : request.url,
|
||||||
|
//"Subscription-Userinfo": `upload=${UD}; download=${UD}; total=${total}; expire=${expire}`,
|
||||||
|
};
|
||||||
|
|
||||||
if (订阅格式 == 'base64' || token == fakeToken) {
|
if (订阅格式 == 'base64' || token == fakeToken) {
|
||||||
return new Response(base64Data, {
|
return new Response(base64Data, { headers: responseHeaders });
|
||||||
headers: {
|
|
||||||
"content-type": "text/plain; charset=utf-8",
|
|
||||||
"Profile-Update-Interval": `${SUBUpdateTime}`,
|
|
||||||
//"Subscription-Userinfo": `upload=${UD}; download=${UD}; total=${total}; expire=${expire}`,
|
|
||||||
}
|
|
||||||
});
|
|
||||||
} else if (订阅格式 == 'clash') {
|
} else if (订阅格式 == 'clash') {
|
||||||
subConverterUrl = `${subProtocol}://${subConverter}/sub?target=clash&url=${encodeURIComponent(订阅转换URL)}&insert=false&config=${encodeURIComponent(subConfig)}&emoji=true&list=false&tfo=false&scv=true&fdn=false&sort=false&new_name=true`;
|
subConverterUrl = `${subProtocol}://${subConverter}/sub?target=clash&url=${encodeURIComponent(订阅转换URL)}&insert=false&config=${encodeURIComponent(subConfig)}&emoji=true&list=false&tfo=false&scv=true&fdn=false&sort=false&new_name=true`;
|
||||||
} else if (订阅格式 == 'singbox') {
|
} else if (订阅格式 == 'singbox') {
|
||||||
@@ -189,40 +191,15 @@ export default {
|
|||||||
}
|
}
|
||||||
//console.log(订阅转换URL);
|
//console.log(订阅转换URL);
|
||||||
try {
|
try {
|
||||||
const subConverterResponse = await fetch(subConverterUrl);
|
const subConverterResponse = await fetch(subConverterUrl);//订阅转换
|
||||||
|
if (!subConverterResponse.ok) return new Response(base64Data, { headers: responseHeaders });
|
||||||
if (!subConverterResponse.ok) {
|
|
||||||
return new Response(base64Data, {
|
|
||||||
headers: {
|
|
||||||
"content-type": "text/plain; charset=utf-8",
|
|
||||||
"Profile-Update-Interval": `${SUBUpdateTime}`,
|
|
||||||
"Profile-web-page-url": request.url.includes('?') ? request.url.split('?')[0] : request.url,
|
|
||||||
//"Subscription-Userinfo": `upload=${UD}; download=${UD}; total=${total}; expire=${expire}`,
|
|
||||||
}
|
|
||||||
});
|
|
||||||
//throw new Error(`Error fetching subConverterUrl: ${subConverterResponse.status} ${subConverterResponse.statusText}`);
|
|
||||||
}
|
|
||||||
let subConverterContent = await subConverterResponse.text();
|
let subConverterContent = await subConverterResponse.text();
|
||||||
if (订阅格式 == 'clash') subConverterContent = await clashFix(subConverterContent);
|
if (订阅格式 == 'clash') subConverterContent = await clashFix(subConverterContent);
|
||||||
return new Response(subConverterContent, {
|
// 只有非浏览器订阅才会返回SUBNAME
|
||||||
headers: {
|
if (!userAgent.includes('mozilla')) responseHeaders["Content-Disposition"] = `attachment; filename*=utf-8''${encodeURIComponent(FileName)}`;
|
||||||
"Content-Disposition": `attachment; filename*=utf-8''${encodeURIComponent(FileName)}`,
|
return new Response(subConverterContent, { headers: responseHeaders });
|
||||||
"content-type": "text/plain; charset=utf-8",
|
|
||||||
"Profile-Update-Interval": `${SUBUpdateTime}`,
|
|
||||||
"Profile-web-page-url": request.url.includes('?') ? request.url.split('?')[0] : request.url,
|
|
||||||
//"Subscription-Userinfo": `upload=${UD}; download=${UD}; total=${total}; expire=${expire}`,
|
|
||||||
|
|
||||||
},
|
|
||||||
});
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
return new Response(base64Data, {
|
return new Response(base64Data, { headers: responseHeaders });
|
||||||
headers: {
|
|
||||||
"content-type": "text/plain; charset=utf-8",
|
|
||||||
"Profile-Update-Interval": `${SUBUpdateTime}`,
|
|
||||||
"Profile-web-page-url": request.url.includes('?') ? request.url.split('?')[0] : request.url,
|
|
||||||
//"Subscription-Userinfo": `upload=${UD}; download=${UD}; total=${total}; expire=${expire}`,
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user