提交 50adbfd8 编写于 作者: N Nzix

allocate js cookie in middleware, update res cookie distribution

上级 f8660cdc
......@@ -45,11 +45,20 @@ app.use(express.static(path.resolve(__dirname, 'public')))
app.use(function(req, res, next) {
const proxy = req.query.proxy
if (proxy) {
req.headers.cookie = req.headers.cookie + `__proxy__${proxy}`
req.headers.cookie += `__proxy__${proxy}`
}
next()
})
// 补全缺失的cookie
const { completeCookie } = require('./util/init')
app.use(function(req, res, next) {
let cookie = completeCookie(req.headers.cookie)
req.headers.cookie = cookie.map(x => x[0]).concat(req.headers.cookie || []).join('; ')
res.append('Set-Cookie', cookie.map(x => (x.concat('Path=/').join('; '))))
next()
})
// 因为这几个文件对外所注册的路由 和 其他文件对外注册的路由规则不一样, 所以专门写个MAP对这些文件做特殊处理
const UnusualRouteFileMap = {
// key 为文件名, value 为对外注册的路由
......
......@@ -21,10 +21,7 @@ module.exports = (req, res, createWebAPIRequest, request) => {
cookie,
(music_req, cookie) => {
// console.log(music_req)
cookie = cookie && cookie.map(x => x.replace('Domain=.music.163.com', ''))
res.set({
'Set-Cookie': cookie
})
res.append("Set-Cookie", cookie)
res.send(music_req)
},
err => res.status(502).send('fetch error')
......
......@@ -17,15 +17,8 @@ module.exports = (req, res, createWebAPIRequest, request) => {
"POST",
data,
cookie,
(music_req, cookie = []) => {
const cookieStr =
"appver=1.5.9;os=osx; channel=netease;osver=%E7%89%88%E6%9C%AC%2010.13.2%EF%BC%88%E7%89%88%E5%8F%B7%2017C88%EF%BC%89";
cookieStr.split(";").forEach(item => {
cookie.push(item + ";Path=/");
});
res.set({
"Set-Cookie": cookie
});
(music_req, cookie) => {
res.append("Set-Cookie", cookie);
res.send(music_req);
},
err => res.status(502).send("fetch error")
......
......@@ -11,9 +11,7 @@ module.exports = (req, res, createWebAPIRequest, request) => {
data,
cookie,
(music_req, cookie) => {
res.set({
"Set-Cookie": cookie
});
res.append("Set-Cookie", cookie);
res.send(music_req);
},
err => res.status(502).send("fetch error")
......
function randomString(pattern, length){
return Array.apply(null, {length: length}).map(() => (pattern[Math.floor(Math.random() * pattern.length)])).join('');
return Array.apply(null, {length: length}).map(() => (pattern[Math.floor(Math.random() * pattern.length)])).join('')
}
function generateCookie(){
const jsessionid = randomString('0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKMNOPQRSTUVWXYZ\\/+',176) + ':' + (new Date).getTime();
const nuid = randomString('0123456789abcdefghijklmnopqrstuvwxyz',32);
return {
'JSESSIONID-WYYY': jsessionid,
'_iuqxldmzr_': 32,
'_ntes_nnid': nuid + ',' + (new Date).getTime(),
'_ntes_nuid': nuid
function completeCookie(cookie){
let origin = (cookie || '').split(/;\s*/).map(element => (element.split('=')[0])), extra = []
let now = (new Date).getTime()
if(!origin.includes('JSESSIONID-WYYY')){
let expire = new Date(now + 1800000) //30 minutes
let jessionid = randomString('0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKMNOPQRSTUVWXYZ\\/+',176) + ':' + expire.getTime()
extra.push(['JSESSIONID-WYYY=' + jessionid, 'Expires=' + expire.toGMTString()])
}
if(!origin.includes('_iuqxldmzr_')){
let expire = new Date(now + 157680000000) //5 years
extra.push(['_iuqxldmzr_=32', 'Expires=' + expire.toGMTString()])
}
if((!origin.includes('_ntes_nnid'))||(!origin.includes('_ntes_nuid'))){
let expire = new Date(now + 3153600000000) //100 years
let nnid = randomString('0123456789abcdefghijklmnopqrstuvwxyz',32) + ',' + now
extra.push(['_ntes_nnid=' + nnid, 'Expires=' + expire.toGMTString()])
extra.push(['_ntes_nuid=' + nnid.slice(0,32), 'Expires=' + expire.toGMTString()])
}
return extra
}
module.exports = generateCookie
\ No newline at end of file
module.exports = {
completeCookie
}
\ No newline at end of file
const Encrypt = require("./crypto.js");
const request = require("request");
const queryString = require("querystring");
const randomCookie = require("./init.js");
request.debug = true;
......@@ -48,15 +47,6 @@ function createWebAPIRequest(
const proxy = cookie.split("__proxy__")[1];
cookie = cookie.split("__proxy__")[0];
const jsCookie = randomCookie();
const missingCookie = [];
for (let key in jsCookie){
if (cookie.indexOf(key) == -1){
missingCookie.push(`${key}=${jsCookie[key]}`);
}
}
cookie = cookie.split(/;\s*/).concat(missingCookie).join("; ");
const encryptedData = Encrypt(data);
const options = {
......@@ -87,15 +77,8 @@ function createWebAPIRequest(
console.error(error);
errorCallback(error);
} else {
//解决 网易云 cookie 添加 .music.163.com 域设置。
//如: Domain=.music.163.com
let cookie = res.headers["set-cookie"];
if (Array.isArray(cookie)) {
cookie = cookie
.map(x => x.replace(/.music.163.com/g, ""))
.sort((a, b) => a.length - b.length);
cookie = cookie.concat(missingCookie.map(x => x + '; Expires=' + (new Date((new Date).getTime() + 157680000000)).toGMTString()));
}
let cookie = res.headers["set-cookie"] || [];
cookie = cookie.map(x => x.replace(/\s*Domain=[^(;|$)]+;*/, ""));
callback(body, cookie);
}
});
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册