From 99b5eca925d2f78bc427e584f677ff89a7ef7db1 Mon Sep 17 00:00:00 2001 From: DIYgod Date: Tue, 4 Jul 2017 23:14:27 +0800 Subject: [PATCH] move back-end to DPlayer-backend --- README.md | 4 +- nodejs/Dockerfile | 4 - nodejs/blacklist | 3 - nodejs/index.js | 14 ---- nodejs/logs/.gitkeep | 0 nodejs/models/danmaku.js | 16 ---- nodejs/package.json | 19 ----- nodejs/routes/all.js | 17 ---- nodejs/routes/bilibili.js | 134 -------------------------------- nodejs/routes/get.js | 43 ---------- nodejs/routes/list.js | 17 ---- nodejs/routes/post.js | 118 ---------------------------- nodejs/routes/video-bilibili.js | 74 ------------------ nodejs/tools/logger.js | 20 ----- nodejs/tools/mongodb.js | 11 --- nodejs/tools/redis.js | 27 ------- 16 files changed, 3 insertions(+), 518 deletions(-) delete mode 100644 nodejs/Dockerfile delete mode 100644 nodejs/blacklist delete mode 100644 nodejs/index.js delete mode 100644 nodejs/logs/.gitkeep delete mode 100644 nodejs/models/danmaku.js delete mode 100644 nodejs/package.json delete mode 100644 nodejs/routes/all.js delete mode 100644 nodejs/routes/bilibili.js delete mode 100644 nodejs/routes/get.js delete mode 100644 nodejs/routes/list.js delete mode 100644 nodejs/routes/post.js delete mode 100644 nodejs/routes/video-bilibili.js delete mode 100644 nodejs/tools/logger.js delete mode 100644 nodejs/tools/mongodb.js delete mode 100644 nodejs/tools/redis.js diff --git a/README.md b/README.md index 212a66b..c5a71b1 100644 --- a/README.md +++ b/README.md @@ -78,7 +78,9 @@ $ npm run build ## Related Projects -- [Official danmaku data (https://api.prprpr.me/dplayer/)](https://github.com/DIYgod/DPlayer-data) +- [DPlayer-backend](https://github.com/DIYgod/DPlayer-backend) + +- [DPlayer-data(weekly backup for api.prprpr.me/dplayer)](https://github.com/DIYgod/DPlayer-data) - [DPlayer-for-typecho](https://github.com/volio/DPlayer-for-typecho) diff --git a/nodejs/Dockerfile b/nodejs/Dockerfile deleted file mode 100644 index ddf5a09..0000000 --- a/nodejs/Dockerfile +++ /dev/null @@ -1,4 +0,0 @@ -FROM node:4.4-onbuild -EXPOSE 1207 -RUN npm install -g forever -ENTRYPOINT forever --spinSleepTime 1000 --minUptime 1000 index.js \ No newline at end of file diff --git a/nodejs/blacklist b/nodejs/blacklist deleted file mode 100644 index 1d38074..0000000 --- a/nodejs/blacklist +++ /dev/null @@ -1,3 +0,0 @@ -Can be username and IP -username -0.0.0.0 \ No newline at end of file diff --git a/nodejs/index.js b/nodejs/index.js deleted file mode 100644 index 7c010f0..0000000 --- a/nodejs/index.js +++ /dev/null @@ -1,14 +0,0 @@ -var express = require('express'); -var logger = require('./tools/logger'); -require('./tools/mongodb'); - -logger.info(`🍻 DPlayer start! Cheers!`); - -var app = express(); -app.all('*', require('./routes/all')); -app.get('/', require('./routes/get')); -app.post('/', require('./routes/post')); -app.get('/list', require('./routes/list')); -app.get('/bilibili', require('./routes/bilibili')); -app.get('/video/bilibili', require('./routes/video-bilibili')); -app.listen(1207); \ No newline at end of file diff --git a/nodejs/logs/.gitkeep b/nodejs/logs/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/nodejs/models/danmaku.js b/nodejs/models/danmaku.js deleted file mode 100644 index 6b0512b..0000000 --- a/nodejs/models/danmaku.js +++ /dev/null @@ -1,16 +0,0 @@ -var mongoose = require('../tools/mongodb'); -var danmakuSchema = new mongoose.Schema({ - player: { - type: [String], index: true - }, - author: String, - time: Number, - text: String, - color: String, - type: String, - ip: String, - referer: String -}); -var danmaku = mongoose.model('dan', danmakuSchema); - -module.exports = danmaku; \ No newline at end of file diff --git a/nodejs/package.json b/nodejs/package.json deleted file mode 100644 index 1cd933b..0000000 --- a/nodejs/package.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "DPlayer_nodejs", - "version": "0.0.1", - "description": "", - "main": "index.js", - "author": "DIYgod", - "license": "MIT", - "devDependencies": {}, - "dependencies": { - "blueimp-md5": "^2.4.0", - "express": "^4.13.4", - "http-proxy-agent": "^1.0.0", - "log4js": "^0.6.36", - "mongoose": "^4.1.9", - "node-fetch": "^1.6.3", - "redis": "^2.6.2", - "xml2js": "^0.4.17" - } -} diff --git a/nodejs/routes/all.js b/nodejs/routes/all.js deleted file mode 100644 index 14f97bd..0000000 --- a/nodejs/routes/all.js +++ /dev/null @@ -1,17 +0,0 @@ -var https = require('https'); - -module.exports = function (req, res, next) { - https.get(`https://api.prprpr.me/count/?id=DIYgod-DPlayer&action=add`); - - res.header('Access-Control-Allow-Origin', '*'); - res.header('Access-Control-Allow-Headers', 'Content-Type, Content-Length, Authorization, Accept, X-Requested-With , yourHeaderFeild'); - res.header('Access-Control-Allow-Methods', 'PUT, POST, GET, DELETE, OPTIONS'); - res.header('Cache-control', 'no-cache'); - - if (req.method == 'OPTIONS') { - res.send(200); - } - else { - next(); - } -}; \ No newline at end of file diff --git a/nodejs/routes/bilibili.js b/nodejs/routes/bilibili.js deleted file mode 100644 index 296290d..0000000 --- a/nodejs/routes/bilibili.js +++ /dev/null @@ -1,134 +0,0 @@ -var url = require('url'); -var logger = require('../tools/logger'); -var redis = require('../tools/redis'); -var fetch = require('node-fetch'); -var parseString = require('xml2js').parseString; - -module.exports = function (req, res) { - res.header('content-type', 'application/json; charset=utf-8'); - - var ip = req.headers['x-forwarded-for'] || - req.connection.remoteAddress || - req.socket.remoteAddress || - req.connection.socket.remoteAddress; - - var query = url.parse(req.url,true).query; - var aid = query.aid; - var cid = query.cid; - - function addZero(str, length){ - return new Array(Math.max(length - str.length + 1, 0)).join("0") + str; - } - - if (cid) { - redis.client.get(`bilibilicid2dan${cid}`, function(err, reply) { - if (reply) { - logger.info(`Bilibili cid2dan ${cid} form redis, IP: ${ip}`); - res.send(reply); - } - else { - logger.info(`Bilibili cid2dan ${cid} form origin, IP: ${ip}`); - - var dan = { - code: 1, - danmaku: [] - }; - - fetch(`http://comment.bilibili.com/${cid}.xml`).then( - response => response.text() - ).then((data) => { - parseString(data, function (err, result) { - var danOriginal = result.i.d; - for (var i = 0; i < danOriginal.length; i++) { - var info = danOriginal[i].$.p.split(','); - var type = ''; - if (info[1] === '4') { - type = 'bottom'; - } - else if (info[1] === '5') { - type = 'top'; - } - else { - type = 'right'; - } - var danOne = { - author: 'bilibili' + info[6], - time: info[0], - text: danOriginal[i]._, - color: '#' + addZero(parseInt(info[3]).toString(16), 6), - type: type - }; - dan.danmaku.push(danOne); - } - var sendDan = JSON.stringify(dan); - res.send(sendDan); - - redis.set(`bilibilicid2dan${cid}`, sendDan); - }); - } - ).catch( - e => logger.error("Bilibilib Error: getting danmaku", e) - ); - } - }); - } - else { - redis.client.get(`bilibiliaid2dan${aid}`, function(err, reply) { - if (reply) { - logger.info(`Bilibili aid2dan ${aid} form redis, IP: ${ip}`); - res.send(reply); - } - else { - logger.info(`Bilibili aid2dan ${aid} form origin, IP: ${ip}`); - - var dan = { - code: 1, - danmaku: [] - }; - - fetch(`http://www.bilibili.com/widget/getPageList?aid=${aid}`).then( - response => response.json() - ).then((data) => { - fetch(`http://comment.bilibili.com/${data[0].cid}.xml`).then( - response => response.text() - ).then((data) => { - parseString(data, function (err, result) { - var danOriginal = result.i.d; - for (var i = 0; i < danOriginal.length; i++) { - var info = danOriginal[i].$.p.split(','); - var type = ''; - if (info[1] === '4') { - type = 'bottom'; - } - else if (info[1] === '5') { - type = 'top'; - } - else { - type = 'right'; - } - var danOne = { - author: 'bilibili' + info[6], - time: info[0], - text: danOriginal[i]._, - color: '#' + addZero(parseInt(info[3]).toString(16), 6), - type: type - }; - dan.danmaku.push(danOne); - } - var sendDan = JSON.stringify(dan); - res.send(sendDan); - - redis.set(`bilibiliaid2dan${aid}`, sendDan); - }); - } - ).catch( - e => logger.error("Bilibilib Error: getting danmaku", e) - ); - } - ).catch( - e => logger.error("Bilibilib Error: getting cid", e) - ); - } - }); - } -}; \ No newline at end of file diff --git a/nodejs/routes/get.js b/nodejs/routes/get.js deleted file mode 100644 index 7b1160b..0000000 --- a/nodejs/routes/get.js +++ /dev/null @@ -1,43 +0,0 @@ -var url = require('url'); -var logger = require('../tools/logger'); -var danmaku = require('../models/danmaku'); -var redis = require('../tools/redis'); - -module.exports = function (req, res) { - res.header('content-type', 'application/json; charset=utf-8'); - - var ip = req.headers['x-forwarded-for'] || - req.connection.remoteAddress || - req.socket.remoteAddress || - req.connection.socket.remoteAddress; - - var query = url.parse(req.url,true).query; - var id = query.id; - var max = query.max; - - redis.client.get(`dplayer${id}`, function(err, reply) { - if (reply) { - logger.info(`DPlayer id ${id} form redis, IP: ${ip}`); - res.send(reply); - } - else { - logger.info(`DPlayer id ${id} form mongodb, IP: ${ip}`); - - danmaku.find({player: id}, function (err, data) { - if (err) { - logger.error(err); - } - - var dan = { - code: 1, - danmaku: [] - }; - dan.danmaku = max ? data.slice(0, max) : data; - var sendDan = JSON.stringify(dan); - res.send(sendDan); - - redis.set(`dplayer${id}`, sendDan); - }) - } - }); -}; \ No newline at end of file diff --git a/nodejs/routes/list.js b/nodejs/routes/list.js deleted file mode 100644 index 1f4146e..0000000 --- a/nodejs/routes/list.js +++ /dev/null @@ -1,17 +0,0 @@ -var url = require('url'); -var logger = require('../tools/logger'); -var danmaku = require('../models/danmaku'); - -module.exports = function (req, res) { - danmaku.distinct('player', function (err, data) { - if (err) { - logger.error(err); - } - - var json = ``; - for (var i = 0; i < data.length; i++) { - json += data[i] + `
`; - } - res.send(json); - }) -}; \ No newline at end of file diff --git a/nodejs/routes/post.js b/nodejs/routes/post.js deleted file mode 100644 index dd3dd8f..0000000 --- a/nodejs/routes/post.js +++ /dev/null @@ -1,118 +0,0 @@ -var fs = require('fs'); -var logger = require('../tools/logger'); -var danmaku = require('../models/danmaku'); -var redis = require('../tools/redis'); - -function htmlEncode(str) { - return str.replace(/&/g, "&") - .replace(//g, ">") - .replace(/"/g, """) - .replace(/'/g, "'") - .replace(/\//g, "/"); -} - -var postIP = []; - -module.exports = function (req, res) { - var body = ''; - var jsonStr = {}; - var ip = req.headers['x-forwarded-for'] || - req.connection.remoteAddress || - req.socket.remoteAddress || - req.connection.socket.remoteAddress; - - // check black ip - var blanklist = fs.readFileSync('blacklist').toString().split('\n'); - if (blanklist.indexOf(ip.split(',')[0]) !== -1) { - logger.info(`Reject POST form ${ip} for black ip.`); - res.send(`{"code": -1, "msg": "Rejected for black ip."}`); - return; - } - - // frequency limitation - if (postIP.indexOf(ip) !== -1) { - logger.info(`Reject POST form ${ip} for frequent operation.`); - res.send(`{"code": -2, "msg": "Rejected for frequent operation."}`); - return; - } - else { - postIP.push(ip); - setTimeout(function () { - postIP.splice(0, 1); - }, 1000); - } - - req.on('data', dataListener); - req.on('end', endListener); - - function dataListener (chunk) { - body += chunk; - } - function endListener () { - cleanListener(); - try { - jsonStr = JSON.parse(body); - } catch (err) { - jsonStr = {}; - } - - // check data - if (jsonStr.player === undefined - || jsonStr.author === undefined - || jsonStr.time === undefined - || jsonStr.text === undefined - || jsonStr.color === undefined - || jsonStr.type === undefined - || jsonStr.text.length >= 30) { - logger.info(`Reject POST form ${ip} for illegal data: ${JSON.stringify(jsonStr)}`); - res.send(`{"code": -3, "msg": "Rejected for illegal data"}`); - return; - } - - // check token: set it yourself - function checkToken (token) { - return true; - } - if (!checkToken(jsonStr.token)) { - logger.info(`Rejected POST form ${ip} for illegal token: ${jsonStr.token}`); - res.send(`{"code": -4, "msg": "Rejected for illegal token: ${jsonStr.token}"}`); - return; - } - - // check black username - if (blanklist.indexOf(jsonStr.author) !== -1) { - logger.info(`Reject POST form ${jsonStr.author} for black user.`); - res.send(`{"code": -5, "msg": "Rejected for black user."}`); - return; - } - - logger.info(`POST form ${ip}, data: ${JSON.stringify(jsonStr)}`); - - var dan = new danmaku({ - player: htmlEncode(jsonStr.player), - author: htmlEncode(jsonStr.author), - time: jsonStr.time, - text: htmlEncode(jsonStr.text), - color: htmlEncode(jsonStr.color), - type: htmlEncode(jsonStr.type), - ip: ip, - referer: req.headers.referer - }); - dan.save(function (err, d) { - if (err) { - logger.error(err); - res.send(`{"code": 0, "msg": "Error happens, please contact system administrator."}`); - } - else { - res.send(`{"code": 1, "data": ${JSON.stringify(d)}}`); - redis.client.del(`dplayer${htmlEncode(jsonStr.player)}`); - } - }); - } - - function cleanListener () { - req.removeListener('data', dataListener); - req.removeListener('end', endListener); - } -}; \ No newline at end of file diff --git a/nodejs/routes/video-bilibili.js b/nodejs/routes/video-bilibili.js deleted file mode 100644 index 2f1945e..0000000 --- a/nodejs/routes/video-bilibili.js +++ /dev/null @@ -1,74 +0,0 @@ -var url = require('url'); -var logger = require('../tools/logger'); -var redis = require('../tools/redis'); -var fetch = require('node-fetch'); -var md5 = require('blueimp-md5'); -var xml2js = require('xml2js'); -var HttpProxyAgent = require('http-proxy-agent'); -var parseString = xml2js.parseString; - -var appkey = 'f3bb208b3d081dc8'; -var secret = '1c15888dc316e05a15fdd0a02ed6584f'; -function getData(cid, res, type) { - var para = `cid=${cid}&from=miniplay&player=1&quality=2&type=mp4`; - var sign = md5(`${para}${secret}`); - var api = `http://interface.bilibili.com/playurl?${para}&sign=${sign}`; - - if (type === '1') { - res.send(api); - } - else { - fetch(api, { - headers: {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.75 Safari/537.36'}, - // agent: new HttpProxyAgent('http://183.61.236.54:3128/') - }).then( - response => response.text() - ).then((data) => { - parseString(data, { explicitArray: false }, function (err, result) { - // res.send(result.video.durl.url.replace('http://', 'https://')); - res.redirect(301, result.video.durl.url.replace('http://', 'https://')); - }); - } - ).catch( - e => logger.error("Bilibilib Error: getting data", e) - ); - } -} - -module.exports = function (req, res) { - var ip = req.headers['x-forwarded-for'] || - req.connection.remoteAddress || - req.socket.remoteAddress || - req.connection.socket.remoteAddress; - - var query = url.parse(req.url,true).query; - var aid = query.aid; - var cid = query.cid; - var type = query.type; - - if (cid) { - logger.info(`Bilibili cid2video ${cid}, IP: ${ip}`); - getData(cid, res, type); - } - else { - redis.client.get(`bilibiliaid2cid${aid}`, function(err, reply) { - if (reply) { - logger.info(`Bilibili aid2video ${aid} form redis, IP: ${ip}`); - getData(reply, res, type); - } - else { - logger.info(`Bilibili aid2video ${aid} form origin, IP: ${ip}`); - - fetch(`http://www.bilibili.com/widget/getPageList?aid=${aid}`).then( - response => response.json() - ).then((data) => { - redis.set(`bilibiliaid2cid${aid}`, data[0].cid); - getData(data[0].cid, res, type); - } - ).catch( - e => logger.error("Bilibili aid2video Error: getting cid", e) - ); - } - }); - } -}; \ No newline at end of file diff --git a/nodejs/tools/logger.js b/nodejs/tools/logger.js deleted file mode 100644 index fb57c59..0000000 --- a/nodejs/tools/logger.js +++ /dev/null @@ -1,20 +0,0 @@ -var log4js = require('log4js'); -log4js.configure({ - appenders: [ - { - type: "file", - filename: 'logs/DPlayer.log', - maxLogSize: 20480, - backups: 3, - category: [ 'DPlayer','console' ] - }, - { - type: "console" - } - ], - replaceConsole: true -}); -var logger = log4js.getLogger('DPlayer'); -logger.setLevel('INFO'); - -module.exports = logger; \ No newline at end of file diff --git a/nodejs/tools/mongodb.js b/nodejs/tools/mongodb.js deleted file mode 100644 index f8d7056..0000000 --- a/nodejs/tools/mongodb.js +++ /dev/null @@ -1,11 +0,0 @@ -var mongoose = require('mongoose'); -var mongodbUrl; -if (process.env.MONGODB_USERNAME && process.env.MONGODB_PASSWORD && process.env.MONGODB_PORT_27017_TCP_ADDR && process.env.MONGODB_PORT_27017_TCP_PORT && process.env.MONGODB_INSTANCE_NAME) { - mongodbUrl = 'mongodb://' + process.env.MONGODB_USERNAME + ':' + process.env.MONGODB_PASSWORD + '@' + process.env.MONGODB_PORT_27017_TCP_ADDR + ':' + process.env.MONGODB_PORT_27017_TCP_PORT + '/' + process.env.MONGODB_INSTANCE_NAME; -} -else { - mongodbUrl = 'mongodb://127.0.0.1:27017/danmaku'; -} -mongoose.connect(mongodbUrl); - -module.exports = mongoose; \ No newline at end of file diff --git a/nodejs/tools/redis.js b/nodejs/tools/redis.js deleted file mode 100644 index 9a5e754..0000000 --- a/nodejs/tools/redis.js +++ /dev/null @@ -1,27 +0,0 @@ -var logger = require('./logger'); -var redis = require("redis"); -var client; -if (process.env.REDIS_PORT_6379_TCP_ADDR && process.env.REDIS_PORT_6379_TCP_PORT && process.env.REDIS_PASSWORD) { - client = redis.createClient({ - host: process.env.REDIS_PORT_6379_TCP_ADDR, - port: process.env.REDIS_PORT_6379_TCP_PORT, - password: process.env.REDIS_PASSWORD - }); -} -else { - client = redis.createClient(); -} - - -client.on("error", function (err) { - logger.error('Redis Error ' + err); -}); - -module.exports = { - set: function (key, value) { - client.set(key, value, redis.print); - client.expire(key, 86400); - logger.info('Set redis: ' + key); - }, - client: client -}; \ No newline at end of file