var express = require('express'); var router = express.Router(); var csrf = require('csurf'); // Cross-Site Request Forgery prevention var passport = require('passport'); var csrfProtection = csrf(); router.use(csrfProtection); // router is protected router.get('/logout', function (req, res, next) { req.logout(); res.redirect('/'); }); /* Render/GET user_profile page */ router.get('/user_profile', loggedIn, function(req, res, next) { res.render('user_profile_alt'); }); router.get('/signup', function(req, res, next) { res.render('signup', {csrfToken: req.csrfToken(), success: req.session.success, errors: req.session.errors}); req.session.errors = null; }); router.get('/signup/failed', function(req, res, next) { var msg = req.flash('error'); res.render('signup', {csrfToken: req.csrfToken(), success: req.session.success, errors: req.session.errors, flashMsg: msg}); }); router.get('/signin', function (req, res, next) { var msg = req.flash('error'); res.render('signin', { csrfToken: req.csrfToken(), success: req.session.success, errors: req.session.errors, flashMsg: msg }); }); router.post('/signup', loggedOut, function(req, res, next) { req.check('fname', 'Please enter a valid first name.').notEmpty().withMessage('First name required.').isAlpha(); req.check('lname', 'Please enter a valid first name.').notEmpty().withMessage('Last name required.').isAlpha(); req.check('email', 'Enter a valid Email address').notEmpty().withMessage('Email required').isEmail(); req.check('usrname', 'Enter a valid username').notEmpty().withMessage('Username required.'); req.check('password', "Password should be between 6 and 12 characters.") .notEmpty().withMessage('Password required').isLength({min: 6, max: 12}); req.check('password', "The confirmation password doesn't match.").equals(req.body.confirmPassword); req.check('phone_num', 'Please enter a valid phone number').isMobilePhone('en-CA').optional(); // password has to be at least 4 characters long var errors = req.validationErrors(); if (errors) { req.session.errors = errors; req.session.success = false; res.redirect('/signup'); } else { console.log("GOT SUCCESS"); passport.authenticate('local_signup', { successRedirect: '/user/user_profile', failureRedirect: '/user/signup/failed', failureFlash: true })(req, res); } //res.redirect('/signup'); }); router.post('/signin', loggedOut, function(req, res, next) { req.check('usrname', 'Username field is empty.').notEmpty(); req.check('password', "Password field is empty.").notEmpty(); // password has to be at least 4 characters long var errors = req.validationErrors(); if (errors) { req.session.errors = errors; req.session.success = false; res.redirect('/signin'); } else { console.log("GOT SUCCESS"); passport.authenticate('local_signin', { successRedirect: '/user/user_profile', failureRedirect: '/user/signin', failureFlash: true })(req, res); } //res.redirect('/signup'); }); module.exports = router; function loggedIn(req, res, next) { if (req.isAuthenticated()) { return next(); } res.redirect('/'); } function loggedOut(req, res, next) { if (!req.isAuthenticated()) { return next(); } res.redirect('/'); }