diff --git a/lib/config.js b/lib/config.js index c4753b2124..3df78baa82 100644 --- a/lib/config.js +++ b/lib/config.js @@ -1,95 +1,108 @@ +let envs = process.env; + const bilibili_cookies = {}; const twitter_tokens = {}; const email_config = {}; -const envs = process.env; -for (const name in envs) { - if (name.startsWith('BILIBILI_COOKIE_')) { - const uid = name.slice(16); - bilibili_cookies[uid] = envs[name]; - } else if (name.startsWith('TWITTER_TOKEN_')) { - const id = name.slice(14); - twitter_tokens[id] = envs[name]; - } else if (name.startsWith('EMAIL_CONFIG_')) { - const id = name.slice(13); - email_config[id] = envs[name]; + +const calculateValue = () => { + for (const name in envs) { + if (name.startsWith('BILIBILI_COOKIE_')) { + const uid = name.slice(16); + bilibili_cookies[uid] = envs[name]; + } else if (name.startsWith('TWITTER_TOKEN_')) { + const id = name.slice(14); + twitter_tokens[id] = envs[name]; + } else if (name.startsWith('EMAIL_CONFIG_')) { + const id = name.slice(13); + email_config[id] = envs[name]; + } } -} +}; +calculateValue(); module.exports = { - connect: { - port: process.env.PORT || 1200, // 监听端口 - socket: process.env.SOCKET || null, // 监听 Unix Socket, null 为禁用 + set: (env) => { + envs = Object.assign(process.env, env); + calculateValue(); }, - cache: { - type: typeof process.env.CACHE_TYPE === 'undefined' ? 'memory' : process.env.CACHE_TYPE, // 缓存类型,支持 'memory' 和 'redis',设为空可以禁止缓存 - routeExpire: parseInt(process.env.CACHE_EXPIRE) || 5 * 60, // 路由缓存时间,单位为秒 - contentExpire: parseInt(process.env.CACHE_CONTENT_EXPIRE) || 1 * 60 * 60, // 不变内容缓存时间,单位为秒 - }, - ua: process.env.UA || 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36', - listenInaddrAny: parseInt(process.env.LISTEN_INADDR_ANY) || 1, // 是否允许公网连接,取值 0 1 - requestRetry: parseInt(process.env.REQUEST_RETRY) || 2, // 请求失败重试次数 - // 是否显示 Debug 信息,取值 boolean 'false' 'key' ,取值为 'false' false 时永远不显示,取值为 'key' 时带上 ?debug=key 显示 - debugInfo: process.env.DEBUG_INFO || true, - titleLengthLimit: parseInt(process.env.TITLE_LENGTH_LIMIT) || 100, - redis: { - url: process.env.REDIS_URL || 'redis://localhost:6379/', - options: { - // 支持这些参数 https://github.com/NodeRedis/node_redis#options-object-properties - password: process.env.REDIS_PASSWORD || null, - }, - }, - nodeName: process.env.NODE_NAME, - pixiv: { - username: process.env.PIXIV_USERNAME, - password: process.env.PIXIV_PASSWORD, - }, - disqus: { - api_key: process.env.DISQUS_API_KEY, - }, - twitter: { - consumer_key: process.env.TWITTER_CONSUMER_KEY, - consumer_secret: process.env.TWITTER_CONSUMER_SECRET, - tokens: twitter_tokens, - }, - youtube: { - key: process.env.YOUTUBE_KEY, - }, - telegram: { - token: process.env.TELEGRAM_TOKEN, - }, - github: { - access_token: process.env.GITHUB_ACCESS_TOKEN, - }, - imgur: { - clientId: process.env.IMGUR_CLIRNT_ID, - }, - authentication: { - name: process.env.HTTP_BASIC_AUTH_NAME || 'usernam3', - pass: process.env.HTTP_BASIC_AUTH_PASS || 'passw0rd', - }, - bilibili: { - cookies: bilibili_cookies, - }, - yuque: { - token: process.env.YUQUE_TOKEN, - }, - puppeteerWSEndpoint: process.env.PUPPETEER_WS_ENDPOINT, - loggerLevel: process.env.LOGGER_LEVEL || 'info', - proxy: { - protocol: process.env.PROXY_PROTOCOL, - host: process.env.PROXY_HOST, - port: process.env.PROXY_PORT, - auth: process.env.PROXY_AUTH, - url_regex: process.env.PROXY_URL_REGEX || '.*', - }, - blacklist: process.env.BLACKLIST && process.env.BLACKLIST.split(','), - whitelist: process.env.WHITELIST && process.env.WHITELIST.split(','), - enableCluster: process.env.ENABLE_CLUSTER, - email: { - config: email_config, - }, - sentry: process.env.SENTRY, - chuiniu: { - member: process.env.CHUINIU_MEMBER, + get value() { + return { + connect: { + port: envs.PORT || 1200, // 监听端口 + socket: envs.SOCKET || null, // 监听 Unix Socket, null 为禁用 + }, + cache: { + type: typeof envs.CACHE_TYPE === 'undefined' ? 'memory' : envs.CACHE_TYPE, // 缓存类型,支持 'memory' 和 'redis',设为空可以禁止缓存 + routeExpire: parseInt(envs.CACHE_EXPIRE) || 5 * 60, // 路由缓存时间,单位为秒 + contentExpire: parseInt(envs.CACHE_CONTENT_EXPIRE) || 1 * 60 * 60, // 不变内容缓存时间,单位为秒 + }, + ua: envs.UA || 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36', + listenInaddrAny: parseInt(envs.LISTEN_INADDR_ANY) || 1, // 是否允许公网连接,取值 0 1 + requestRetry: parseInt(envs.REQUEST_RETRY) || 2, // 请求失败重试次数 + // 是否显示 Debug 信息,取值 boolean 'false' 'key' ,取值为 'false' false 时永远不显示,取值为 'key' 时带上 ?debug=key 显示 + debugInfo: envs.DEBUG_INFO || true, + titleLengthLimit: parseInt(envs.TITLE_LENGTH_LIMIT) || 100, + redis: { + url: envs.REDIS_URL || 'redis://localhost:6379/', + options: { + // 支持这些参数 https://github.com/NodeRedis/node_redis#options-object-properties + password: envs.REDIS_PASSWORD || null, + }, + }, + nodeName: envs.NODE_NAME, + pixiv: { + username: envs.PIXIV_USERNAME, + password: envs.PIXIV_PASSWORD, + }, + disqus: { + api_key: envs.DISQUS_API_KEY, + }, + twitter: { + consumer_key: envs.TWITTER_CONSUMER_KEY, + consumer_secret: envs.TWITTER_CONSUMER_SECRET, + tokens: twitter_tokens, + }, + youtube: { + key: envs.YOUTUBE_KEY, + }, + telegram: { + token: envs.TELEGRAM_TOKEN, + }, + github: { + access_token: envs.GITHUB_ACCESS_TOKEN, + }, + imgur: { + clientId: envs.IMGUR_CLIRNT_ID, + }, + authentication: { + name: envs.HTTP_BASIC_AUTH_NAME || 'usernam3', + pass: envs.HTTP_BASIC_AUTH_PASS || 'passw0rd', + }, + bilibili: { + cookies: bilibili_cookies, + }, + yuque: { + token: envs.YUQUE_TOKEN, + }, + puppeteerWSEndpoint: envs.PUPPETEER_WS_ENDPOINT, + loggerLevel: envs.LOGGER_LEVEL || 'info', + proxy: { + protocol: envs.PROXY_PROTOCOL, + host: envs.PROXY_HOST, + port: envs.PROXY_PORT, + auth: envs.PROXY_AUTH, + url_regex: envs.PROXY_URL_REGEX || '.*', + }, + blacklist: envs.BLACKLIST && envs.BLACKLIST.split(','), + whitelist: envs.WHITELIST && envs.WHITELIST.split(','), + enableCluster: envs.ENABLE_CLUSTER, + email: { + config: email_config, + }, + sentry: envs.SENTRY, + chuiniu: { + member: envs.CHUINIU_MEMBER, + }, + }; }, }; diff --git a/lib/pkg.js b/lib/pkg.js index c2f3163423..583b85422f 100644 --- a/lib/pkg.js +++ b/lib/pkg.js @@ -1,21 +1,25 @@ const app = require('./app'); +const config = require('./config'); -const pkg = (path) => - new Promise((resolve) => { - app.callback()( - { - url: path, - method: 'GET', - headers: {}, - socket: {}, - }, - { - setHeader: () => {}, - end: (data) => { - resolve(data); +module.exports = { + setConfig: (conf) => { + config.set(conf); + }, + request: (path) => + new Promise((resolve) => { + app.callback()( + { + url: path, + method: 'GET', + headers: {}, + socket: {}, }, - } - ); - }); - -module.exports = pkg; + { + setHeader: () => {}, + end: (data) => { + resolve(data); + }, + } + ); + }), +};