Advertisement
tty30

Untitled

Mar 31st, 2015
254
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var UsersDAO = require('../users').UsersDAO
  2.   , SessionsDAO = require('../sessions').SessionsDAO;
  3.  
  4. /* The SessionHandler must be constructed with a connected db */
  5. function SessionHandler (db) {
  6.     "use strict";
  7.  
  8.     var users = new UsersDAO(db);
  9.     var sessions = new SessionsDAO(db);
  10.  
  11.     this.isLoggedInMiddleware = function(req, res, next) {
  12.         var session_id = req.cookies.session;
  13.         sessions.getUsername(session_id, function(err, username) {
  14.             "use strict";
  15.  
  16.             if (!err && username) {
  17.                 req.username = username;
  18.             }
  19.             return next();
  20.         });
  21.     }
  22.  
  23.     this.displayLoginPage = function(req, res, next) {
  24.         "use strict";
  25.         return res.render("login", {username:"", password:"", login_error:""})
  26.     }
  27.  
  28.     this.handleLoginRequest = function(req, res, next) {
  29.         "use strict";
  30.  
  31.         var username = req.body.username;
  32.         var password = req.body.password;
  33.  
  34.         console.log("user submitted username: " + username + " pass: " + password);
  35.  
  36.         users.validateLogin(username, password, function(err, user) {
  37.             "use strict";
  38.  
  39.             if (err) {
  40.                 if (err.no_such_user) {
  41.                     return res.render("login", {username:username, password:"", login_error:"No such user"});
  42.                 }
  43.                 else if (err.invalid_password) {
  44.                     return res.render("login", {username:username, password:"", login_error:"Invalid password"});
  45.                 }
  46.                 else {
  47.                     // Some other kind of error
  48.                     return next(err);
  49.                 }
  50.             }
  51.  
  52.             sessions.startSession(user['_id'], function(err, session_id) {
  53.                 "use strict";
  54.  
  55.                 if (err) return next(err);
  56.  
  57.                 res.cookie('session', session_id);
  58.                 return res.redirect('/welcome');
  59.             });
  60.         });
  61.     }
  62.  
  63.     this.displayLogoutPage = function(req, res, next) {
  64.         "use strict";
  65.  
  66.         var session_id = req.cookies.session;
  67.         sessions.endSession(session_id, function (err) {
  68.             "use strict";
  69.  
  70.             // Even if the user wasn't logged in, redirect to home
  71.             res.cookie('session', '');
  72.             return res.redirect('/');
  73.         });
  74.     }
  75.  
  76.     this.displaySignupPage =  function(req, res, next) {
  77.         "use strict";
  78.         res.render("signup", {username:"", password:"",
  79.                                     password_error:"",
  80.                                     email:"", username_error:"", email_error:"",
  81.                                     verify_error :""});
  82.     }
  83.  
  84.     function validateSignup(username, password, verify, email, errors) {
  85.         "use strict";
  86.         var USER_RE = /^[a-zA-Z0-9_-]{3,20}$/;
  87.         var PASS_RE = /^.{3,20}$/;
  88.         var EMAIL_RE = /^[\S]+@[\S]+\.[\S]+$/;
  89.  
  90.         errors['username_error'] = "";
  91.         errors['password_error'] = "";
  92.         errors['verify_error'] = "";
  93.         errors['email_error'] = "";
  94.  
  95.         if (!USER_RE.test(username)) {
  96.             errors['username_error'] = "invalid username. try just letters and numbers";
  97.             return false;
  98.         }
  99.         if (!PASS_RE.test(password)) {
  100.             errors['password_error'] = "invalid password.";
  101.             return false;
  102.         }
  103.         if (password != verify) {
  104.             errors['verify_error'] = "password must match";
  105.             return false;
  106.         }
  107.         if (email != "") {
  108.             if (!EMAIL_RE.test(email)) {
  109.                 errors['email_error'] = "invalid email address";
  110.                 return false;
  111.             }
  112.         }
  113.         return true;
  114.     }
  115.  
  116.     this.handleSignup = function(req, res, next) {
  117.         "use strict";
  118.  
  119.         var email = req.body.email
  120.         var username = req.body.username
  121.         var password = req.body.password
  122.         var verify = req.body.verify
  123.  
  124.         // set these up in case we have an error case
  125.         var errors = {'username': username, 'email': email}
  126.         if (validateSignup(username, password, verify, email, errors)) {
  127.             users.addUser(username, password, email, function(err, user) {
  128.                 "use strict";
  129.  
  130.                 if (err) {
  131.                     // this was a duplicate
  132.                     if (err.code == '11000') {
  133.                         errors['username_error'] = "Username already in use. Please choose another";
  134.                         return res.render("signup", errors);
  135.                     }
  136.                     // this was a different error
  137.                     else {
  138.                         return next(err);
  139.                     }
  140.                 }
  141.  
  142.                 sessions.startSession(user['_id'], function(err, session_id) {
  143.                     "use strict";
  144.  
  145.                     if (err) return next(err);
  146.  
  147.                     res.cookie('session', session_id);
  148.                     return res.redirect('/welcome');
  149.                 });
  150.             });
  151.         }
  152.         else {
  153.             console.log("user did not validate");
  154.             return res.render("signup", errors);
  155.         }
  156.     }
  157.  
  158.     this.displayWelcomePage = function(req, res, next) {
  159.         "use strict";
  160.  
  161.         if (!req.username) {
  162.             console.log("welcome: can't identify user...redirecting to signup");
  163.             return res.redirect("/signup");
  164.         }
  165.  
  166.         return res.render("welcome", {'username':req.username})
  167.     }
  168. }
  169.  
  170. module.exports = SessionHandler;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement