diff --git a/controllers/forms.js b/controllers/forms.js index 61032509..4a663c01 100644 --- a/controllers/forms.js +++ b/controllers/forms.js @@ -33,13 +33,13 @@ const express = require('express') tempFileDir: path.join(__dirname+'/../tmp/') }) , removeBans = require(__dirname+'/../models/forms/removebans.js') - , makePost = require(__dirname+'/../models/forms/make-post.js') + , makePost = require(__dirname+'/../models/forms/makepost.js') + , deleteTempFiles = require(__dirname+'/../helpers/files/deletetempfiles.js') , uploadBanners = require(__dirname+'/../models/forms/uploadbanners.js') , deleteBanners = require(__dirname+'/../models/forms/deletebanners.js') , loginAccount = require(__dirname+'/../models/forms/login.js') , changePassword = require(__dirname+'/../models/forms/changepassword.js') , registerAccount = require(__dirname+'/../models/forms/register.js') - , deleteTempFiles = require(__dirname+'/../helpers/files/deletetempfiles.js') , checkPermsMiddleware = require(__dirname+'/../helpers/haspermsmiddleware.js') , checkPerms = require(__dirname+'/../helpers/hasperms.js') , paramConverter = require(__dirname+'/../helpers/paramconverter.js') @@ -226,22 +226,18 @@ router.post('/board/:board/post', Boards.exists, banCheck, postFiles, paramConve } if (errors.length > 0) { - if (numFiles > 0) { - await deleteTempFiles(req.files.file) - } + await deleteTempFiles(req).catch(e => console.error); return res.status(400).render('message', { - 'title': 'Bad request', - 'errors': errors, - 'redirect': `/${req.params.board}${req.body.thread ? '/thread/' + req.body.thread + '.html' : ''}` - }) + 'title': 'Bad request', + 'errors': errors, + 'redirect': `/${req.params.board}${req.body.thread ? '/thread/' + req.body.thread + '.html' : ''}` + }); } try { await makePost(req, res, next, numFiles); } catch (err) { - if (numFiles > 0) { - await deleteTempFiles(req.files.file) - } + await deleteTempFiles(req).catch(e => console.error); return next(err); } @@ -252,8 +248,8 @@ router.post('/board/:board/settings', csrf, Boards.exists, checkPermsMiddleware, const errors = []; - if (req.body.default_name && req.body.default_name.length > 20) { - errors.push('Must provide a message or file'); + if (req.body.default_name && req.body.default_name.length < 1 || req.body.default_name.length > 50) { + errors.push('Anon name must be 1-50 characters'); } if (typeof req.body.reply_limit === 'number' && (req.body.reply_limit < 1 || req.body.reply_limit > 1000)) { errors.push('Reply Limit must be from 1-1000'); @@ -273,10 +269,14 @@ router.post('/board/:board/settings', csrf, Boards.exists, checkPermsMiddleware, }) } - return res.status(501).render('message', { - 'title': 'Not implemented', - 'redirect': `/${req.params.board}/manage.html` - }) + try { + return res.status(501).render('message', { + 'title': 'Not implemented', + 'redirect': `/${req.params.board}/manage.html` + }) + } catch (err) { + return next(err); + } }); @@ -303,9 +303,7 @@ router.post('/board/:board/addbanners', bannerFiles, csrf, Boards.exists, checkP } if (errors.length > 0) { - if (numFiles > 0) { - await deleteTempFiles(req.files.file) - } + await deleteTempFiles(req).catch(e => console.error); return res.status(400).render('message', { 'title': 'Bad request', 'errors': errors, @@ -316,9 +314,7 @@ router.post('/board/:board/addbanners', bannerFiles, csrf, Boards.exists, checkP try { await uploadBanners(req, res, next, numFiles); } catch (err) { - if (numFiles > 0) { - await deleteTempFiles(req.files.file) - } + await deleteTempFiles(req).catch(e => console.error); return next(err); } diff --git a/helpers/files/deletetempfiles.js b/helpers/files/deletetempfiles.js index fe13a56b..6a383e10 100644 --- a/helpers/files/deletetempfiles.js +++ b/helpers/files/deletetempfiles.js @@ -2,10 +2,22 @@ const remove = require('fs-extra').remove; -module.exports = async (files) => { +module.exports = async (req) => { - return Promise.all(files.map(async file => { - remove(file.tempFilePath); - })); + if (req.files != null) { + let files = []; + const keys = Object.keys(req.files); + for (let i = 0; i < keys.length; i++) { + const val = req.files[keys[i]]; + if (Array.isArray(val)) { + files = files.concat(val); + } else { + files.push(val); + } + } + return Promise.all(files.map(async file => { + remove(file.tempFilePath); + })); + } } diff --git a/helpers/files/format-size.js b/helpers/files/formatsize.js similarity index 100% rename from helpers/files/format-size.js rename to helpers/files/formatsize.js diff --git a/helpers/files/image-identify.js b/helpers/files/imageidentify.js similarity index 100% rename from helpers/files/image-identify.js rename to helpers/files/imageidentify.js diff --git a/helpers/files/image-thumbnail.js b/helpers/files/imagethumbnail.js similarity index 100% rename from helpers/files/image-thumbnail.js rename to helpers/files/imagethumbnail.js diff --git a/helpers/files/file-check-mime-types.js b/helpers/files/mimetypes.js similarity index 100% rename from helpers/files/file-check-mime-types.js rename to helpers/files/mimetypes.js diff --git a/helpers/files/video-identify.js b/helpers/files/videoidentify.js similarity index 100% rename from helpers/files/video-identify.js rename to helpers/files/videoidentify.js diff --git a/helpers/files/video-thumbnail.js b/helpers/files/videothumbnail.js similarity index 100% rename from helpers/files/video-thumbnail.js rename to helpers/files/videothumbnail.js diff --git a/helpers/id-contrast.js b/helpers/id-contrast.js deleted file mode 100644 index 50232bbb..00000000 --- a/helpers/id-contrast.js +++ /dev/null @@ -1,8 +0,0 @@ -'use strict'; - -module.exports = (hex) => { - const r = parseInt(hex.substr(0,2), 16); - const g = parseInt(hex.substr(2,2), 16); - const b = parseInt(hex.substr(4,2), 16) - return 0.375 * r + 0.5 * g + 0.125 * b; -} diff --git a/helpers/paramconverter.js b/helpers/paramconverter.js index 82068c0f..3f31c91b 100644 --- a/helpers/paramconverter.js +++ b/helpers/paramconverter.js @@ -2,7 +2,7 @@ const Mongo = require(__dirname+'/../db/db.js') , allowedArrays = new Set(['checkedposts', 'globalcheckedposts', 'checkedbans', 'checkedbanners']) - , numberFields = ['reply_limit', 'max_files', 'thread_limit', 'thread'] + , numberFields = ['reply_limit', 'max_files', 'thread_limit', 'thread', 'min_message_length']; module.exports = (req, res, next) => { diff --git a/models/forms/actionhandler.js b/models/forms/actionhandler.js index cba84eab..d8a7c41b 100644 --- a/models/forms/actionhandler.js +++ b/models/forms/actionhandler.js @@ -3,16 +3,16 @@ const Posts = require(__dirname+'/../../db/posts.js') , Boards = require(__dirname+'/../../db/boards.js') , Mongo = require(__dirname+'/../../db/db.js') - , banPoster = require(__dirname+'/ban-poster.js') - , deletePosts = require(__dirname+'/delete-post.js') - , spoilerPosts = require(__dirname+'/spoiler-post.js') + , banPoster = require(__dirname+'/banposter.js') + , deletePosts = require(__dirname+'/deletepost.js') + , spoilerPosts = require(__dirname+'/spoilerpost.js') , stickyPosts = require(__dirname+'/stickyposts.js') , sagePosts = require(__dirname+'/sageposts.js') , lockPosts = require(__dirname+'/lockposts.js') , deletePostsFiles = require(__dirname+'/deletepostsfiles.js') - , reportPosts = require(__dirname+'/report-post.js') + , reportPosts = require(__dirname+'/reportpost.js') , globalReportPosts = require(__dirname+'/globalreportpost.js') - , dismissReports = require(__dirname+'/dismiss-report.js') + , dismissReports = require(__dirname+'/dismissreport.js') , dismissGlobalReports = require(__dirname+'/dismissglobalreport.js') , { buildCatalog, buildThread, buildBoardMultiple } = require(__dirname+'/../../build.js'); diff --git a/models/forms/ban-poster.js b/models/forms/banposter.js similarity index 100% rename from models/forms/ban-poster.js rename to models/forms/banposter.js diff --git a/models/forms/delete-post.js b/models/forms/deletepost.js similarity index 100% rename from models/forms/delete-post.js rename to models/forms/deletepost.js diff --git a/models/forms/dismiss-report.js b/models/forms/dismissreport.js similarity index 100% rename from models/forms/dismiss-report.js rename to models/forms/dismissreport.js diff --git a/models/forms/make-post.js b/models/forms/makepost.js similarity index 94% rename from models/forms/make-post.js rename to models/forms/makepost.js index 9d158c96..3aa9fde3 100644 --- a/models/forms/make-post.js +++ b/models/forms/makepost.js @@ -22,12 +22,13 @@ const path = require('path') , permsCheck = require(__dirname+'/../../helpers/hasperms.js') , imageUpload = require(__dirname+'/../../helpers/files/imageupload.js') , videoUpload = require(__dirname+'/../../helpers/files/videoupload.js') - , fileCheckMimeType = require(__dirname+'/../../helpers/files/file-check-mime-types.js') - , imageThumbnail = require(__dirname+'/../../helpers/files/image-thumbnail.js') - , imageIdentify = require(__dirname+'/../../helpers/files/image-identify.js') - , videoThumbnail = require(__dirname+'/../../helpers/files/video-thumbnail.js') - , videoIdentify = require(__dirname+'/../../helpers/files/video-identify.js') - , formatSize = require(__dirname+'/../../helpers/files/format-size.js') + , fileCheckMimeType = require(__dirname+'/../../helpers/files/mimetypes.js') + , imageThumbnail = require(__dirname+'/../../helpers/files/imagethumbnail.js') + , imageIdentify = require(__dirname+'/../../helpers/files/imageidentify.js') + , videoThumbnail = require(__dirname+'/../../helpers/files/videothumbnail.js') + , videoIdentify = require(__dirname+'/../../helpers/files/videoidentify.js') + , formatSize = require(__dirname+'/../../helpers/files/formatsize.js') + , deleteTempFiles = require(__dirname+'/../../helpers/files/deletetempfiles.js') , { buildCatalog, buildThread, buildBoard, buildBoardMultiple } = require(__dirname+'/../../build.js'); module.exports = async (req, res, next, numFiles) => { @@ -41,6 +42,7 @@ module.exports = async (req, res, next, numFiles) => { if (req.body.thread) { thread = await Posts.getPost(req.params.board, req.body.thread, true); if (!thread || thread.thread != null) { + await deleteTempFiles(req).catch(e => console.error); return res.status(400).render('message', { 'title': 'Bad request', 'message': 'Thread does not exist.', @@ -50,6 +52,7 @@ module.exports = async (req, res, next, numFiles) => { salt = thread.salt; redirect += `thread/${req.body.thread}.html` if (thread.locked && !hasPerms) { + await deleteTempFiles(req).catch(e => console.error); return res.status(400).render('message', { 'title': 'Bad request', 'message': 'Thread Locked', @@ -57,6 +60,7 @@ module.exports = async (req, res, next, numFiles) => { }); } if (thread.replyposts >= res.locals.board.settings.replyLimit) { //reply limit + await deleteTempFiles(req).catch(e => console.error); return res.status(400).render('message', { 'title': 'Bad request', 'message': 'Thread reached reply limit', @@ -65,6 +69,7 @@ module.exports = async (req, res, next, numFiles) => { } } if (numFiles > res.locals.board.settings.maxFiles) { + await deleteTempFiles(req).catch(e => console.error); return res.status(400).render('message', { 'title': 'Bad request', 'message': `Too many files. Max files per post is ${res.locals.board.settings.maxFiles}.`, @@ -77,6 +82,7 @@ module.exports = async (req, res, next, numFiles) => { // check all mime types befoer we try saving anything for (let i = 0; i < numFiles; i++) { if (!fileCheckMimeType(req.files.file[i].mimetype, {animatedImage: true, image: true, video: true})) { + await deleteTempFiles(req).catch(e => console.error); return res.status(400).render('message', { 'title': 'Bad request', 'message': `Invalid file type for ${req.files.file[i].name}. Mimetype ${req.files.file[i].mimetype} not allowed.`, diff --git a/models/forms/report-post.js b/models/forms/reportpost.js similarity index 100% rename from models/forms/report-post.js rename to models/forms/reportpost.js diff --git a/models/forms/spoiler-post.js b/models/forms/spoilerpost.js similarity index 100% rename from models/forms/spoiler-post.js rename to models/forms/spoilerpost.js diff --git a/models/forms/uploadbanners.js b/models/forms/uploadbanners.js index 88291d3e..47a76186 100644 --- a/models/forms/uploadbanners.js +++ b/models/forms/uploadbanners.js @@ -4,8 +4,8 @@ const path = require('path') , { remove, pathExists, ensureDir } = require('fs-extra') , uploadDirectory = require(__dirname+'/../../helpers/uploadDirectory.js') , imageUpload = require(__dirname+'/../../helpers/files/imageupload.js') - , fileCheckMimeType = require(__dirname+'/../../helpers/files/file-check-mime-types.js') - , imageIdentify = require(__dirname+'/../../helpers/files/image-identify.js') + , fileCheckMimeType = require(__dirname+'/../../helpers/files/mimetypes.js') + , imageIdentify = require(__dirname+'/../../helpers/files/imageidentify.js') , deleteTempFiles = require(__dirname+'/../../helpers/files/deletetempfiles.js') , Boards = require(__dirname+'/../../db/boards.js') @@ -16,7 +16,7 @@ module.exports = async (req, res, next, numFiles) => { // check all mime types befoer we try saving anything for (let i = 0; i < numFiles; i++) { if (!fileCheckMimeType(req.files.file[i].mimetype, {image: true, animatedImage: true, video: false})) { - await deleteTempFiles(req.files.file) + await deleteTempFiles(req).catch(e => console.error); return res.status(400).render('message', { 'title': 'Bad request', 'message': `Invalid file type for ${req.files.file[i].name}. Mimetype ${req.files.file[i].mimetype} not allowed.`, @@ -37,13 +37,6 @@ module.exports = async (req, res, next, numFiles) => { if (exists) { await remove(file.tempFilePath); continue; -/* dont stop uploading the other banners just because one already exists. - return res.status(409).render('message', { - 'title': 'Conflict', - 'message': `Invalid file ${file.name}. Banner already exists.`, - 'redirect': redirect - }); -*/ } //add to list after checking it doesnt already exist @@ -61,7 +54,7 @@ module.exports = async (req, res, next, numFiles) => { //make sure its 300x100 banner if (geometry.width !== 300 || geometry.height !== 100) { - await deleteTempFiles(req.files.file); + await deleteTempFiles(req).catch(e => console.error); return res.status(400).render('message', { 'title': 'Bad request', 'message': `Invalid file ${file.name}. Banners must be 300x100.`,