57 lines
1.5 KiB
JavaScript
57 lines
1.5 KiB
JavaScript
// const logger = require("../utils/log.cjs")
|
|
const config = require("../utils/config.cjs");
|
|
const request = require("request");
|
|
const CryptoJS = require("crypto-js");
|
|
|
|
module.exports = {
|
|
config: async () => {
|
|
return config;
|
|
},
|
|
download: async (req, res) => {
|
|
const query = req.query;
|
|
query.url = CryptoJS.enc.Utf8.stringify(
|
|
CryptoJS.enc.Base64.parse(query.url)
|
|
).toString();
|
|
query.headers = {
|
|
"User-Agent":
|
|
"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:136.0) Gecko/20100101 Firefox/136.0",
|
|
Accept: "*/*",
|
|
"Accept-Language":
|
|
"zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2",
|
|
Connection: "keep-alive",
|
|
"Sec-Fetch-Dest": "empty",
|
|
"Sec-Fetch-Mode": "cors",
|
|
"Sec-Fetch-Site": "cross-site",
|
|
...JSON.parse(
|
|
CryptoJS.enc.Utf8.stringify(
|
|
CryptoJS.enc.Base64.parse(query.headers)
|
|
).toString()
|
|
),
|
|
};
|
|
const response = request(query.url, {
|
|
headers: query.headers,
|
|
});
|
|
response.on("response", (resp) => {
|
|
["content-length", "content-type", "content-disposition"].forEach(
|
|
(key) => {
|
|
if (resp.headers[key]) {
|
|
res.setHeader(key, resp.headers[key]);
|
|
}
|
|
}
|
|
);
|
|
res.setHeader("access-control-allow-origin", "*")
|
|
});
|
|
|
|
response.on("error", (e) => {
|
|
res.status(500).send(String(e));
|
|
});
|
|
response.on("end", () => {
|
|
res.end();
|
|
});
|
|
response.on("data", (chunk) => {
|
|
res.write(chunk);
|
|
});
|
|
// response.pipe(res);
|
|
},
|
|
};
|