diff --git a/controllers/forms.js b/controllers/forms.js index 9e155c46..9ce6cd2f 100644 --- a/controllers/forms.js +++ b/controllers/forms.js @@ -9,29 +9,29 @@ const express = require('express') , upload = require('express-fileupload') , path = require('path') , postFiles = upload({ - createParentPath: true, - safeFileNames: /[^\w-]+/g, - preserveExtension: 4, - limits: { - fileSize: 10 * 1024 * 1024, - files: 3 - }, - abortOnLimit: true, - useTempFiles: true, - tempFileDir: path.join(__dirname+'/../tmp/') - }) + createParentPath: true, + safeFileNames: /[^\w-]+/g, + preserveExtension: 4, + limits: { + fileSize: 10 * 1024 * 1024, + files: 3 + }, + abortOnLimit: true, + useTempFiles: true, + tempFileDir: path.join(__dirname+'/../tmp/') + }) , bannerFiles = upload({ - createParentPath: true, - safeFileNames: /[^\w-]+/g, - preserveExtension: 4, - limits: { - fileSize: 10 * 1024 * 1024, - files: 10 - }, - abortOnLimit: true, - useTempFiles: true, - tempFileDir: path.join(__dirname+'/../tmp/') - }) + createParentPath: true, + safeFileNames: /[^\w-]+/g, + preserveExtension: 4, + limits: { + fileSize: 10 * 1024 * 1024, + files: 10 + }, + abortOnLimit: true, + useTempFiles: true, + tempFileDir: path.join(__dirname+'/../tmp/') + }) , removeBans = require(__dirname+'/../models/forms/removebans.js') , makePost = require(__dirname+'/../models/forms/makepost.js') , deleteTempFiles = require(__dirname+'/../helpers/files/deletetempfiles.js') @@ -52,7 +52,7 @@ const express = require('express') // login to account -router.post('/login', (req, res, next) => { +router.post('/login', async (req, res, next) => { const errors = []; @@ -80,7 +80,11 @@ router.post('/login', (req, res, next) => { }) } - loginAccount(req, res, next); + try { + await loginAccount(req, res, next); + } catch (err) { + return next(err); + } }); @@ -235,10 +239,10 @@ router.post('/board/:board/post', Boards.exists, banCheck, postFiles, paramConve if (errors.length > 0) { 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 { diff --git a/controllers/pages.js b/controllers/pages.js index 0479e953..d121b0aa 100644 --- a/controllers/pages.js +++ b/controllers/pages.js @@ -38,7 +38,7 @@ router.get('/captcha.html', captchaPage); router.get('/changepassword.html', changePassword); //logout -router.get('/logout', isLoggedIn, (req, res, next) => { +router.get('/logout', (req, res, next) => { //remove session req.session.destroy(); diff --git a/helpers/isloggedin.js b/helpers/isloggedin.js index 458c9ff5..34b5ccf1 100644 --- a/helpers/isloggedin.js +++ b/helpers/isloggedin.js @@ -4,5 +4,6 @@ module.exports = (req, res, next) => { if (req.session.authenticated === true) { return next(); } - res.redirect('/login.html'); + const board = req.params ? req.params.board : null; + res.redirect(`/login.html${board ? '?goto=/'+board+'/manage.html' : ''}`); } diff --git a/models/forms/login.js b/models/forms/login.js index 532a6acf..a574d568 100644 --- a/models/forms/login.js +++ b/models/forms/login.js @@ -7,6 +7,8 @@ module.exports = async (req, res, next) => { const username = req.body.username.toLowerCase(); const password = req.body.password; + const goto = req.body.goto; + const failRedirect = `/login.html${goto ? '?goto='+goto : ''}` //fetch an account let account; @@ -21,7 +23,7 @@ module.exports = async (req, res, next) => { return res.status(403).render('message', { 'title': 'Forbidden', 'message': 'Incorrect username or password', - 'redirect': '/login.html' + 'redirect': failRedirect }); } @@ -44,14 +46,14 @@ module.exports = async (req, res, next) => { req.session.authenticated = true; //successful login - return res.redirect('/'); + return res.redirect(goto || '/'); } return res.status(403).render('message', { 'title': 'Forbidden', 'message': 'Incorrect username or password', - 'redirect': '/login.html' + 'redirect': failRedirect }); } diff --git a/models/pages/login.js b/models/pages/login.js index 5fe0c372..bd28f578 100644 --- a/models/pages/login.js +++ b/models/pages/login.js @@ -5,12 +5,8 @@ const { buildLogin } = require(__dirname+'/../../build.js') module.exports = async (req, res, next) => { - try { - await buildLogin(); - } catch (err) { - return next(err); - } - - return res.sendFile(`${uploadDirectory}html/login.html`); + res.render('login', { + 'goto': req.query.goto + }); } diff --git a/views/includes/footer.pug b/views/includes/footer.pug index 5592b6af..bee5fadc 100644 --- a/views/includes/footer.pug +++ b/views/includes/footer.pug @@ -1,5 +1,5 @@ small.footer | - - a(href='https://github.com/fatchan/jscshan/') source code + a(href='https://github.com/fatchan/jschan/') source code - const ms = Date.now()-renderStart span + took #{ms > 0 ? ms/1000 : 0}s - diff --git a/views/includes/navbar.pug b/views/includes/navbar.pug index 7e430185..d8cf23dc 100644 --- a/views/includes/navbar.pug +++ b/views/includes/navbar.pug @@ -2,4 +2,4 @@ nav.navbar a.nav-item(href='/') Home a.nav-item.right(href='/logout') Logout a.nav-item.right(href=`/${board ? board._id+'/' : 'global'}manage.html`) Manage - a.nav-item.right(href='/login.html') Login + a.nav-item.right(href=`/login.html${board ? '?goto=/'+board._id : ''}`) Login diff --git a/views/mixins/post.pug b/views/mixins/post.pug index b89f1bc0..d9156390 100644 --- a/views/mixins/post.pug +++ b/views/mixins/post.pug @@ -47,7 +47,7 @@ mixin post(post, truncate, manage=false, globalmanage=false) each file in post.files .post-file span.post-file-info - span: a(href='/img/'+file.filename title=file.originalFilename download=file.originalFilename) #{post.spoiler ? 'Spoiler File' : file.originalFilename} + span: a(href='/img/'+file.filename title='Download '+file.originalFilename download=file.originalFilename) #{post.spoiler ? 'Spoiler File' : file.originalFilename} br span | (#{file.sizeString}, #{file.geometryString} diff --git a/views/pages/login.pug b/views/pages/login.pug index b9d59247..24ded82f 100644 --- a/views/pages/login.pug +++ b/views/pages/login.pug @@ -6,7 +6,7 @@ block head block content section.form-wrapper.flex-center.mv-10 form.form-post(action='/forms/login' method='POST') - //input(type='hidden' name='_csrf' value=csrf) + input(type='hidden' name='goto' value=goto) section.postform-row .postform-label Username .required *