2020-04-02 04:35:28 +02:00
|
|
|
import router from "../router.mjs";
|
|
|
|
import cfg from "../../../config.json";
|
2019-04-25 19:25:38 +00:00
|
|
|
import fs from "fs";
|
2020-04-02 04:35:28 +02:00
|
|
|
import sql from "../sql.mjs";
|
|
|
|
import swig from "swig";
|
|
|
|
import url from "url";
|
2019-04-25 18:00:47 +00:00
|
|
|
|
2020-04-02 04:35:28 +02:00
|
|
|
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")
|
|
|
|
};
|
2019-04-25 19:25:38 +00:00
|
|
|
|
2020-04-02 04:35:28 +02:00
|
|
|
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[0].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) => {
|
2019-05-15 17:51:11 +00:00
|
|
|
res
|
2020-04-02 04:35:28 +02:00
|
|
|
.writeHead(301, {
|
|
|
|
"Cache-Control": "no-cache, public",
|
|
|
|
"Location": "/" + (await sql.query("select id from items order by rand() limit 1"))[0].id
|
|
|
|
})
|
|
|
|
.end();
|
2019-04-25 18:00:47 +00:00
|
|
|
});
|