53 lines
1.8 KiB
JavaScript
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;
|
|
};
|