random overhaul
This commit is contained in:
@@ -1,33 +1,36 @@
|
||||
import sql from "../sql.mjs";
|
||||
import lib from "../lib.mjs";
|
||||
|
||||
const allowedMimes = [ "audio", "image", "video" ];
|
||||
import f0cklib from "./inc/f0cklib.mjs";
|
||||
|
||||
export default (router, tpl) => {
|
||||
router.get(/^\/random\/?(?:user\/(?<user>[a-zA-Z0-9\[\]\-\_\{\}\\`\|]+))?(?:\/(?<mime>image|audio|video))?$/, async (req, res) => {
|
||||
const user = req.params.user ?? null;
|
||||
const mime = (req.params.mime ?? "");
|
||||
const smime = allowedMimes.includes(mime) ? mime + "/%" : mime === "" ? "%" : "%";
|
||||
router.get(/^\/random$/, async (req, res) => {
|
||||
let referer = req.headers.referer;
|
||||
let opts = {};
|
||||
|
||||
const modequery = mime == "audio" ? lib.getMode(0) : lib.getMode(req.session.mode ?? 0);
|
||||
if(referer.match(/f0ck\.me/)) { // parse referer
|
||||
referer = referer.split("f0ck.me")[1];
|
||||
const tmp = referer.match(/^\/?(?:\/tag\/(?<tag>.+?))?(?:\/user\/(?<user>.+?)\/(?:f0cks|favs))?(?:\/(?<mime>image|audio|video))?(?:\/p\/(?<page>\d+))?(?:\/(?<itemid>\d+))?$/);
|
||||
if(tmp)
|
||||
opts = tmp.groups;
|
||||
}
|
||||
|
||||
if(user && (await sql("items").where("username", "like", user).count("* as total"))[0].total === 0)
|
||||
return res.end("200 - user not found lol");
|
||||
const data = await f0cklib.getRandom({
|
||||
user: opts.user,
|
||||
tag: opts.tag,
|
||||
mime: opts.mime,
|
||||
page: opts.page,
|
||||
mode: req.session.mode
|
||||
});
|
||||
|
||||
const rows = await sql("items")
|
||||
.select("id")
|
||||
.whereRaw(modequery)
|
||||
.andWhere("mime", "like", smime)
|
||||
.andWhere("username", "like", user ? user : "%")
|
||||
.orderByRaw("rand()")
|
||||
.limit(1);
|
||||
|
||||
if(rows.length === 0)
|
||||
return res.end("nope");
|
||||
if(!data.success) {
|
||||
return res.reply({
|
||||
code: 404,
|
||||
body: tpl.render('error', {
|
||||
message: data.message,
|
||||
tmp: null
|
||||
}, req)
|
||||
});
|
||||
}
|
||||
|
||||
const link = lib.genLink({ user, mime });
|
||||
|
||||
res.redirect(`/${link}${link.length != 0 ? "/": ""}${rows[0].id}`);
|
||||
res.redirect(`/${data.link}${data.link.length != 0 ? "/" : ""}${data.itemid}`);
|
||||
});
|
||||
return router;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user