forked from f0ck/f0ckv2
83 lines
2.3 KiB
JavaScript
83 lines
2.3 KiB
JavaScript
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\/(?<tag>.+?))?(?:\/user\/(?<user>.+?)\/(?:f0cks|favs))?(?:\/(?<mime>image|audio|video))?(?:\/p\/(?<page>\d+))?(?:\/(?<itemid>\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;
|
|
};
|