48 lines
1.8 KiB
JavaScript
48 lines
1.8 KiB
JavaScript
import express from "express";
|
|
|
|
import highlight from "highlight.js";
|
|
import db from "../../lib/sql";
|
|
|
|
const queries = {
|
|
all: "select p.id, p.uuid, p.stamp, p.desc, p.paste, l.name as language, r.uuid as reply from `pastes` as p "
|
|
+ "left join `languages` as l on l.id = p.lang "
|
|
+ "left join `pastes` as r on r.id = p.reply "
|
|
+ "order by p.id desc limit 5",
|
|
single: "select p.id, p.uuid, p.stamp, p.desc, p.paste, l.name as language, r.uuid as reply from `pastes` as p "
|
|
+ "left join `languages` as l on l.id = p.lang "
|
|
+ "left join `pastes` as r on r.id = p.reply "
|
|
+ "where p.uuid = ? limit 1"
|
|
};
|
|
|
|
export default express.Router()
|
|
.get("/", (req, res) => {
|
|
db.exec(queries.all)
|
|
.then(rows => {
|
|
res.render("view", { pastes: rows.map(r => {
|
|
const paste = new Buffer(r.paste, "base64").toString("ascii");
|
|
return {
|
|
uuid: r.uuid,
|
|
paste: highlight.highlightAuto(paste).value,
|
|
language: r.language,
|
|
desc: r.reply ? `Reply to <a href="/${r.reply}/" class="descID">/${r.reply}/</a>` : "No description.",
|
|
rows: paste.split(/\r?\n/).length
|
|
};
|
|
})});
|
|
}).catch(err => res.render("view"));
|
|
})
|
|
.get("/:uuid", (req, res) => {
|
|
if(req.params.uuid.length !== 8)
|
|
return res.send("error");
|
|
db.exec(queries.single, [req.params.uuid])
|
|
.then(rows => {
|
|
const r = rows[0];
|
|
const paste = new Buffer(r.paste, "base64").toString("ascii");
|
|
res.render("viewsingle", { paste: {
|
|
uuid: r.uuid,
|
|
paste: highlight.highlightAuto(paste).value,
|
|
language: r.lang,
|
|
desc: r.desc,
|
|
rows: paste.split(/\r?\n/).length
|
|
}});
|
|
}).catch(err => res.send("paste not found"));
|
|
}); |