diff --git a/models/index.js b/models/index.js index be02043..f9d4be5 100644 --- a/models/index.js +++ b/models/index.js @@ -57,4 +57,6 @@ Object.keys(db).forEach(modelName => { db.sequelize = sequelize; db.Sequelize = Sequelize; +sequelize.sync(); + module.exports = db; diff --git a/routes/guestbook.js b/routes/guestbook.js index 8169aa5..19667f8 100644 --- a/routes/guestbook.js +++ b/routes/guestbook.js @@ -2,13 +2,8 @@ const Helpers = require('../helpers'); const Sequelize = require('../models'); const html_escape = require('html-escaper'); -const send_error = async (req, res, error, data) => { - res.send(await Helpers.ViewLoader.load('guestbook.pug', { - current_route: req.originalUrl, - ip: req.ip, - errors: error, - data - })); +const send_error = async (res, error) => { + return res.redirect('/guestbook?error=' + encodeURIComponent(error)); }; async function handler(req, res, next) { @@ -43,8 +38,28 @@ async function submit(req, res, next) { const { name, email, message } = req.body; const hidemail = req.body.hidemail ? (req.body.hidemail == 'on' ? true : false) : false; + let errors = []; + if (message.length >= 512) { - res.redirect('/guestbook?error=' + encodeURIComponent('Maximum length is 512 characters.')); + errors.push('Maximum length is 512 characters.'); + } + if (name == '') { + errors.push('Name must be specified.'); + } + if ( + !email + .toLowerCase() + .match(/^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/) + && + email !== '' + ) { + errors.push('Email is of invalid format.'); + } + if (message == '') { + errors.push('Message should not be empty!'); + } + if (errors.length !== 0) { + send_error(res, "

" + errors.join('
') + "

"); return; } diff --git a/view/guestbook.pug b/view/guestbook.pug index a0eb8bf..042cc69 100644 --- a/view/guestbook.pug +++ b/view/guestbook.pug @@ -100,7 +100,7 @@ block content a(href='mailto:' + entry.email)= entry.email else | Email: - span(class='gb_hidden_mail' style='width:' + (10 * entry.email.length) + 'px') + span(class='gb_hidden_mail' style='width:' + (10 * (entry.email || '.').length) + 'px') br | IP: #{entry.ip} br