import cfg from "../config.mjs"; import sql from "../sql.mjs"; import lib from "../lib.mjs"; import f0cklib from "./inc/f0cklib.mjs"; const auth = async (req, res, next) => { if(!req.session) return res.redirect("/login"); return next(); }; export default (router, tpl) => { router.get(/^\/?(?:\/tag\/(?.+?))?(?:\/user\/(?.+?)\/(?:f0cks|favs))?(?:\/(?image|audio|video))?(?:\/p\/(?\d+))?(?:\/(?\d+))?$/, async (req, res) => { const mode = req.params.itemid ? 'item' : 'index'; const data = await (req.params.itemid ? f0cklib.getf0ck : f0cklib.getf0cks)({ user: req.params.user, tag: req.params.tag, mime: req.params.mime, page: req.params.page, itemid: req.params.itemid, mode: req.session.mode }); if(!data.success) { return res.reply({ code: 404, body: tpl.render('error', { message: data.message, tmp: null }, req) }); } return res.reply({ body: tpl.render(mode, data, req) }); }); router.get(/^\/(about)$/, (req, res) => { res.reply({ body: tpl.render(req.url.split[0], { tmp: null }, req) }); }); router.get(/^\/mode\/(\d)/, auth, async (req, res) => { const mode = +req.url.split[1]; let referertmp = req.headers.referer; let referer = ""; if(referertmp.match(/f0ck\.me/)) referer = referertmp.split("/").slice(3).join("/"); if(cfg.allowedModes[mode]) { await sql("user_options") .insert({ user_id: req.session.id, mode: mode, theme: req.theme ?? "f0ck" }) .onConflict("user_id") .merge(); } res.redirect(`/${referer}`); }); router.get(/^\/ranking$/, async (req, res) => { try { const list = await sql('tags_assign') .select('user.user', sql.raw('count(distinct tag_id, item_id) count')) .leftJoin('user', 'user.id', 'tags_assign.user_id') .groupBy('user.user') .orderBy('count', 'desc'); const stats = await lib.countf0cks(); res.reply({ body: tpl.render('ranking', { list, stats, tmp: null }, req) }); } catch(err) { res.end(JSON.stringify(err.message)); } }); return router; };