redirect to correct page on login or manage

merge-requests/208/head
fatchan 5 years ago
parent d200c0792e
commit f5d859c71e
  1. 60
      controllers/forms.js
  2. 2
      controllers/pages.js
  3. 3
      helpers/isloggedin.js
  4. 8
      models/forms/login.js
  5. 10
      models/pages/login.js
  6. 2
      views/includes/footer.pug
  7. 2
      views/includes/navbar.pug
  8. 2
      views/mixins/post.pug
  9. 2
      views/pages/login.pug

@ -9,29 +9,29 @@ const express = require('express')
, upload = require('express-fileupload') , upload = require('express-fileupload')
, path = require('path') , path = require('path')
, postFiles = upload({ , postFiles = upload({
createParentPath: true, createParentPath: true,
safeFileNames: /[^\w-]+/g, safeFileNames: /[^\w-]+/g,
preserveExtension: 4, preserveExtension: 4,
limits: { limits: {
fileSize: 10 * 1024 * 1024, fileSize: 10 * 1024 * 1024,
files: 3 files: 3
}, },
abortOnLimit: true, abortOnLimit: true,
useTempFiles: true, useTempFiles: true,
tempFileDir: path.join(__dirname+'/../tmp/') tempFileDir: path.join(__dirname+'/../tmp/')
}) })
, bannerFiles = upload({ , bannerFiles = upload({
createParentPath: true, createParentPath: true,
safeFileNames: /[^\w-]+/g, safeFileNames: /[^\w-]+/g,
preserveExtension: 4, preserveExtension: 4,
limits: { limits: {
fileSize: 10 * 1024 * 1024, fileSize: 10 * 1024 * 1024,
files: 10 files: 10
}, },
abortOnLimit: true, abortOnLimit: true,
useTempFiles: true, useTempFiles: true,
tempFileDir: path.join(__dirname+'/../tmp/') tempFileDir: path.join(__dirname+'/../tmp/')
}) })
, removeBans = require(__dirname+'/../models/forms/removebans.js') , removeBans = require(__dirname+'/../models/forms/removebans.js')
, makePost = require(__dirname+'/../models/forms/makepost.js') , makePost = require(__dirname+'/../models/forms/makepost.js')
, deleteTempFiles = require(__dirname+'/../helpers/files/deletetempfiles.js') , deleteTempFiles = require(__dirname+'/../helpers/files/deletetempfiles.js')
@ -52,7 +52,7 @@ const express = require('express')
// login to account // login to account
router.post('/login', (req, res, next) => { router.post('/login', async (req, res, next) => {
const errors = []; 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) { if (errors.length > 0) {
await deleteTempFiles(req).catch(e => console.error); await deleteTempFiles(req).catch(e => console.error);
return res.status(400).render('message', { return res.status(400).render('message', {
'title': 'Bad request', 'title': 'Bad request',
'errors': errors, 'errors': errors,
'redirect': `/${req.params.board}${req.body.thread ? '/thread/' + req.body.thread + '.html' : ''}` 'redirect': `/${req.params.board}${req.body.thread ? '/thread/' + req.body.thread + '.html' : ''}`
}); });
} }
try { try {

@ -38,7 +38,7 @@ router.get('/captcha.html', captchaPage);
router.get('/changepassword.html', changePassword); router.get('/changepassword.html', changePassword);
//logout //logout
router.get('/logout', isLoggedIn, (req, res, next) => { router.get('/logout', (req, res, next) => {
//remove session //remove session
req.session.destroy(); req.session.destroy();

@ -4,5 +4,6 @@ module.exports = (req, res, next) => {
if (req.session.authenticated === true) { if (req.session.authenticated === true) {
return next(); return next();
} }
res.redirect('/login.html'); const board = req.params ? req.params.board : null;
res.redirect(`/login.html${board ? '?goto=/'+board+'/manage.html' : ''}`);
} }

@ -7,6 +7,8 @@ module.exports = async (req, res, next) => {
const username = req.body.username.toLowerCase(); const username = req.body.username.toLowerCase();
const password = req.body.password; const password = req.body.password;
const goto = req.body.goto;
const failRedirect = `/login.html${goto ? '?goto='+goto : ''}`
//fetch an account //fetch an account
let account; let account;
@ -21,7 +23,7 @@ module.exports = async (req, res, next) => {
return res.status(403).render('message', { return res.status(403).render('message', {
'title': 'Forbidden', 'title': 'Forbidden',
'message': 'Incorrect username or password', 'message': 'Incorrect username or password',
'redirect': '/login.html' 'redirect': failRedirect
}); });
} }
@ -44,14 +46,14 @@ module.exports = async (req, res, next) => {
req.session.authenticated = true; req.session.authenticated = true;
//successful login //successful login
return res.redirect('/'); return res.redirect(goto || '/');
} }
return res.status(403).render('message', { return res.status(403).render('message', {
'title': 'Forbidden', 'title': 'Forbidden',
'message': 'Incorrect username or password', 'message': 'Incorrect username or password',
'redirect': '/login.html' 'redirect': failRedirect
}); });
} }

@ -5,12 +5,8 @@ const { buildLogin } = require(__dirname+'/../../build.js')
module.exports = async (req, res, next) => { module.exports = async (req, res, next) => {
try { res.render('login', {
await buildLogin(); 'goto': req.query.goto
} catch (err) { });
return next(err);
}
return res.sendFile(`${uploadDirectory}html/login.html`);
} }

@ -1,5 +1,5 @@
small.footer 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 - const ms = Date.now()-renderStart
span + took #{ms > 0 ? ms/1000 : 0}s - span + took #{ms > 0 ? ms/1000 : 0}s -

@ -2,4 +2,4 @@ nav.navbar
a.nav-item(href='/') Home a.nav-item(href='/') Home
a.nav-item.right(href='/logout') Logout a.nav-item.right(href='/logout') Logout
a.nav-item.right(href=`/${board ? board._id+'/' : 'global'}manage.html`) Manage 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

@ -47,7 +47,7 @@ mixin post(post, truncate, manage=false, globalmanage=false)
each file in post.files each file in post.files
.post-file .post-file
span.post-file-info 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 br
span span
| (#{file.sizeString}, #{file.geometryString} | (#{file.sizeString}, #{file.geometryString}

@ -6,7 +6,7 @@ block head
block content block content
section.form-wrapper.flex-center.mv-10 section.form-wrapper.flex-center.mv-10
form.form-post(action='/forms/login' method='POST') 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 section.postform-row
.postform-label Username .postform-label Username
.required * .required *

Loading…
Cancel
Save