diff --git a/app.js b/app.js index ec9779f..dcee514 100644 --- a/app.js +++ b/app.js @@ -18,6 +18,7 @@ const app = express(); // view engine setup app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'ejs'); +app.set('trust proxy', true) app.use(logger('dev')); app.use(express.json()); diff --git a/routes/airportsub.js b/routes/airportsub.js index acf9ea0..0b3c788 100644 --- a/routes/airportsub.js +++ b/routes/airportsub.js @@ -6,6 +6,7 @@ const cookie = require('cookie'); const {filesize} = require('filesize'); const moment = require('moment'); const axios = require('axios'); +const leancloud = require('../utils/leancloud') function getscheme(req) { return req.headers['x-forwarded-proto'] || req.protocol; @@ -45,6 +46,12 @@ async function updateDatabase() { // TODO TG代理 日志生成 router.get('/', async function (req, res, next) { const database = await updateDatabase(); + leancloud.add('SubAccess',{ + ip: req.ip, + ua: req.headers['user-agent'], + user: req.query.user, + ctype: req.query.ctype + }) if (req.query.user) { const userinfo = database.user[req.query.user] if (userinfo) { diff --git a/routes/api/tencentvideo.js b/routes/api/tencentvideo.js index d4d8213..11818ae 100644 --- a/routes/api/tencentvideo.js +++ b/routes/api/tencentvideo.js @@ -26,6 +26,7 @@ function Tencentvideo() { } console.log('vid:', vid) let res = await axios.get(url); + //TODO 腾讯视频标题获取 const $ = whacko.load(res.data, null, false); this.title = $("title")[0].children[0].data; try { diff --git a/routes/danmaku.js b/routes/danmaku.js index 4a3d5e3..e326ef3 100644 --- a/routes/danmaku.js +++ b/routes/danmaku.js @@ -10,14 +10,7 @@ function getscheme(req) { return req.headers['x-forwarded-proto'] || req.protocol; } -function getClientIp(req) { - return req.headers['x-forwarded-for'] || - req.connection.remoteAddress || - req.socket.remoteAddress || - req.connection.socket.remoteAddress; -} - -async function build_response(url,req) { +async function build_response(url, req) { try { await axios.get(url) } catch (e) { @@ -38,7 +31,9 @@ async function build_response(url,req) { ret = await fc.work(url) } catch (e) { console.log(e) - leancloud.danmakuErrorAdd({ip: getClientIp(req), url: url, err: e}) + let err = JSON.stringify(e, Object.getOwnPropertyNames(e)) + err = JSON.parse(err) + leancloud.add('DanmakuError', {ip: req.ip, url, err}) return {msg: '弹幕解析过程中程序报错退出,请等待管理员修复!或者换条链接试试!'} } return ret @@ -46,7 +41,7 @@ async function build_response(url,req) { /* GET home page. */ router.get('/', async function (req, res, next) { - leancloud.danmakuAccessAdd({ip: getClientIp(req), url: req.query.url, ua: req.headers['user-agent']}) + leancloud.add('DanmakuAccess', {remoteIP: req.ip, url: req.query.url, UA: req.headers['user-agent']}) //检查是否包含URL参数 if (!req.query.url) { const urls = [mgtv.example_urls[0], bilibili.example_urls[0], tencentvideo.example_urls[0], youku.example_urls[0], iqiyi.example_urls[0]]; @@ -55,7 +50,7 @@ router.get('/', async function (req, res, next) { } else { const url = req.query.url; const download = (req.query.download === 'on'); - const ret = await build_response(url,req) + const ret = await build_response(url, req) memory() //显示内存使用量 if (ret.msg !== 'ok') { res.status(403).send(ret.msg) diff --git a/routes/ipinfo.js b/routes/ipinfo.js index 640c4c9..2cadb1b 100644 --- a/routes/ipinfo.js +++ b/routes/ipinfo.js @@ -4,16 +4,9 @@ const libqqwry = require('lib-qqwry'); const dns = require('dns'); const qqwry = libqqwry(); //初始化IP库解析器 -function getClientIp(req) { - return req.headers['x-forwarded-for'] || - req.connection.remoteAddress || - req.socket.remoteAddress || - req.connection.socket.remoteAddress; -} - /* GET home page. */ router.get('/', function (req, res, next) { - let ip = req.query.name || getClientIp(req); + let ip = req.query.name || req.ip; dns.lookup(ip, (err, address, family) => { let ipL; if (err) { diff --git a/utils/leancloud.js b/utils/leancloud.js index e92b989..bf8e35a 100644 --- a/utils/leancloud.js +++ b/utils/leancloud.js @@ -9,17 +9,6 @@ AV.init({ serverURL: "https://dbvunek8.lc-cn-e1-shared.com" }); - -function danmakuAccessAdd(obj) { - const {ip, url, ua} = obj; - const DanmakuAccessObject = AV.Object.extend('DanmakuAccess'); - const record = new DanmakuAccessObject(); - record.set('remoteIP', ip); - record.set('url', url); - record.set('UA', ua); - record.save().then() -} - function currentDay() { const date = new Date(); const start = new Date(date.setHours(0, 0, 0, 0)) @@ -50,20 +39,21 @@ async function danmakuQuery(date) { return await query.count() } -function danmakuErrorAdd(obj) { - let {ip, url, err} = obj; - const DanmakuErrorObject = AV.Object.extend('DanmakuError'); - const record = new DanmakuErrorObject(); - record.set('remoteIP', ip); - record.set('url', url); - //TODO: 转换成object - err = JSON.stringify(err, Object.getOwnPropertyNames(err)) - err = JSON.parse(err) - record.set('err', err); - record.save().then() +//TODO 订阅access.log +function add(className,obj) { + const classInstance = AV.Object.extend(className); + const record = new classInstance(); + for (const key of Object.keys(obj)){ + record.set(key, obj[key]); + } + record.save().then((obj) => { + // 成功保存之后,执行其他逻辑 + console.log(`${className}添加一条记录。objectId:${obj.id}`); + }); } -module.exports = {danmakuAccessAdd, danmakuQuery, currentDay, currentMonth, lastDay, danmakuErrorAdd}; +module.exports = {danmakuQuery, currentDay, currentMonth, lastDay, add}; if (!module.parent) { + }