playing golf with file middleware helper. came out nice

indiachan-spamvector
Thomas Lynch 3 years ago
parent b122676a69
commit 163522f02c
  1. 8
      controllers/forms.js
  2. 141
      helpers/filemiddlewares.js

@ -54,9 +54,9 @@ const express = require('express')
, logout = require(__dirname+'/../models/forms/logout.js');
//make new post
router.post('/board/:board/post', geoAndTor, fileMiddlewares.handlePostFilesEarlyTor, torPreBypassCheck, processIp, useSession, sessionRefresh, Boards.exists, calcPerms, banCheck, fileMiddlewares.handlePostFiles,
router.post('/board/:board/post', geoAndTor, fileMiddlewares.postsEarly, torPreBypassCheck, processIp, useSession, sessionRefresh, Boards.exists, calcPerms, banCheck, fileMiddlewares.posts,
paramConverter, verifyCaptcha, numFiles, blockBypassCheck, dnsblCheck, imageHashes, makePostController);
router.post('/board/:board/modpost', geoAndTor, fileMiddlewares.handlePostFilesEarlyTor, torPreBypassCheck, processIp, useSession, sessionRefresh, Boards.exists, calcPerms, banCheck, isLoggedIn, hasPerms(3), fileMiddlewares.handlePostFiles,
router.post('/board/:board/modpost', geoAndTor, fileMiddlewares.postsEarly, torPreBypassCheck, processIp, useSession, sessionRefresh, Boards.exists, calcPerms, banCheck, isLoggedIn, hasPerms(3), fileMiddlewares.posts,
paramConverter, csrf, numFiles, blockBypassCheck, dnsblCheck, makePostController); //mod post has token instead of captcha
//post actions
@ -71,9 +71,9 @@ router.post('/editpost', geoAndTor, torPreBypassCheck, processIp, useSession, se
//board management forms
router.post('/board/:board/transfer', useSession, sessionRefresh, csrf, Boards.exists, calcPerms, isLoggedIn, hasPerms(2), paramConverter, transferController);
router.post('/board/:board/settings', useSession, sessionRefresh, csrf, Boards.exists, calcPerms, isLoggedIn, hasPerms(2), paramConverter, boardSettingsController);
router.post('/board/:board/addbanners', useSession, sessionRefresh, fileMiddlewares.handleBannerFiles, csrf, Boards.exists, calcPerms, isLoggedIn, hasPerms(2), paramConverter, numFiles, uploadBannersController); //add banners
router.post('/board/:board/addbanners', useSession, sessionRefresh, fileMiddlewares.banner, csrf, Boards.exists, calcPerms, isLoggedIn, hasPerms(2), paramConverter, numFiles, uploadBannersController); //add banners
router.post('/board/:board/deletebanners', useSession, sessionRefresh, csrf, Boards.exists, calcPerms, isLoggedIn, hasPerms(2), paramConverter, deleteBannersController); //delete banners
router.post('/board/:board/addflags', useSession, sessionRefresh, fileMiddlewares.handleFlagFiles, csrf, Boards.exists, calcPerms, isLoggedIn, hasPerms(2), paramConverter, numFiles, addFlagsController); //add flags
router.post('/board/:board/addflags', useSession, sessionRefresh, fileMiddlewares.flag, csrf, Boards.exists, calcPerms, isLoggedIn, hasPerms(2), paramConverter, numFiles, addFlagsController); //add flags
router.post('/board/:board/deleteflags', useSession, sessionRefresh, csrf, Boards.exists, calcPerms, isLoggedIn, hasPerms(2), paramConverter, deleteFlagsController); //delete flags
router.post('/board/:board/addcustompages', useSession, sessionRefresh, csrf, Boards.exists, calcPerms, isLoggedIn, hasPerms(2), paramConverter, addCustomPageController); //add banners
router.post('/board/:board/deletecustompages', useSession, sessionRefresh, csrf, Boards.exists, calcPerms, isLoggedIn, hasPerms(2), paramConverter, deleteCustomPageController); //delete banners

@ -3,120 +3,67 @@
const { debugLogs } = require(__dirname+'/../configs/secrets.js')
, dynamicResponse = require(__dirname+'/dynamic.js')
, { addCallback } = require(__dirname+'/../redis.js')
, upload = require('express-fileupload');
let postFiles,
uploadLimitFunction,
handleBannerFiles,
handleFlagFiles,
numFilesUploadLimitFunction,
numFlagsUploadLimitFunction,
numBannersUploadLimitFunction;
const updateHandlers = () => {
//this thing is kinda gross
const { globalLimits, filterFileNames, spaceFileNameReplacement } = require(__dirname+'/../config.js').get
uploadLimitFunction = (req, res, next) => {
, upload = require('express-fileupload')
, fileHandlers = {}
, fileSizeLimitFunction = (req, res, next) => {
return dynamicResponse(req, res, 413, 'message', {
'title': 'Payload Too Large',
'message': 'Your upload was too large',
'redirect': req.headers.referer
});
};
numFilesUploadLimitFunction = (req, res, next) => {
return dynamicResponse(req, res, 400, 'message', {
'title': 'Too many files',
'message': res.locals.board ? `Max files per post ${res.locals.board.settings.maxFiles < globalLimits.postFiles.max ? 'on this board ' : ''}is ${res.locals.board.settings.maxFiles}`
: `Max files per request is ${globalLimits.postFiles.max}`, //because of difference in TOR body parsing, we dont populate res.locals.board at this point. something to address later.
'redirect': req.headers.referer
});
};
numBannersUploadLimitFunction = (req, res, next) => {
return dynamicResponse(req, res, 400, 'message', {
'title': 'Too many files',
'message': `Max banners per request is ${globalLimits.bannerFiles.max}`,
'redirect': req.headers.referer
});
};
numFlagsUploadLimitFunction = (req, res, next) => {
return dynamicResponse(req, res, 400, 'message', {
'title': 'Too many files',
'message': `Max banners per request is ${globalLimits.flagFiles.max}`,
'redirect': req.headers.referer
}
, updateHandlers = () => {
const { globalLimits, filterFileNames, spaceFileNameReplacement } = require(__dirname+'/../config.js').get;
['flag', 'banner', 'post'].forEach(fileType => {
//one day this will be more easy to extend
const fileSizeLimit = globalLimits[`${fileType}FilesSize`];
const fileNumLimit = globalLimits[`${fileType}Files`];
const fileNumLimitFunction = (req, res, next) => {
return dynamicResponse(req, res, 400, 'message', {
'title': 'Too many files',
'message': (req.path.endsWith('/post') && res.locals.board) ? `Max files per post ${res.locals.board.settings.maxFiles < globalLimits.postFiles.max ? 'on this board ' : ''}is ${res.locals.board.settings.maxFiles}`
: `Max files per request is ${fileNumLimit.max}`,
'redirect': req.headers.referer
});
};
fileHandlers[fileType] = upload({
debug: debugLogs,
createParentPath: true,
safeFileNames: filterFileNames,
spaceFileNameReplacement,
preserveExtension: 4,
limits: {
totalSize: fileSizeLimit.max,
fileSize: fileSizeLimit.max,
files: fileNumLimit.max,
},
numFilesLimitHandler: fileNumLimitFunction,
limitHandler: fileSizeLimitFunction,
useTempFiles: true,
tempFileDir: __dirname+'/../tmp/'
});
module.exports[fileType] = fileHandlers[fileType];
});
};
handleBannerFiles = upload({
debug: debugLogs,
createParentPath: true,
safeFileNames: filterFileNames,
spaceFileNameReplacement,
preserveExtension: 4,
limits: {
totalSize: globalLimits.bannerFilesSize.max,
fileSize: globalLimits.bannerFilesSize.max,
files: globalLimits.bannerFiles.max
},
numFilesLimitHandler: numBannersUploadLimitFunction,
limitHandler: uploadLimitFunction,
useTempFiles: true,
tempFileDir: __dirname+'/../tmp/'
});
module.exports.handleBannerFiles = handleBannerFiles;
handleFlagFiles = upload({
debug: debugLogs,
createParentPath: true,
safeFileNames: filterFileNames,
spaceFileNameReplacement,
preserveExtension: 4,
limits: {
totalSize: globalLimits.flagFilesSize.max,
fileSize: globalLimits.flagFilesSize.max,
files: globalLimits.flagFiles.max
},
numFilesLimitHandler: numFlagsUploadLimitFunction,
limitHandler: uploadLimitFunction,
useTempFiles: true,
tempFileDir: __dirname+'/../tmp/'
});
module.exports.handleFlagFiles = handleFlagFiles;
postFiles = upload({
debug: debugLogs,
createParentPath: true,
safeFileNames: filterFileNames,
spaceFileNameReplacement,
preserveExtension: 4,
limits: {
totalSize: globalLimits.postFilesSize.max,
fileSize: globalLimits.postFilesSize.max,
files: globalLimits.postFiles.max
},
numFilesLimitHandler: numFilesUploadLimitFunction,
limitHandler: uploadLimitFunction,
useTempFiles: true,
tempFileDir: __dirname+'/../tmp/'
});
};
updateHandlers();
addCallback('config', updateHandlers);
module.exports = {
handleBannerFiles,
handleFlagFiles,
handlePostFilesEarlyTor: (req, res, next) => {
banner: fileHandlers.banner,
flag: fileHandlers.flag,
posts: (req, res, next) => {
if (res.locals.anonymizer) {
return postFiles(req, res, next);
return next();
}
return next();
return fileHandlers.post(req, res, next);
},
handlePostFiles: (req, res, next) => {
postsEarly: (req, res, next) => {
if (res.locals.anonymizer) {
return next();
return fileHandlers.post(req, res, next);
}
return postFiles(req, res, next);
return next();
},
}
};

Loading…
Cancel
Save