banners, captcha, image in separate folders and associated changes

merge-requests/208/head
fatchan 5 years ago
parent dd2ec07664
commit 139f937897
  1. 28
      helpers/captchaverify.js
  2. 4
      helpers/files/deletefailed.js
  3. 4
      helpers/files/file-upload.js
  4. 4
      helpers/files/image-identify.js
  5. 4
      helpers/files/image-thumbnail.js
  6. 2
      helpers/files/video-identify.js
  7. 4
      helpers/files/video-thumbnail.js
  8. 2
      helpers/uploadDirectory.js
  9. 4
      models/forms/delete-post.js
  10. 2
      models/forms/deletebanners.js
  11. 4
      models/forms/deletepostsfiles.js
  12. 4
      models/forms/make-post.js
  13. 8
      models/forms/uploadbanners.js
  14. 2
      models/pages/banners.js
  15. 2
      server.js
  16. BIN
      uploads/banner/0efc3bd2-dc1e-4dab-943d-6b8757a6e87a.png
  17. BIN
      uploads/banner/3f10e499-b347-4b3d-8ed1-f60b2f62ca17.png
  18. BIN
      uploads/banner/78111862-7144-4599-9893-ba84ec64704d.png
  19. 2
      views/includes/pages.pug

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

@ -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]

Loading…
Cancel
Save