diff --git a/helpers/captchaverify.js b/helpers/captchaverify.js index ccf0dfb8..fa9162f4 100644 --- a/helpers/captchaverify.js +++ b/helpers/captchaverify.js @@ -1,7 +1,11 @@ 'use strict'; const Captchas = require(__dirname+'/../db/captchas.js') - , Mongo = require(__dirname+'/../db/db.js'); + , Mongo = require(__dirname+'/../db/db.js') + , util = require('util') + , fs = require('fs') + , unlink = util.promisify(fs.unlink) + , uploadDirectory = require(__dirname+'/../helpers/uploadDirectory.js'); module.exports = async (req, res, next) => { @@ -9,18 +13,18 @@ module.exports = async (req, res, next) => { const input = req.body.captcha; if (!input || input.length !== 6) { return res.status(403).render('message', { - 'title': 'Forbidden', - 'message': 'Incorrect captcha' - }); + 'title': 'Forbidden', + 'message': 'Incorrect captcha' + }); } //make sure they have captcha cookie and its 24 chars const captchaId = req.cookies.captchaid; if (!captchaId || captchaId.length !== 24) { return res.status(403).render('message', { - 'title': 'Forbidden', - 'message': 'Captcha expired' - }); + 'title': 'Forbidden', + 'message': 'Captcha expired' + }); } @@ -36,13 +40,15 @@ module.exports = async (req, res, next) => { //check that it exists and matches captcha in DB if (!captcha || !captcha.value || captcha.value.text !== input) { return res.status(403).render('message', { - 'title': 'Forbidden', - 'message': 'Incorrect captcha' - }); + 'title': 'Forbidden', + 'message': 'Incorrect captcha' + }); } - //it was correct, so continue + //it was correct, so delete the file, the cookie and continue res.clearCookie('captchaid'); + await unlink(`${uploadDirectory}captcha/${captchaId}.png`) + return next(); } diff --git a/helpers/files/deletefailed.js b/helpers/files/deletefailed.js index 728ebcc2..969e5142 100644 --- a/helpers/files/deletefailed.js +++ b/helpers/files/deletefailed.js @@ -6,10 +6,10 @@ const path = require('path') , unlink = util.promisify(fs.unlink) , uploadDirectory = require(__dirname+'/../../helpers/uploadDirectory.js'); -module.exports = async (filenames) => { +module.exports = async (filenames, folder) => { await Promise.all(filenames.map(async filename => { - unlink(uploadDirectory + filename) + unlink(`${uploadDirectory}${folder}/${filename}`) })); } diff --git a/helpers/files/file-upload.js b/helpers/files/file-upload.js index 576f8232..1bf7953b 100644 --- a/helpers/files/file-upload.js +++ b/helpers/files/file-upload.js @@ -3,10 +3,10 @@ const configs = require(__dirname+'/../../configs/main.json') , uploadDirectory = require(__dirname+'/../uploadDirectory.js'); -module.exports = (req, res, file, filename) => { +module.exports = (req, res, file, filename, folder) => { return new Promise((resolve, reject) => { - file.mv(uploadDirectory + filename, function (err) { + file.mv(`${uploadDirectory}${folder}/${filename}`, function (err) { if (err) { return reject(err); } diff --git a/helpers/files/image-identify.js b/helpers/files/image-identify.js index a7dedc35..709c118d 100644 --- a/helpers/files/image-identify.js +++ b/helpers/files/image-identify.js @@ -2,10 +2,10 @@ const gm = require('@tohru/gm') , configs = require(__dirname+'/../../configs/main.json') , uploadDirectory = require(__dirname+'/../uploadDirectory.js'); -module.exports = (filename) => { +module.exports = (filename, folder) => { return new Promise((resolve, reject) => { - gm(uploadDirectory + filename) + gm(`${uploadDirectory}${folder}/${filename}`) .identify(function (err, data) { if (err) { return reject(err); diff --git a/helpers/files/image-thumbnail.js b/helpers/files/image-thumbnail.js index 30f97b66..da70f22f 100644 --- a/helpers/files/image-thumbnail.js +++ b/helpers/files/image-thumbnail.js @@ -5,10 +5,10 @@ const gm = require('@tohru/gm') module.exports = (filename) => { return new Promise((resolve, reject) => { - gm(uploadDirectory + filename) + gm(`${uploadDirectory}img/${filename}`) .resize(128, 128) .noProfile() - .write(`${uploadDirectory}thumb-${filename.split('.')[0]}.png`, function (err) { + .write(`${uploadDirectory}img/thumb-${filename.split('.')[0]}.png`, function (err) { if (err) { return reject(err); } diff --git a/helpers/files/video-identify.js b/helpers/files/video-identify.js index 24509488..dd98a735 100644 --- a/helpers/files/video-identify.js +++ b/helpers/files/video-identify.js @@ -5,7 +5,7 @@ const ffmpeg = require('fluent-ffmpeg') module.exports = (filename) => { return new Promise((resolve, reject) => { - ffmpeg.ffprobe(uploadDirectory + filename, (err, metadata) => { + ffmpeg.ffprobe(`${uploadDirectory}img/${filename}`, (err, metadata) => { if (err) { return reject(err) } diff --git a/helpers/files/video-thumbnail.js b/helpers/files/video-thumbnail.js index 91ad1572..6a3e45b2 100644 --- a/helpers/files/video-thumbnail.js +++ b/helpers/files/video-thumbnail.js @@ -5,7 +5,7 @@ const ffmpeg = require('fluent-ffmpeg') module.exports = (filename) => { return new Promise((resolve, reject) => { - ffmpeg(uploadDirectory + filename) + ffmpeg(`${uploadDirectory}img/${filename}`) .on('end', () => { return resolve(); }) @@ -13,7 +13,7 @@ module.exports = (filename) => { timestamps: [0], count: 1, filename: `thumb-${filename.split('.')[0]}.png`, - folder: uploadDirectory, + folder: `${uploadDirectory}img/`, size: '128x?' }); }); diff --git a/helpers/uploadDirectory.js b/helpers/uploadDirectory.js index e3db5a1c..05c99d5e 100644 --- a/helpers/uploadDirectory.js +++ b/helpers/uploadDirectory.js @@ -1,6 +1,6 @@ 'use strict'; const path = require('path'); -const directory = path.join(__dirname+'/../uploads/img/') +const directory = path.join(__dirname+'/../uploads/') module.exports = directory; diff --git a/models/forms/delete-post.js b/models/forms/delete-post.js index e78e2b13..46889c1e 100644 --- a/models/forms/delete-post.js +++ b/models/forms/delete-post.js @@ -43,8 +43,8 @@ module.exports = async (req, res, next, posts) => { await Promise.all(fileNames.map(async filename => { //dont question it. return Promise.all([ - unlink(uploadDirectory + filename), - unlink(`${uploadDirectory}thumb-${filename.split('.')[0]}.png`) + unlink(`${uploadDirectory}img/${filename}`), + unlink(`${uploadDirectory}img/thumb-${filename.split('.')[0]}.png`) ]) })); diff --git a/models/forms/deletebanners.js b/models/forms/deletebanners.js index d3717be8..c79f0581 100644 --- a/models/forms/deletebanners.js +++ b/models/forms/deletebanners.js @@ -13,7 +13,7 @@ module.exports = async (req, res, next) => { const redirect = `/${req.params.board}/manage` await Promise.all(req.body.checkedbanners.map(async filename => { - unlink(uploadDirectory + filename); + unlink(`${uploadDirectory}banner/${filename}`); })); // i dont think there is a way to get the number of array items removed with $pullAll diff --git a/models/forms/deletepostsfiles.js b/models/forms/deletepostsfiles.js index 7142d60a..03507893 100644 --- a/models/forms/deletepostsfiles.js +++ b/models/forms/deletepostsfiles.js @@ -24,8 +24,8 @@ module.exports = async (posts) => { await Promise.all(fileNames.map(async filename => { //dont question it. return Promise.all([ - unlink(uploadDirectory + filename), - unlink(`${uploadDirectory}thumb-${filename.split('.')[0]}.png`) + unlink(`${uploadDirectory}img/${filename}`), + unlink(`${uploadDirectory}img/thumb-${filename.split('.')[0]}.png`) ]) })); diff --git a/models/forms/make-post.js b/models/forms/make-post.js index e8ba0a35..1f29ceaa 100644 --- a/models/forms/make-post.js +++ b/models/forms/make-post.js @@ -88,7 +88,7 @@ module.exports = async (req, res, next, numFiles) => { try { //upload file - await fileUpload(req, res, file, filename); + await fileUpload(req, res, file, filename, 'img'); //get metadata let processedFile = { @@ -102,7 +102,7 @@ module.exports = async (req, res, next, numFiles) => { const mainType = file.mimetype.split('/')[0]; switch (mainType) { case 'image': - const imageData = await imageIdentify(filename); + const imageData = await imageIdentify(filename, 'img'); processedFile.geometry = imageData.size // object with width and height pixels processedFile.sizeString = formatSize(processedFile.size) // 123 Ki string processedFile.geometryString = imageData.Geometry // 123 x 123 string diff --git a/models/forms/uploadbanners.js b/models/forms/uploadbanners.js index 36f0ebc7..1d185596 100644 --- a/models/forms/uploadbanners.js +++ b/models/forms/uploadbanners.js @@ -35,12 +35,12 @@ module.exports = async (req, res, next, numFiles) => { // try to save try { //upload it - await fileUpload(req, res, file, filename); - const imageData = await imageIdentify(filename); + await fileUpload(req, res, file, filename, 'banner'); + const imageData = await imageIdentify(filename, 'banner'); const geometry = imageData.size; //make sure its 300x100 banner if (geometry.width !== 300 || geometry.height !== 100) { - await deleteFailedFiles(filenames); + await deleteFailedFiles(filenames, 'banner'); return res.status(400).render('message', { 'title': 'Bad request', 'message': `Invalid file ${file.name}. Banners must be 300x100.`, @@ -49,7 +49,7 @@ module.exports = async (req, res, next, numFiles) => { } } catch (err) { //TODO: this better - await deleteFailedFiles(filenames); + await deleteFailedFiles(filenames, 'banner'); return next(err); } } diff --git a/models/pages/banners.js b/models/pages/banners.js index 928bb363..c652ca4a 100644 --- a/models/pages/banners.js +++ b/models/pages/banners.js @@ -22,6 +22,6 @@ module.exports = async (req, res, next) => { const randomBanner = board.banners[Math.floor(Math.random()*board.banners.length)]; - return res.redirect(`/img/${randomBanner}`); + return res.redirect(`/banner/${randomBanner}`); } diff --git a/server.js b/server.js index 1bc79799..e9e16ac8 100644 --- a/server.js +++ b/server.js @@ -53,7 +53,7 @@ const express = require('express') // use pug view engine app.set('view engine', 'pug'); app.set('views', path.join(__dirname, 'views/pages')); - app.enable('view cache'); +// app.enable('view cache'); // routes app.use('/forms', require(__dirname+'/controllers/forms.js')) diff --git a/uploads/banner/0efc3bd2-dc1e-4dab-943d-6b8757a6e87a.png b/uploads/banner/0efc3bd2-dc1e-4dab-943d-6b8757a6e87a.png new file mode 100644 index 00000000..f5366878 Binary files /dev/null and b/uploads/banner/0efc3bd2-dc1e-4dab-943d-6b8757a6e87a.png differ diff --git a/uploads/banner/3f10e499-b347-4b3d-8ed1-f60b2f62ca17.png b/uploads/banner/3f10e499-b347-4b3d-8ed1-f60b2f62ca17.png new file mode 100644 index 00000000..f5366878 Binary files /dev/null and b/uploads/banner/3f10e499-b347-4b3d-8ed1-f60b2f62ca17.png differ diff --git a/uploads/banner/78111862-7144-4599-9893-ba84ec64704d.png b/uploads/banner/78111862-7144-4599-9893-ba84ec64704d.png new file mode 100644 index 00000000..f5366878 Binary files /dev/null and b/uploads/banner/78111862-7144-4599-9893-ba84ec64704d.png differ diff --git a/views/includes/pages.pug b/views/includes/pages.pug index 53008fbb..7e472992 100644 --- a/views/includes/pages.pug +++ b/views/includes/pages.pug @@ -4,5 +4,5 @@ nav.pages Page: span: a(href=`/${board._id}?p=${i}`) [#{i}] else span: a(href=`/${board._id}?p=${i}`) #{i} - | | + | | a(href=`/${board._id}/catalog`) [Catalog]