Files
RSSHub/lib/config.js
nightmare-mio 5774a576a9 feat(route): 轻之国度 文章更新阅读 #11848 (#13938)
* add router 关于bilibili票务

* bilibili票务基础模板

* add bilibili会员购票务 maintainer

* add cookie

* doc文档,radar

* add 补充内容

* 修改doc条目顺序,优化代码

* fix:修复doc文旦错误,移除作者备注

* fix: delete radar.js中的多余文字

* fix: 修复错误

* 开坑,轻之国度。

* 轻之国度,主体完成

* fix: router.js

* 添加文章正文内容

* 文档补全

* cookie可从环境变量赋值

* fix:补充说明

* fix:补充说明

* fix:puppeteer浏览器没有关闭的问题

* fix: 作者名字写错了

* fix: delete tpye in route,modify case

* fix: puppeteer change to got

* fix:remove collctions and puppeteer

* fix: add cookie doc

* fix: website can not run beacuse '
2023-12-10 22:56:02 +08:00

360 lines
12 KiB
JavaScript

require('dotenv').config();
const randUserAgent = require('./utils/rand-user-agent');
const got = require('got');
let envs = process.env;
let value;
const TRUE_UA = 'RSSHub/1.0 (+http://github.com/DIYgod/RSSHub; like FeedFetcher-Google)';
const calculateValue = () => {
const bilibili_cookies = {};
const email_config = {};
const discuz_cookies = {};
const medium_cookies = {};
const discourse_config = {};
for (const name in envs) {
if (name.startsWith('BILIBILI_COOKIE_')) {
const uid = name.slice(16);
bilibili_cookies[uid] = envs[name];
} else if (name.startsWith('EMAIL_CONFIG_')) {
const id = name.slice(13);
email_config[id] = envs[name];
} else if (name.startsWith('DISCUZ_COOKIE_')) {
const cid = name.slice(14);
discuz_cookies[cid] = envs[name];
} else if (name.startsWith('MEDIUM_COOKIE_')) {
const username = name.slice(14).toLowerCase();
medium_cookies[username] = envs[name];
} else if (name.startsWith('DISCOURSE_CONFIG_')) {
const id = name.slice('DISCOURSE_CONFIG_'.length);
discourse_config[id] = JSON.parse(envs[name]);
}
}
value = {
// app config
disallowRobot: envs.DISALLOW_ROBOT !== '0' && envs.DISALLOW_ROBOT !== 'false',
enableCluster: envs.ENABLE_CLUSTER,
isPackage: envs.IS_PACKAGE,
nodeName: envs.NODE_NAME,
puppeteerWSEndpoint: envs.PUPPETEER_WS_ENDPOINT,
chromiumExecutablePath: envs.CHROMIUM_EXECUTABLE_PATH,
// network
connect: {
port: envs.PORT || 1200, // 监听端口
socket: envs.SOCKET || null, // 监听 Unix Socket, null 为禁用
},
listenInaddrAny: envs.LISTEN_INADDR_ANY || 1, // 是否允许公网连接,取值 0 1
requestRetry: parseInt(envs.REQUEST_RETRY) || 2, // 请求失败重试次数
requestTimeout: parseInt(envs.REQUEST_TIMEOUT) || 30000, // Milliseconds to wait for the server to end the response before aborting the request
ua: envs.UA ? envs.UA : envs.NO_RANDOM_UA === 'true' || envs.NO_RANDOM_UA === '1' ? TRUE_UA : randUserAgent({ browser: 'chrome', os: 'mac os', device: 'desktop' }),
trueUA: TRUE_UA,
// cors request
allowOrigin: envs.ALLOW_ORIGIN,
// cache
cache: {
type: typeof envs.CACHE_TYPE === 'undefined' ? 'memory' : envs.CACHE_TYPE, // 缓存类型,支持 'memory' 和 'redis',设为空可以禁止缓存
requestTimeout: parseInt(envs.CACHE_REQUEST_TIMEOUT) || 60,
routeExpire: parseInt(envs.CACHE_EXPIRE) || 5 * 60, // 路由缓存时间,单位为秒
contentExpire: parseInt(envs.CACHE_CONTENT_EXPIRE) || 1 * 60 * 60, // 不变内容缓存时间,单位为秒
},
memory: {
max: parseInt(envs.MEMORY_MAX) || Math.pow(2, 8), // The maximum number of items that remain in the cache. This must be a positive finite intger.
// https://github.com/isaacs/node-lru-cache#options
},
redis: {
url: envs.REDIS_URL || 'redis://localhost:6379/',
},
// proxy
proxyUri: envs.PROXY_URI,
proxy: {
protocol: envs.PROXY_PROTOCOL,
host: envs.PROXY_HOST,
port: envs.PROXY_PORT,
auth: envs.PROXY_AUTH,
url_regex: envs.PROXY_URL_REGEX || '.*',
},
proxyStrategy: envs.PROXY_STRATEGY || 'all', // all / on_retry
reverseProxyUrl: envs.REVERSE_PROXY_URL,
// auth
authentication: {
name: envs.HTTP_BASIC_AUTH_NAME || 'usernam3',
pass: envs.HTTP_BASIC_AUTH_PASS || 'passw0rd',
},
// access control
denylist: envs.DENYLIST && envs.DENYLIST.split(','),
allowlist: envs.ALLOWLIST && envs.ALLOWLIST.split(','),
allowLocalhost: envs.ALLOW_LOCALHOST,
accessKey: envs.ACCESS_KEY,
// logging
// 是否显示 Debug 信息,取值 'true' 'false' 'some_string' ,取值为 'true' 时永久显示,取值为 'false' 时永远隐藏,取值为 'some_string' 时请求带上 '?debug=some_string' 显示
debugInfo: envs.DEBUG_INFO || 'true',
loggerLevel: envs.LOGGER_LEVEL || 'info',
noLogfiles: envs.NO_LOGFILES,
showLoggerTimestamp: envs.SHOW_LOGGER_TIMESTAMP,
sentry: {
dsn: envs.SENTRY,
routeTimeout: parseInt(envs.SENTRY_ROUTE_TIMEOUT) || 30000,
},
// feed config
hotlink: {
template: envs.HOTLINK_TEMPLATE,
includePaths: envs.HOTLINK_INCLUDE_PATHS && envs.HOTLINK_INCLUDE_PATHS.split(','),
excludePaths: envs.HOTLINK_EXCLUDE_PATHS && envs.HOTLINK_EXCLUDE_PATHS.split(','),
},
feature: {
allow_user_hotlink_template: envs.ALLOW_USER_HOTLINK_TEMPLATE === 'true',
filter_regex_engine: envs.FILTER_REGEX_ENGINE || 're2',
allow_user_supply_unsafe_domain: envs.ALLOW_USER_SUPPLY_UNSAFE_DOMAIN === 'true',
},
suffix: envs.SUFFIX,
titleLengthLimit: parseInt(envs.TITLE_LENGTH_LIMIT) || 150,
openai: {
apiKey: envs.OPENAI_API_KEY,
model: envs.OPENAI_MODEL || 'gpt-3.5-turbo-16k',
temperature: envs.OPENAI_TEMPERATURE || 0.2,
maxTokens: envs.OPENAI_MAX_TOKENS || null,
endpoint: envs.OPENAI_API_ENDPOINT || 'https://api.openai.com/v1',
prompt: envs.OPENAI_PROMPT || 'Please summarize the following article and reply with markdown format.',
},
// Route-specific Configurations
bilibili: {
cookies: bilibili_cookies,
},
bitbucket: {
username: envs.BITBUCKET_USERNAME,
password: envs.BITBUCKET_PASSWORD,
},
btbyr: {
host: envs.BTBYR_HOST,
cookies: envs.BTBYR_COOKIE,
},
bupt: {
portal_cookie: envs.BUPT_PORTAL_COOKIE,
},
chuiniu: {
member: envs.CHUINIU_MEMBER,
},
civitai: {
cookie: envs.CIVITAI_COOKIE,
},
dida365: {
username: envs.DIDA365_USERNAME,
password: envs.DIDA365_PASSWORD,
},
discord: {
authorization: envs.DISCORD_AUTHORIZATION,
},
discourse: {
config: discourse_config,
},
discuz: {
cookies: discuz_cookies,
},
disqus: {
api_key: envs.DISQUS_API_KEY,
},
douban: {
cookie: envs.DOUBAN_COOKIE,
},
ehentai: {
ipb_member_id: envs.EH_IPB_MEMBER_ID,
ipb_pass_hash: envs.EH_IPB_PASS_HASH,
sk: envs.EH_SK,
igneous: envs.EH_IGNEOUS,
star: envs.EH_STAR,
img_proxy: envs.EH_IMG_PROXY,
},
email: {
config: email_config,
},
fanbox: {
session: envs.FANBOX_SESSION_ID,
},
fanfou: {
consumer_key: envs.FANFOU_CONSUMER_KEY,
consumer_secret: envs.FANFOU_CONSUMER_SECRET,
username: envs.FANFOU_USERNAME,
password: envs.FANFOU_PASSWORD,
},
fantia: {
cookies: envs.FANTIA_COOKIE,
},
game4399: {
cookie: envs.GAME_4399,
},
github: {
access_token: envs.GITHUB_ACCESS_TOKEN,
},
gitee: {
access_token: envs.GITEE_ACCESS_TOKEN,
},
google: {
fontsApiKey: envs.GOOGLE_FONTS_API_KEY,
},
hefeng: {
// weather
key: envs.HEFENG_KEY,
},
infzm: {
cookie: envs.INFZM_COOKIE,
},
initium: {
username: envs.INITIUM_USERNAME,
password: envs.INITIUM_PASSWORD,
bearertoken: envs.INITIUM_BEARER_TOKEN,
iap_receipt: envs.INITIUM_IAP_RECEIPT,
},
instagram: {
username: envs.IG_USERNAME,
password: envs.IG_PASSWORD,
proxy: envs.IG_PROXY,
cookie: envs.IG_COOKIE,
},
iwara: {
username: envs.IWARA_USERNAME,
password: envs.IWARA_PASSWORD,
},
lastfm: {
api_key: envs.LASTFM_API_KEY,
},
lightnovel: {
cookie: envs.SECURITY_KEY,
},
manhuagui: {
cookie: envs.MHGUI_COOKIE,
},
mastodon: {
apiHost: envs.MASTODON_API_HOST,
accessToken: envs.MASTODON_API_ACCESS_TOKEN,
acctDomain: envs.MASTODON_API_ACCT_DOMAIN,
},
medium: {
cookies: medium_cookies,
articleCookie: envs.MEDIUM_ARTICLE_COOKIE || '',
},
miniflux: {
instance: envs.MINIFLUX_INSTANCE || 'https://reader.miniflux.app',
token: envs.MINIFLUX_TOKEN || '',
},
ncm: {
cookies: envs.NCM_COOKIES || '',
},
newrank: {
cookie: envs.NEWRANK_COOKIE,
},
nga: {
uid: envs.NGA_PASSPORT_UID,
cid: envs.NGA_PASSPORT_CID,
},
nhentai: {
username: envs.NHENTAI_USERNAME,
password: envs.NHENTAI_PASSWORD,
},
notion: {
key: envs.NOTION_TOKEN,
},
pianyuan: {
cookie: envs.PIANYUAN_COOKIE,
},
pixabay: {
key: envs.PIXABAY_KEY,
},
pixiv: {
refreshToken: envs.PIXIV_REFRESHTOKEN,
bypassCdn: envs.PIXIV_BYPASS_CDN && envs.PIXIV_BYPASS_CDN !== '0' && envs.PIXIV_BYPASS_CDN !== 'false',
bypassCdnHostname: envs.PIXIV_BYPASS_HOSTNAME || 'public-api.secure.pixiv.net',
bypassCdnDoh: envs.PIXIV_BYPASS_DOH || 'https://1.1.1.1/dns-query',
imgProxy: envs.PIXIV_IMG_PROXY || 'https://i.pixiv.re',
},
pkubbs: {
cookie: envs.PKUBBS_COOKIE,
},
saraba1st: {
cookie: envs.SARABA1ST_COOKIE,
},
sehuatang: {
cookie: envs.SEHUATANG_COOKIE,
},
scboy: {
token: envs.SCBOY_BBS_TOKEN,
},
scihub: {
host: envs.SCIHUB_HOST || 'https://sci-hub.se/',
},
spotify: {
clientId: envs.SPOTIFY_CLIENT_ID,
clientSecret: envs.SPOTIFY_CLIENT_SECRET,
refreshToken: envs.SPOTIFY_REFRESHTOKEN,
},
telegram: {
token: envs.TELEGRAM_TOKEN,
},
tophub: {
cookie: envs.TOPHUB_COOKIE,
},
twitter: {
oauthTokens: envs.TWITTER_OAUTH_TOKEN?.split(','),
oauthTokenSecrets: envs.TWITTER_OAUTH_TOKEN_SECRET?.split(','),
},
weibo: {
app_key: envs.WEIBO_APP_KEY,
app_secret: envs.WEIBO_APP_SECRET,
cookies: envs.WEIBO_COOKIES,
redirect_url: envs.WEIBO_REDIRECT_URL,
},
wenku8: {
cookie: envs.WENKU8_COOKIE,
},
wordpress: {
cdnUrl: envs.WORDPRESS_CDN,
},
xiaoyuzhou: {
device_id: envs.XIAOYUZHOU_ID,
refresh_token: envs.XIAOYUZHOU_TOKEN,
},
ximalaya: {
token: envs.XIMALAYA_TOKEN,
},
youtube: {
key: envs.YOUTUBE_KEY,
clientId: envs.YOUTUBE_CLIENT_ID,
clientSecret: envs.YOUTUBE_CLIENT_SECRET,
refreshToken: envs.YOUTUBE_REFRESH_TOKEN,
},
zhihu: {
cookies: envs.ZHIHU_COOKIES,
},
zodgame: {
cookie: envs.ZODGAME_COOKIE,
},
};
};
calculateValue();
if (envs.REMOTE_CONFIG) {
got.get(envs.REMOTE_CONFIG)
.then((response) => {
const data = JSON.parse(response.body);
if (data) {
envs = Object.assign(envs, data);
calculateValue();
require('@/utils/logger').info('Remote config loaded.');
}
})
.catch((error) => {
require('@/utils/logger').error('Remote config load failed.', error);
});
}
module.exports = {
set: (env) => {
envs = Object.assign(process.env, env);
calculateValue();
},
get value() {
return value;
},
};