temp files _actually_ deleted for uploads, still need a little refactor. also remove hyphen from filenames

merge-requests/208/head
fatchan 5 years ago
parent 66d168863f
commit c7d02a5a2b
  1. 44
      controllers/forms.js
  2. 20
      helpers/files/deletetempfiles.js
  3. 0
      helpers/files/formatsize.js
  4. 0
      helpers/files/imageidentify.js
  5. 0
      helpers/files/imagethumbnail.js
  6. 0
      helpers/files/mimetypes.js
  7. 0
      helpers/files/videoidentify.js
  8. 0
      helpers/files/videothumbnail.js
  9. 8
      helpers/id-contrast.js
  10. 2
      helpers/paramconverter.js
  11. 10
      models/forms/actionhandler.js
  12. 0
      models/forms/banposter.js
  13. 0
      models/forms/deletepost.js
  14. 0
      models/forms/dismissreport.js
  15. 18
      models/forms/makepost.js
  16. 0
      models/forms/reportpost.js
  17. 0
      models/forms/spoilerpost.js
  18. 15
      models/forms/uploadbanners.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);
}

@ -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);
}));
}
}

@ -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;
}

@ -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) => {

@ -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');

@ -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.`,

@ -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.`,

Loading…
Cancel
Save