import router from "../router.mjs"; import cfg from "../../../config.json"; import fs from "fs"; import sql from "../sql.mjs"; import swig from "swig"; import url from "url"; const templates = { contact: fs.readFileSync("./views/contact.html", "utf-8"), help: fs.readFileSync("./views/help.html", "utf-8"), how: fs.readFileSync("./views/how.html", "utf-8"), index: fs.readFileSync("./views/index.html", "utf-8"), item: fs.readFileSync("./views/item.html", "utf-8") }; router.get("/", async (req, res) => { const query = await sql.query("select id, mime from items order by id desc limit 300"); const data = { items: query, last: query[query.length - 1].id }; res.reply({ body: swig.compile(templates.index)(data) }); }); router.get(/^\/([0-9]+)$/, async (req, res) => { const q = "select * from items where id = ? limit 1; " // get item + "select id from items where id = (select min(id) from items where id > ?); " // get previous item + "select id from items where id = (select max(id) from items where id < ?)"; // get next item const query = await sql.query(q, [req.url.split[0], req.url.split[0], req.url.split[0]]); const data = { id: '', username: '', item: '', src: '', dest: '', mime: '', size: '', userchannel: '', usernetwork: '', thumb: null, thumbnail: null, next: null, prev: null }; if(query[0][0]) { const e = query[0][0]; switch(e.mime) { case "image/png": case "image/jpeg": case "image/gif": data.item = "image"; break; case "video/webm": case "video/mp4": case "video/quicktime": data.item = "video"; break; case "audio/mpeg": case "audio/ogg": case "audio/flac": case "audio/x-flac": data.item = "audio"; break; } data.id = e.id; data.username = e.username; data.srcurl = e.src; data.src = url.parse(e.src).hostname; data.thumb = `${cfg.websrv.paths.thumbnails}/${e.id}.png`; data.dest = `${cfg.websrv.paths.images}/${e.dest}`; data.mime = e.mime; data.size = e.size;//lib.formatSize(e.size); data.userchannel = e.userchannel; data.usernetwork = e.usernetwork; data.timestamp = new Date(e.stamp * 1000).toISOString(); if(query[1].length) data.next = query[1][0].id; if(query[2].length) data.prev = query[2][0].id; } res.reply({ body: swig.compile(templates.item)(data) }); }); router.get(/^\/(contact|help|how)$/, (req, res) => { res.reply({ body: templates[req.url.split[0]] }); }); router.get("/random", async (req, res) => { res .writeHead(301, { "Cache-Control": "no-cache, public", "Location": "/" + (await sql.query("select id from items order by rand() limit 1"))[0].id }) .end(); });