aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--config/passport.js70
-rw-r--r--node_simple.js86
-rw-r--r--routes/index.js10
-rw-r--r--routes/user.js15
-rw-r--r--views/layouts/layout.hbs11
-rw-r--r--views/verification.hbs10
6 files changed, 166 insertions, 36 deletions
diff --git a/config/passport.js b/config/passport.js
index be8cf10..8b3c0ad 100644
--- a/config/passport.js
+++ b/config/passport.js
@@ -28,23 +28,6 @@ passport.deserializeUser(function(user, done) {
done(null, user);
});
-/*
-passport.serializeUser(function (user, done) {
- console.log("In serialize User");
- console.log(user);
- done(null, user._id);
-});
-
-
-passport.deserializeUser(function(id, done) {
- console.log("In de-serialize User");
- dbFile.findUserByID(id, function(err, user){
- done(err, user);
- });
-});*/
-
-
-
// fields - [email, user_name, f_name, l_name, uni, department, password, phone_num]
passport.use('local_signup', new LocalStrategy({
@@ -142,15 +125,58 @@ passport.use('local_signin', new LocalStrategy({
});
}));
+
+/**
+ * verification = {
+ * username: username
+ * facebook: {
+ * id: id,
+ * token: token,
+ * name: name,
+ * email: email
+ * }
+ * }
+ */
+
passport.use(new FacebookStrategy({
clientID: configAuth.facebookAuth.clientID,
clientSecret: configAuth.facebookAuth.clientSecret,
- callbackURL: configAuth.facebookAuth.callbackURL
+ callbackURL: configAuth.facebookAuth.callbackURL,
+ passReqToCallback: true
+
},
- function(accessToken, refreshToken, profile, done) {
- User.findOrCreate(..., function(err, user) {
- if (err) { return done(err); }
- done(null, user);
+ function(req, accessToken, refreshToken, profile, done) {
+ console.log("Profile: ");
+ console.log(profile);
+ dbFile.userVerifiedBefore(req.user.user_name, function(err, data) {
+ if (err) {
+ return done(err);
+ } else if (data.length) {
+ if (data[0].facebookID == profile.id) {
+ var user = req.user;
+ user.login_info = data[0];
+ return done(null, user);
+ } else {
+ return done(null, false, {message: "The verification account doesn't match."});
+ }
+ } else {
+ var verification = {
+ username : req.user.user_name,
+ facebookID : profile.id,
+ facebookToken : accessToken
+
+ }
+ console.log(verification);
+ dbFile.addVerification(verification, function (err) {
+ if (err) {
+ return done(err);
+ } else {
+ var user = req.user;
+ user.login_info = verification;
+ return done(null, user);
+ }
+ });
+ }
});
}
)); \ No newline at end of file
diff --git a/node_simple.js b/node_simple.js
index e04eccf..c0595d3 100644
--- a/node_simple.js
+++ b/node_simple.js
@@ -455,7 +455,8 @@ exports.retrieve_userSolutions_count = function (username, callback) {
* IFF both the email and the user_name are not in the database already.
* If either of them exist, the user is NOT added.
*
- * @param {string[]} fields: [email, user_name, f_name, l_name, uni, department, password, phone_num]
+ * @param {string[]} fields: [email, user_name, f_name, l_name, uni, department, password, phone_num, facebookId, facebookToken,
+ * facebookName, facebookEmail]
* @param {function} callbackUser: of the form (<boolean1>, <boolean2>, <string>)
* where, <boolean1> -
* <boolean2> -
@@ -539,6 +540,89 @@ exports.add_user = function (fields, callbackUser) {
});
};
+
+
+
+/*
+ *
+ * var login_data = {
+ facebook: {
+ id: fields[8],
+ token: fields[9],
+ name: fields[10],
+ email: fields[11]
+ }
+ };
+ *
+ */
+
+
+
+
+exports.verifyExists = function(login_id, callBack) {
+ mongoFactory.getConnection(uri)
+ .then(function (db) {
+ var verif = db.collection('verifications');
+
+ verif.find( { facebookID : login_id } ).toArray(function(err, result) {
+ console.log("VERIF Y EIXSTS: ");
+ console.log(result);
+ if (err) {
+ throw err;
+ } else {
+ callBack(false, result);
+ }
+
+ });
+ });
+}
+
+
+exports.userVerifiedBefore = function(username, callback) {
+ mongoFactory.getConnection(uri)
+ .then(function (db) {
+ var verif = db.collection('verifications');
+
+ verif.find( { username : username } ).toArray(function(err, result) {
+ if (err) {
+ callback(true, null);
+ } else {
+ callback(false, result);
+ }
+
+ });
+ });
+}
+
+
+/**
+ * verification = {
+ * username: username
+ * facebook: {
+ * id: id,
+ * token: token,
+ * name: name,
+ * email: email
+ * }
+ * }
+ */
+
+exports.addVerification = function(verification, callBack) {
+ mongoFactory.getConnection(uri)
+ .then(function (db) {
+ var verif = db.collection('verifications');
+
+ verif.insertOne(verification, function (err) {
+ if (err) {
+ callBack(true);
+ } else {
+ callBack(false);
+ }
+ })
+ });
+}
+
+
/**
* This (helper) function returns true IFF user_name already exists in the database
*
diff --git a/routes/index.js b/routes/index.js
index b3336dc..ed79f12 100644
--- a/routes/index.js
+++ b/routes/index.js
@@ -7,6 +7,7 @@ router.use(csrfProtection); // router is protected
// Remove later
var passport_file = require('../config/passport.js');
var bcrypt = require('bcrypt-nodejs');
+var passport = require('passport');
/* Render/GET homepage. */
router.get('/', function(req, res, next) {
@@ -250,15 +251,16 @@ router.get('/solutions/:exam_id/:q_num', function (req, res) {
// Redirect the user to Facebook for authentication. When complete,
// Facebook will redirect the user back to the application at
// /auth/facebook/callback
-app.get('/auth/facebook', passport.authenticate('facebook'));
+router.get('/auth/facebook', passport.authenticate('facebook'));
// Facebook will redirect the user to this URL after approval. Finish the
// authentication process by attempting to obtain an access token. If
// access was granted, the user will be logged in. Otherwise,
// authentication has failed.
-app.get('/auth/facebook/callback',
- passport.authenticate('facebook', { successRedirect: '/user/user_profile',
- failureRedirect: '/signin' }));
+router.get('/auth/facebook/callback',
+ passport.authenticate('facebook', {
+ successRedirect: '/user/user_profile',
+ failureRedirect: '/user/logout' }));
diff --git a/routes/user.js b/routes/user.js
index 74c5427..7270a9f 100644
--- a/routes/user.js
+++ b/routes/user.js
@@ -20,7 +20,6 @@ router.get('/logout', loggedIn, function (req, res, next) {
router.get('/user_profile', loggedIn, isUser, function(req, res, next) {
req.session.messages = null;
-
var comments = [];
var inbox = [];
var error = null;
@@ -141,6 +140,9 @@ router.get('/signin', loggedOut, function (req, res, next) {
});
});
+router.get('/verify', function(req, res, next) {
+ res.render('verification', {noHeader: true});
+});
router.post('/signup', loggedOut, function(req, res, next) {
req.assert('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();
@@ -163,7 +165,7 @@ router.post('/signup', loggedOut, function(req, res, next) {
} else {
console.log("GOT SUCCESS");
passport.authenticate('local_signup', {
- successRedirect: '/user/user_profile',
+ successRedirect: '/user/verify',
failureRedirect: '/user/signup/failed',
failureFlash: true
})(req, res);
@@ -182,7 +184,7 @@ router.post('/signin', loggedOut, function(req, res, next) {
res.redirect('/signin');
} else {
passport.authenticate('local_signin', {
- successRedirect: '/user/user_profile',
+ successRedirect: '/user/verify',
failureRedirect: '/user/signin',
failureFlash: true
})(req, res);
@@ -191,6 +193,7 @@ router.post('/signin', loggedOut, function(req, res, next) {
});
+
router.post('/user_profile/send_message', loggedIn, function(req, res, next) {
if (req.user.user_name === req.body.receiver_username) {
req.session.messages = {error : 'You cannot send a message to yourself.'};
@@ -333,10 +336,6 @@ router.post('/solution/vote/:examID/:qID/:solID', function(req, res, next){
res.redirect('/solutions/' + examID + '/' + qID);
}
-
-
-
-
});
router.post('/follow_exam/:examID',function (req, res) {
@@ -356,6 +355,8 @@ router.post('/follow_exam/:examID',function (req, res) {
});
+
+
module.exports = router;
/************** Route protection ********************/
diff --git a/views/layouts/layout.hbs b/views/layouts/layout.hbs
index b9895a5..76dddc0 100644
--- a/views/layouts/layout.hbs
+++ b/views/layouts/layout.hbs
@@ -29,9 +29,16 @@
</head>
<body>
- {{> header }}
+ {{# if noHeader}}
+ {{else}}
+ {{> header }}
+ {{/if}}
+
{{{ body }}}
- {{> footer }}
+ {{# if noHeader}}
+ {{else}}
+ {{> footer }}
+ {{/if}}
{{> login }}
{{> registration }}
</body>
diff --git a/views/verification.hbs b/views/verification.hbs
new file mode 100644
index 0000000..564af50
--- /dev/null
+++ b/views/verification.hbs
@@ -0,0 +1,10 @@
+<main id="solutions-main">
+ <div class="container">
+ <div class="jumbotron text-center">
+ <h3><span class="fa fa-lock"></span> Verification</h3>
+
+ <p>Login with:</p>
+ <a href="/auth/facebook" class="btn btn-primary"><span class="fa fa-facebook"></span> Facebook</a>
+ </div>
+ </div>
+</main> \ No newline at end of file