diff options
| -rw-r--r-- | app.js | 10 | ||||
| -rw-r--r-- | config/passport.js | 18 | ||||
| -rw-r--r-- | routes/index.js | 81 | ||||
| -rw-r--r-- | routes/user.js | 115 | ||||
| -rw-r--r-- | views/partials/header.hbs | 14 | ||||
| -rw-r--r-- | views/signin.hbs | 2 | ||||
| -rw-r--r-- | views/signup.hbs | 2 | ||||
| -rw-r--r-- | views/user_profile_alt.hbs | 14 |
8 files changed, 159 insertions, 97 deletions
@@ -12,6 +12,7 @@ var passport = require('passport'); var flash = require('connect-flash'); var routes = require('./routes/index'); +var userRoutes = require('./routes/user'); var app = express(); // Templating engine, we are using handlebars @@ -39,8 +40,17 @@ require('./config/passport'); // simply need to load it /*LOADS ALL STATIC FILES FROM THE DIRECTORY __dirname*/ app.use(express.static(__dirname)); + +// Needed to style the header based on the whether the user is signed in or not +// Gives errors for admin - need to figure out +app.use(function(req, res, next) { + res.locals.login = req.isAuthenticated(); // global variable + next(); +}); + // Allows us to customize express routing // in a separate file. +app.use('/user', userRoutes); app.use('/', routes); module.exports = app; diff --git a/config/passport.js b/config/passport.js index 71e8a15..19acd7f 100644 --- a/config/passport.js +++ b/config/passport.js @@ -1,6 +1,3 @@ -/** - * Created by nanalelfe on 2016-07-20. - */ var passport = require('passport'); var dbFile = require("../node_simple.js"); var LocalStrategy = require('passport-local').Strategy; @@ -52,7 +49,20 @@ passport.use('local_signup', new LocalStrategy({ else { console.log("ELSE"); - return done(null, fields); + var user_data = { + email: fields[0], + user_name: fields[1], + f_name: fields[2], + l_name: fields[3], + university: fields[4], + department: fields[5], + answered: 0, + messages: 0, + comments: 0, + phone_num: fields[7], + followers: [] + }; + return done(null, user_data); } }); diff --git a/routes/index.js b/routes/index.js index 51e1cd2..a0a66d0 100644 --- a/routes/index.js +++ b/routes/index.js @@ -1,11 +1,6 @@ var dbFile = require("../node_simple.js"); 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 /* Render/GET homepage. */ router.get('/', function(req, res, next) { @@ -24,11 +19,6 @@ router.get('/user_solutions', function(req, res, next) { res.render('user_solutions'); }); -/* Render/GET user_profile page */ -router.get('/user_profile', function(req, res, next) { - res.render('user_profile_alt'); -}); - /* Render/GET questions page */ router.get('/questions', function(req, res, next) { res.render('questions'); @@ -155,79 +145,8 @@ router.get('/questions/:exam_id', function (req,res) { }); }); -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', 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').optional().isMobilePhone('en-CA'); - // 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_profile', - failureRedirect: '/signup/failed', - failureFlash: true - })(req, res); - - } - //res.redirect('/signup'); - -}); - -router.post('/signin', 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_profile', - failureRedirect: '/signin', - failureFlash: true - })(req, res); - - } - //res.redirect('/signup'); - -}); - /**** Helpers ****/ function getExamsForCourseCode(courseCode) { diff --git a/routes/user.js b/routes/user.js new file mode 100644 index 0000000..a8e90bb --- /dev/null +++ b/routes/user.js @@ -0,0 +1,115 @@ +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('/'); +}
\ No newline at end of file diff --git a/views/partials/header.hbs b/views/partials/header.hbs index 4e7f1c2..9140302 100644 --- a/views/partials/header.hbs +++ b/views/partials/header.hbs @@ -36,15 +36,23 @@ <li><a href="#">Fourth Year</a></li> </ul> </li> - <li><a href="/signin" >Sign In</a></li> + {{# if login }} + <li><a href="/user/user_profile">Profile Page</a></li> + {{ else }} + <li><a href="/user/signin" >Sign In</a></li> + {{/if}} <li><a href="/admin">Admin Panel</a></li> <!--<li><a href="#" data-toggle="modal" data-target=".registration-window">Sign up</a></li>--> - <li><a href="/signup" >Sign up</a></li> + {{# if login}} + <li><a href="/user/logout">Logout</a> </li> + {{ else }} + <li><a href="/user/signup" >Sign up</a></li> + {{/if}} <li class="dropdown"> <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Links <span class="caret"></span></a> <ul class="dropdown-menu"> <li><a tabindex="-1" href="/user_solutions">Solutions Page</a></li> - <li><a href="/user_profile">Profile Page</a></li> + <li><a href="/user/user_profile">Profile Page</a></li> <li><a href="/questions">Questions Page</a></li> <li><a href="/exams">Exams Pages</a></li> </ul> diff --git a/views/signin.hbs b/views/signin.hbs index 76b55f8..81d0f81 100644 --- a/views/signin.hbs +++ b/views/signin.hbs @@ -26,7 +26,7 @@ {{/if}} <h2><i class="fa fa-sign-in" aria-hidden="true"></i> Sign In</h2> - <form action="/signin" method="post"> + <form action="/user/signin" method="post"> <div class="form-group"> <input type="text" class="form-control" placeholder="New Username" name="usrname"> </div> diff --git a/views/signup.hbs b/views/signup.hbs index b7f3600..463e347 100644 --- a/views/signup.hbs +++ b/views/signup.hbs @@ -28,7 +28,7 @@ <h2><i class="fa fa-user-plus" aria-hidden="true"></i> Sign Up</h2> - <form action="/signup" method="post"> + <form action="/user/signup" method="post"> <div class="form-group"> <input type="text" class="form-control" placeholder="First Name" name="fname"> </div> diff --git a/views/user_profile_alt.hbs b/views/user_profile_alt.hbs index 624e2c6..8b102b8 100644 --- a/views/user_profile_alt.hbs +++ b/views/user_profile_alt.hbs @@ -39,7 +39,7 @@ <div class="row" id="profile-general"> <!-- User Image --> <div class="col-md-3 col-lg-3 " align="center"> - <img alt="User Pic" src="assets/images/avatar.png" + <img alt="User Pic" src="../assets/images/avatar.png" class="img-circle img-responsive"> </div> <!-- User Details --> @@ -87,7 +87,7 @@ <tr> <th> <img class="img-circle img-responsive" - src="assets/images/misc/user1.jpeg" alt="avatar"> + src="../assets/images/misc/user1.jpeg" alt="avatar"> </th> <th> <h4>The Dude</h4> @@ -98,7 +98,7 @@ <tr> <th> <img class="img-circle img-responsive" - src="assets/images/misc/user2.jpeg" alt="avatar"> + src="../assets/images/misc/user2.jpeg" alt="avatar"> </th> <th> <h4>He-Man</h4> @@ -108,7 +108,7 @@ <tr> <th> <img class="img-circle img-responsive" - src="assets/images/misc/user3.jpeg" alt="avatar"> + src="../assets/images/misc/user3.jpeg" alt="avatar"> </th> <th> <h4>Lady Lips</h4> @@ -128,7 +128,7 @@ <tr> <th> <img class="img-circle img-responsive" - src="assets/images/misc/user2.jpeg" alt="avatar"> + src="../assets/images/misc/user2.jpeg" alt="avatar"> </th> <th> <h4>He-Man</h4> @@ -138,7 +138,7 @@ <tr> <th> <img class="img-circle img-responsive" - src="assets/images/misc/user5.jpeg" alt="avatar"> + src="../assets/images/misc/user5.jpeg" alt="avatar"> </th> <th> <h4>Jay Leno</h4> @@ -148,7 +148,7 @@ <tr> <th> <img class="img-circle img-responsive" - src="assets/images/misc/user6.jpeg" alt="avatar"> + src="../assets/images/misc/user6.jpeg" alt="avatar"> </th> <th> <h4>Lisa Simpson</h4> |
