From 0c785ab730997972b573c48d25f958dea5ad62b9 Mon Sep 17 00:00:00 2001 From: nanalelfe Date: Sun, 24 Jul 2016 01:49:46 -0400 Subject: Implemented messaging system. Form neesds to be fixed --- assets/js/script.js | 8 ++++-- node_simple.js | 68 +++++++++++++++++++++++++++++++++++++++++++--- routes/user.js | 51 ++++++++++++++++++++++++++++++++-- views/layouts/layout.hbs | 3 -- views/user_profile_alt.hbs | 58 ++++++++++++++++++++++++++------------- 5 files changed, 158 insertions(+), 30 deletions(-) diff --git a/assets/js/script.js b/assets/js/script.js index f08ca7a..5531c1e 100644 --- a/assets/js/script.js +++ b/assets/js/script.js @@ -6,7 +6,8 @@ function main(){ $("#profile-follows"), $("#profile-friends"), $("#profile-inbox"), - $("#profile-comments")]; + $("#profile-comments"), + $('#profile-send-message')]; function hidePages(){ items.forEach(function(item){ @@ -32,7 +33,7 @@ function main(){ console.log("clicked general"); $("#profile-general").show(); break; - case "Follows": + case "Following": $("#profile-follows").show(); break; case "Friends": @@ -44,6 +45,9 @@ function main(){ case "Comments": $("#profile-comments").show(); break; + case "Send Message": + $('#profile-send-message').show(); + break; default: console.log("Error: User page not found"); } diff --git a/node_simple.js b/node_simple.js index 2976b58..cf5c372 100644 --- a/node_simple.js +++ b/node_simple.js @@ -157,7 +157,6 @@ exports.retrieveFollows = function (user_name, callback) { }); }; - // will add comments ASAP /* callback(success, data/message) => callback(boolean, object/String); * @@ -279,7 +278,7 @@ exports.add_user = function (fields, callbackUser) { if (result == false) { // find out if the user_name is taken - exports.find_user_name( fields[1], callbackUser, function (docs) { + exports.find_user_name( fields[1], function (docs) { if (docs == false) { // if not ... // continue console.log("user name is valid"); @@ -333,7 +332,7 @@ exports.add_user = function (fields, callbackUser) { * This (helper) function returns true IFF user_name already exists in the database * Params: user_name - the user name * */ -exports.find_user_name = function (user_name, callbackUser, callback) { +exports.find_user_name = function (user_name, callback) { // make a connection mongoFactory.getConnection(uri) .then(function (db) { @@ -961,7 +960,7 @@ exports.addAdmin = function (admin_data, callback) { console.log("inside addAdmin"); - // Check if the admin username already exists. If it does, then we don't add the admin_data and return a message. + // Check if the admin username already exists. Also check for user username. If it does, then we don't add the admin_data and return a message. exports.adminExists( admin_data.username , function (error, exists, data, message) { console.log("adminExists: " + message); if (!exists && !error) { @@ -1018,7 +1017,68 @@ exports.adminExists = function (username, callback) { }; +/****************************** MAIL *********************************/ + +/* + * mail_data = { + * sender: sender_username, + * receiver: receiver_username, + * message: message, + * date: date, + * } + * + * callback(success, error, message) + * + */ + +exports.sendMail = function (mail_data, callback) { + exports.find_user_name(mail_data.receiver, function (exist){ + if (exist) { + mongoFactory.getConnection(uri).then(function(db) { + var mail = db.collection('mail'); + + mail.insertOne(mail_data, function(err) { + if (err) { + callback(false, true, 'Error: could not send message.'); + db.close(); + } + else { + callback(true, false, "Message sent."); + db.close(); + } + }); + }); + } else { + callback(false, false, 'The receiver\'s username is undefined.'); + } + }); +} +/* + * + * callback(success, error, data, message) + * Returns the user's inbox (array of message objects) + * + */ + +exports.checkMailbox = function (username, callback) { + + mongoFactory.getConnection(uri).then(function(db) { + + var mail = db.collection('mail'); + + mail.find({receiver: username}).toArray(function (err, data) { + if (err) { + callback(false, true, null, 'Error: could not retrieve inbox messages.'); + } else if (!data) { + callback(false, false, null, 'No inbox.'); + } else { + callback(true, false, data, 'Retrieved inbox'); + } + }); + }); + +} diff --git a/routes/user.js b/routes/user.js index 96cbd67..5fb7fb9 100644 --- a/routes/user.js +++ b/routes/user.js @@ -54,9 +54,32 @@ router.get('/user_profile', loggedIn, isUser, function(req, res, next) { comments.push(obj); } - res.render('user_profile_alt', {comments : comments}); + // GET INBOX + var inbox = []; + dbFile.checkMailbox(req.user.user_name, function(success, error, data, message){ + if (success) { + inbox = data; + } else if (error) { + // Need to redirect to an error page instead. + console.log("Could not retrieve mail."); + } + }); + + // For testing purposes, remove later: + if (!inbox.length) { + var mail_data = { + sender: 'The Dude', receiver: req.user.user_name, + message: 'Whoa look at this', + date: '2016-04-05' + } + } + inbox.push(mail_data); + inbox.push(mail_data); + + res.render('user_profile_alt', {comments : comments, inbox: inbox}); }); + router.get('/signup', loggedOut, function(req, res, next) { res.render('signup', {csrfToken: req.csrfToken(), success: req.session.success, errors: req.session.errors}); req.session.errors = null; @@ -131,6 +154,29 @@ router.post('/signin', loggedOut, function(req, res, next) { }); +router.get('/user_profile/send_message/:id', loggedIn, function(req, res, next) { + var date = new Date(); + var current_date = date.toString().slice(0, 24); + var mail_data = { + sender: req.user.user_name, + receiver: req.body.receiver_username, + message: req.body.message, + date: current_date + } + + dbFile.sendMail(mail_data, function(success, error, message) { + if ((!success && !error) || (error)) { + res.redirect('/user/user_profile', {error: message}); + $('#profile-send-message').show(); + } else { + res.redirect('/user/user_profile', {success: message}); + $('#profile-send-message').show(); + } + }); + + //res.redirect('/user/user_profile'); +}); + module.exports = router; /************** Route protection ********************/ @@ -150,8 +196,9 @@ function loggedOut(req, res, next) { } function isUser(req, res, next) { - if (req.user.email) { + if (req.user && req.user.email) { return next(); } res.redirect('/admin'); } + diff --git a/views/layouts/layout.hbs b/views/layouts/layout.hbs index ddfa945..62e9134 100644 --- a/views/layouts/layout.hbs +++ b/views/layouts/layout.hbs @@ -24,9 +24,6 @@ - {{> header }} diff --git a/views/user_profile_alt.hbs b/views/user_profile_alt.hbs index bad6fe5..652cfee 100644 --- a/views/user_profile_alt.hbs +++ b/views/user_profile_alt.hbs @@ -20,8 +20,9 @@ + {{# if success }} +
+ +

{{ success }}

+
+ {{ else }} + {{# if error }} +
+

{{ error }}

+
+ {{/if}} + {{/if}} +
+

Send Message

+
+
+
+ + +
+
+ + +
+ +
+
+
+ {{# if inbox }}

Inbox

@@ -162,29 +192,19 @@ + {{# each inbox }} - - - - - - - - - - - - - - - - - - + + + + {{/each}}
2016-05-01Great Solution!1The Dude
2016-04-05Woah look at thisLady Lips
2016-02-30I don't get this, help!The Dude
2016-01-15I solved your problemLisa{{ this.date }}{{ this.message }}{{ this.sender }}
+ {{ else }} +

No Messages.

+ {{/if}}
-- cgit v1.2.3 From d50d4e2afd3d72ae9c4a24e41d627f80c32845f7 Mon Sep 17 00:00:00 2001 From: HumairAK Date: Sun, 24 Jul 2016 01:51:18 -0400 Subject: minor fixes --- config/passport.js | 23 +++++++++++++++++++++-- node_simple.js | 31 ++++++++++++++++++++++++------- routes/index.js | 11 +++-------- routes/user.js | 2 +- 4 files changed, 49 insertions(+), 18 deletions(-) diff --git a/config/passport.js b/config/passport.js index 27f835f..66c134d 100644 --- a/config/passport.js +++ b/config/passport.js @@ -7,20 +7,39 @@ var exports = module.exports = {}; var encryptPassword = exports.encryptPassword = function (password) { return bcrypt.hashSync(password, bcrypt.genSaltSync(5), null); -} +}; var comparePassword = function (password1, password2) { return bcrypt.compareSync(password1, password2); -} +}; + passport.serializeUser(function (user, done) { + console.log("In serialize User"); + console.log(user); done(null, user); }); passport.deserializeUser(function(user, done) { + console.log("In de-serialize User: " + user.email); 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] diff --git a/node_simple.js b/node_simple.js index 74a28db..cb649c2 100644 --- a/node_simple.js +++ b/node_simple.js @@ -279,11 +279,11 @@ exports.add_user = function (fields, callbackUser) { }; // find out if this user already exists by checking their email - exports.find_user( fields[0] ,callbackUser, function (result, callbackUser) { + exports.find_user( fields[0], function (result) { if (result == false) { // find out if the user_name is taken - exports.find_user_name( fields[1], callbackUser, function (docs) { + exports.find_user_name( fields[1], function (docs) { if (docs == false) { // if not ... // continue console.log("user name is valid"); @@ -337,7 +337,7 @@ exports.add_user = function (fields, callbackUser) { * This (helper) function returns true IFF user_name already exists in the database * Params: user_name - the user name * */ -exports.find_user_name = function (user_name, callbackUser, callback) { +exports.find_user_name = function (user_name, callback) { // make a connection mongoFactory.getConnection(uri) .then(function (db) { @@ -364,6 +364,7 @@ exports.find_user_name = function (user_name, callbackUser, callback) { */ exports.retrieveUser = function (username, callback) { + mongoFactory.getConnection(uri).then(function (db) { var users = db.collection('users'); @@ -392,7 +393,6 @@ exports.retrieveUser = function (username, callback) { */ exports.retrievePassword = function (username, callback) { - mongoFactory.getConnection(uri).then(function (db) { var collection = db.collection('logins'); @@ -415,7 +415,7 @@ exports.retrievePassword = function (username, callback) { /* * This (helper) function returns true IFF email already exists in the database * */ -exports.find_user = function (email, callbackUser, callback) { +exports.find_user = function (email, callback) { // make a connection console.log("inside find_user"); mongoFactory.getConnection(uri) @@ -425,10 +425,10 @@ exports.find_user = function (email, callbackUser, callback) { logins.find( { email: email } ).toArray(function (err, result) { if (err) throw err; else if (result.length == 0) { // nothing was found so this user is new - callback(false, callbackUser); + callback(false); } else { - callback(true, callbackUser); + callback(true); } }); // db.close(); @@ -1024,6 +1024,23 @@ exports.adminExists = function (username, callback) { +exports.findUserByID = function (id, callback) { + // make a connection + console.log("inside findUserByID"); + mongoFactory.getConnection(uri) + .then(function (db) { + var logins = db.collection('logins'); + logins.find( { _id : id }, function (err, result) { + callback(err, result); + db.close(); + }); + }) + .catch(function (err) { + console.err(err); + }) +}; + + diff --git a/routes/index.js b/routes/index.js index 6d5fdac..961a60d 100644 --- a/routes/index.js +++ b/routes/index.js @@ -11,7 +11,7 @@ var bcrypt = require('bcrypt-nodejs'); /* Render/GET homepage. */ router.get('/', function(req, res, next) { - addFirstAdmin(); + //addFirstAdmin(); res.render('index'); req.session.errors = null; req.session.success = null; @@ -75,7 +75,6 @@ router.get('/exams/:id', function(req, res, next) { minExamInfoArray.push(minExamInfo); } } - console.log(minExamInfoArray); res.render('exams', {query: req.params.id, result: minExamInfoArray}); }); }); @@ -137,9 +136,6 @@ router.get('/questions/:exam_id', function (req,res) { }; res.render('questions', {query: qList, examInfo: examInfo}); }); - - - console.log(exam); }); /*dbFile.get_exam_info_by_ID(examID, function (questions) { @@ -193,7 +189,6 @@ router.get('/solutions/:exam_id/:q_num', function (req, res) { soln.commentCount = soln.comments.length; }); res.render('user_solutions', {query: solutions, examID: examID, qID: qID}); - console.log(solutions); }); }); @@ -204,11 +199,11 @@ router.post('/add_solutions/submit', function (req, res) { /**** Helpers ****/ function addFirstAdmin() { - console.log("Inside addFirstAdmin()"); + //console.log("Inside addFirstAdmin()"); //admin_data = {fname: firstname, lname: lastname, username: username, password: password} var password = 'lamptable'; var hash_pwd = passport_file.encryptPassword(password); - console.log("Admin hashed: " + hash_pwd); + //console.log("Admin hashed: " + hash_pwd); var admin_data = { fname: 'Admin', lname: 'Admin', diff --git a/routes/user.js b/routes/user.js index 6ae0d80..1e5a006 100644 --- a/routes/user.js +++ b/routes/user.js @@ -91,7 +91,7 @@ router.post('/submit_solution/:examID/:qID', function(req,res){ //Redirect to solutions page again res.redirect('/solutions/' + examID + '/' + qID); - + }); }); -- cgit v1.2.3 From cba46a33d60a2ccb42745e6cf3ad5858f1bf98a3 Mon Sep 17 00:00:00 2001 From: HumairAK Date: Sun, 24 Jul 2016 01:51:28 -0400 Subject: minor fixes --- node_simple.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/node_simple.js b/node_simple.js index cb649c2..af6f4ef 100644 --- a/node_simple.js +++ b/node_simple.js @@ -1023,7 +1023,7 @@ exports.adminExists = function (username, callback) { - +//testing exports.findUserByID = function (id, callback) { // make a connection console.log("inside findUserByID"); -- cgit v1.2.3 From c7c6495993e29d1d51defcad6925274e9efa0bc8 Mon Sep 17 00:00:00 2001 From: HumairAK Date: Sun, 24 Jul 2016 01:53:51 -0400 Subject: minor fixes --- config/passport.js | 18 ++---------------- 1 file changed, 2 insertions(+), 16 deletions(-) diff --git a/config/passport.js b/config/passport.js index 66c134d..6cb6292 100644 --- a/config/passport.js +++ b/config/passport.js @@ -15,30 +15,16 @@ var comparePassword = function (password1, password2) { passport.serializeUser(function (user, done) { - console.log("In serialize User"); - console.log(user); + done(null, user); }); passport.deserializeUser(function(user, done) { - console.log("In de-serialize User: " + user.email); - done(null, user); -}); -/* -passport.serializeUser(function (user, done) { - console.log("In serialize User"); - console.log(user); - done(null, user._id); + done(null, user); }); -passport.deserializeUser(function(id, done) { - console.log("In de-serialize User"); - dbFile.findUserByID(id, function(err, user){ - done(err, user); - }); -});*/ -- cgit v1.2.3