diff --git a/main.js b/main.js index 6c7634b..bb5505c 100644 --- a/main.js +++ b/main.js @@ -27,7 +27,7 @@ moduleFiles.forEach((file) => { const cookie = typeof data.cookie === 'string' ? cookieToJson(data.cookie) - : data.cookie || {} + : data.cookie return fileModule( { diff --git a/module/login_qr_create.js b/module/login_qr_create.js index d94cbec..5562099 100644 --- a/module/login_qr_create.js +++ b/module/login_qr_create.js @@ -1,10 +1,10 @@ const QRCode = require('qrcode') -const { generateChainId } = require('../util/index') +const { generateChainId, hasCookie } = require('../util/index') module.exports = (query) => { return new Promise(async (resolve) => { const platform = query.platform || 'pc' - const cookie = query.cookie || '' + const cookie = hasCookie(query.cookie) ? query.cookie : '' // 构建基础URL let url = `https://music.163.com/login?codekey=${query.key}` diff --git a/module/scrobble.js b/module/scrobble.js index 7adf91e..e2ed226 100644 --- a/module/scrobble.js +++ b/module/scrobble.js @@ -1,18 +1,23 @@ // 听歌打卡 const createOption = require('../util/option.js') +const { hasCookie } = require('../util/index') const { APP_CONF } = require('../util/config.json') const DOMAIN = APP_CONF.clDomian module.exports = async (query, request) => { // 注入 os=osx 的 cookie - let cookie = query.cookie || '' + let cookie = hasCookie(query.cookie) + ? query.cookie + : process.env.NETEASE_COOKIE || '' if (typeof cookie === 'object') { cookie = Object.assign({ os: 'osx' }, cookie) } else if (typeof cookie === 'string') { if (cookie.indexOf('os=') > -1) { cookie = cookie.replace(/os=[^;]+/g, 'os=osx') - } else { + } else if (cookie) { cookie = cookie + '; os=osx' + } else { + cookie = 'os=osx' } } else { cookie = 'os=osx' diff --git a/module/scrobble_v1.js b/module/scrobble_v1.js index 84c3658..0351baa 100644 --- a/module/scrobble_v1.js +++ b/module/scrobble_v1.js @@ -13,6 +13,7 @@ const { buildMetaJson, doUpload, } = require('../util/ncbl') +const { hasCookie } = require('../util/index') module.exports = async (query, request) => { // --- 参数校验 --- @@ -32,7 +33,9 @@ module.exports = async (query, request) => { const sourceName = query.source || 'list' // --- 解析认证上下文 --- - const rawCookie = query.cookie || '' + const rawCookie = hasCookie(query.cookie) + ? query.cookie + : process.env.NETEASE_COOKIE || '' const cookieObj = parseCookie(rawCookie) cookieObj.os = 'pc' const ctx = extractContext(cookieObj) diff --git a/util/index.js b/util/index.js index e76d665..e253912 100644 --- a/util/index.js +++ b/util/index.js @@ -103,6 +103,15 @@ module.exports = { return obj }, + hasCookie(cookie) { + if (typeof cookie === 'string') return cookie.length > 0 + return ( + cookie !== null && + typeof cookie === 'object' && + Object.keys(cookie).length > 0 + ) + }, + cookieObjToString(cookie) { // 优化:使用预绑定的keys函数和for循环 const cookieKeys = keys(cookie) @@ -226,6 +235,8 @@ const cookieToJsonOptimized = (function() { function getCookieValue(cookieStr, name) { if (!cookieStr) return '' + if (typeof cookieStr === 'object') return cookieStr[name] || '' + const cookies = '; ' + cookieStr const parts = cookies.split('; ' + name + '=') if (parts.length === 2) return parts.pop().split(';').shift() diff --git a/util/option.js b/util/option.js index 9796234..e10078f 100644 --- a/util/option.js +++ b/util/option.js @@ -1,7 +1,11 @@ +const { hasCookie } = require('./index') + const createOption = (query, crypto = '', checkToken = false) => { return { crypto: query.crypto || crypto || '', - cookie: query.cookie || process.env.NETEASE_COOKIE, + cookie: hasCookie(query.cookie) + ? query.cookie + : process.env.NETEASE_COOKIE, ua: query.ua || '', proxy: query.proxy, realIP: query.realIP,