aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app.js10
-rw-r--r--config/passport.js18
-rw-r--r--routes/index.js81
-rw-r--r--routes/user.js115
-rw-r--r--views/partials/header.hbs14
-rw-r--r--views/signin.hbs2
-rw-r--r--views/signup.hbs2
-rw-r--r--views/user_profile_alt.hbs14
8 files changed, 159 insertions, 97 deletions
diff --git a/app.js b/app.js
index 8b469f9..a96a932 100644
--- a/app.js
+++ b/app.js
@@ -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>