require('dotenv').load(); var fs = require('fs') var app, express = require('express'); var http = require('http'); var https = require('https'); var bodyParser = require('body-parser') var cookieParser = require('cookie-parser') var path = require('path') var ejs = require('ejs') var multer = require('multer') var storage = multer.memoryStorage() var multer_upload = multer({ storage: storage }) var app, server var db = require("./db") var upload = require("./upload") var site = module.exports = {} site.init = function(){ app = express() app.use(bodyParser.json()) app.use(bodyParser.urlencoded({ extended: false })) app.use(express.query()) server = http.createServer(app).listen(process.env.PORT, function () { console.log('plop listening at http://5.k:%s', server.address().port) }) app.get("/p/get/random", function(req, res){ db.getRandom().then(function(img){ res.json(img) }) }) app.get("/p/list/", function(req, res){ limit = parseInt(req.params.limit) if (isNaN(limit)) limit = 20 else limit = Math.max(limit, 100) offset = parseInt(req.params.offset) if (isNaN(offset)) offset = 0 db.getIndex(limit, offset).then(function(img){ res.json(img) }) }) app.get("/p/get/", function(req, res){ db.getLatest().then(function(img){ res.json(img) }) }) app.get("/p/get/latest", function(req, res){ db.getLatest().then(function(img){ res.json(img) }) }) app.get("/p/get/:id/hotlink", function(req, res){ db.getImage(req.params.id).then(function(img){ res.redirect(img.url) }) }) app.get("/p/get/:id", function(req, res){ db.getImage(req.params.id).then(function(img){ res.json(img) }) }) app.post("/p/upload", multer_upload.single('image'), function(req, res){ upload.put("image", req.file, { unacceptable: function(err){ res.json({ error: err }) }, success: function(url){ db.createImage(url).then(function(image){ res.json(image) }) } }) }) /* shaderblaster / asciiblaster apis */ app.post("/cgi-bin/im/shader/upload", multer_upload.single('qqfile'), function(req, res){ var now = Math.floor(Date.now() / 1000) var filename = sanitize(req.body.filename) + '_' + now + '.' + upload.getExtension(req.file) var path = '/im/ab/' upload.put("shader", req.file, { filename, path, unacceptable: function(err){ res.json({ error: err }) }, success: function(url){ db.createShaderImage({ // date, name, dir, newfile, tag, remote_addr date: now, name: sanitize(req.body.username), dir: 'ab', newfile: filename, tag: sanitize(req.body.tag) || 'plop', remote_addr: req.ip || '127.0.0.1', }).then(function(image){ res.json({ success: true, size: req.file.size, url, }) }) } }) }) /* public urls last */ app.get("/p/:id", function(req, res){ res.sendFile("index.html", {root: './public'}) }) app.use('/p/', express.static(path.join(__dirname, '../public'))) } function sanitize (s){ return (s || "").replace(new RegExp("[^-_a-zA-Z0-9]", 'g'), "") }