Files
f0ckm/src/inc/routes/upload.mjs
2026-04-25 19:51:52 +02:00

53 lines
1.8 KiB
JavaScript

import lib from "../lib.mjs";
import db from "../sql.mjs";
import cfg from "../config.mjs";
import { getMinTags } from "../settings.mjs";
export default (router, tpl) => {
router.get(/^\/upload$/, lib.userauth, async (req, res) => {
let maxfilesize = cfg.main.maxfilesize;
if (req.session.admin || req.session.is_moderator) {
maxfilesize = Math.floor(maxfilesize * cfg.main.adminmultiplier);
}
const max_file_size = lib.formatSize(maxfilesize);
// Calculate uploads remaining (admins/mods are exempt)
let uploads_remaining = null;
if (!req.session.admin && !req.session.is_moderator) {
const twelveHoursAgo = ~~(Date.now() / 1000) - (12 * 3600);
const uploadCount = await db`
SELECT count(*) as count
FROM items
WHERE username = ${req.session.user}
AND stamp > ${twelveHoursAgo}
AND is_deleted = false
`;
uploads_remaining = Math.max(0, cfg.main.upload_limit - parseInt(uploadCount[0].count));
}
res.setHeader('Cache-Control', 'no-store, no-cache, must-revalidate, proxy-revalidate');
res.setHeader('Pragma', 'no-cache');
res.setHeader('Expires', '0');
res.setHeader('Surrogate-Control', 'no-store');
res.reply({
body: tpl.render('upload', {
tmp: null,
session: (req.session && req.session.user) ? { ...req.session } : false,
max_file_size: max_file_size,
min_tags: getMinTags(),
uploads_remaining: uploads_remaining,
allowed_mimes: Object.keys(cfg.mimes).join(','),
mimes_json: JSON.stringify(cfg.mimes),
web_url_upload: !!cfg.websrv.web_url_upload,
page_meta: {
title: 'upload',
description: 'Upload content to w0bm',
url: `https://${cfg.main.url.domain}/upload`
}
}, req)
});
});
return router;
};