make getting numfiles a middleware for forms that accept files uploads, later controllers or models can use the locals

merge-requests/208/head
fatchan 5 years ago
parent b63e684422
commit d96cfce696
  1. 5
      controllers/forms.js
  2. 12
      controllers/forms/makepost.js
  3. 9
      controllers/forms/uploadbanners.js
  4. 13
      helpers/numfiles.js

@ -8,6 +8,7 @@ const express = require('express')
, calcPerms = require(__dirname+'/../helpers/checks/calcpermsmiddleware.js')
, hasPerms = require(__dirname+'/../helpers/checks/haspermsmiddleware.js')
, paramConverter = require(__dirname+'/../helpers/paramconverter.js')
, numFiles = require(__dirname+'/../helpers/numfiles.js')
, banCheck = require(__dirname+'/../helpers/checks/bancheck.js')
, isLoggedIn = require(__dirname+'/../helpers/checks/isloggedin.js')
, verifyCaptcha = require(__dirname+'/../helpers/captcha/captchaverify.js')
@ -59,7 +60,7 @@ const express = require('express')
, newcaptcha = require(__dirname+'/../models/forms/newcaptcha.js')
//make new post
router.post('/board/:board/post', sessionRefresh, Boards.exists, calcPerms, banCheck, postFiles, paramConverter, verifyCaptcha, makePostController);
router.post('/board/:board/post', sessionRefresh, Boards.exists, calcPerms, banCheck, postFiles, paramConverter, verifyCaptcha, numFiles, makePostController);
//post actions
router.post('/board/:board/actions', sessionRefresh, Boards.exists, calcPerms, banCheck, paramConverter, verifyCaptcha, actionController); //public, with captcha
@ -69,7 +70,7 @@ router.post('/global/actions', sessionRefresh, csrf, calcPerms, isLoggedIn, hasP
//board management forms
router.post('/board/:board/transfer', sessionRefresh, csrf, Boards.exists, calcPerms, banCheck, isLoggedIn, hasPerms(2), paramConverter, transferController);
router.post('/board/:board/settings', sessionRefresh, csrf, Boards.exists, calcPerms, banCheck, isLoggedIn, hasPerms(2), paramConverter, boardSettingsController);
router.post('/board/:board/addbanners', sessionRefresh, bannerFiles, csrf, Boards.exists, calcPerms, banCheck, isLoggedIn, hasPerms(2), paramConverter, uploadBannersController); //add banners
router.post('/board/:board/addbanners', sessionRefresh, bannerFiles, csrf, Boards.exists, calcPerms, banCheck, isLoggedIn, hasPerms(2), paramConverter, numFiles, uploadBannersController); //add banners
router.post('/board/:board/deletebanners', sessionRefresh, csrf, Boards.exists, calcPerms, banCheck, isLoggedIn, hasPerms(2), paramConverter, deleteBannersController); //delete banners
router.post('/board/:board/editbans', sessionRefresh, csrf, Boards.exists, calcPerms, banCheck, isLoggedIn, hasPerms(3), paramConverter, editBansController); //edit bans
router.post('/board/:board/deleteboard', sessionRefresh, csrf, Boards.exists, calcPerms, banCheck, isLoggedIn, hasPerms(2), deleteBoardController); //delete board

@ -8,20 +8,12 @@ const makePost = require(__dirname+'/../../models/forms/makepost.js')
module.exports = async (req, res, next) => {
if (req.files && req.files.file) {
if (Array.isArray(req.files.file)) {
res.locals.numFiles = req.files.file.filter(file => file.size > 0).length;
} else {
res.locals.numFiles = req.files.file.size > 0 ? 1 : 0;
req.files.file = [req.files.file];
}
res.locals.numFiles = Math.min(res.locals.numFiles, res.locals.board.settings.maxFiles)
}
res.locals.numFiles = Math.min(res.locals.numFiles, res.locals.board.settings.maxFiles)
const errors = [];
// even if force file and message are off, the post must contain one of either.
if ((!req.body.message || req.body.message.length === 0) && (!res.locals.numFiles || res.locals.numFiles === 0)) {
if ((!req.body.message || req.body.message.length === 0) && res.locals.numFiles === 0) {
errors.push('Posts must include a message or file');
}

@ -6,15 +6,6 @@ const uploadBanners = require(__dirname+'/../../models/forms/uploadbanners.js')
module.exports = async (req, res, next) => {
if (req.files && req.files.file) {
if (Array.isArray(req.files.file)) {
res.locals.numFiles = req.files.file.filter(file => file.size > 0).length;
} else {
res.locals.numFiles = req.files.file.size > 0 ? 1 : 0;
req.files.file = [req.files.file];
}
}
const errors = [];
if (res.locals.numFiles === 0) {

@ -0,0 +1,13 @@
'use strict';
module.exports = (req, res, next) => {
res.locals.numFiles = 0;
if (req.files && req.files.file) {
if (Array.isArray(req.files.file)) {
res.locals.numFiles = req.files.file.filter(file => file.size > 0).length;
} else {
res.locals.numFiles = req.files.file.size > 0 ? 1 : 0;
req.files.file = [req.files.file];
}
}
}
Loading…
Cancel
Save