Jump To …

user.js

routes/
var bcrypt = require('bcrypt')
, _ = require('underscore')
, validator = require("../lib/requestValidator")
, sqlHelper = require("../lib/sqlHelper");
 

exports.login = {
  validator:validator.makeValidator({
    canOnly:['email','password']
  }),
  route:function (req, res) {
    clientPool.acquire(function(err,mysql) {
      if(err){
        console.log("can't get mysql con",err);
        res.send(500);
        return false;
      }
      mysql.query("SELECT * FROM `user` WHERE `email` = ? LIMIT 1 ;",[req.body.email],function(err,users) {
        if(err) {
          console.log(err);
          clientPool.releaseConnection(mysql);
          return false;
        }
        if(!_.isEmpty(users)) {
          bcrypt.compare(req.body.password,users[0].password,function(err, result) {
            if(result) {
              req.session.userID = users[0].userID;
              req.session.numResponses = users[0].numResponses;
              req.session.numNeeded = users[0].numNeeded;
              res.redirect("/user/me");
              mysql.query("UPDATE LOW_PRIORITY `user` SET `dtLastLoggedIn` = CURRENT_TIMESTAMP, `numLogins` = `numLogins` + 1 WHERE `userID` = ?",[users[0].userID],function(err) {
                if(err) {
                  console.log(err);
                  clientPool.releaseConnection(mysql);
                  return false;
                }
                clientPool.releaseConnection(mysql);
              })
            } else {
              clientPool.releaseConnection(mysql);
              res.send(401,{status:'failed'});
            }
          });
        } else {
          res.send(401,{status:'failed'});
        }
      });
    });
  }
};

exports.logout = function (req, res) {
  delete req.session.userID;
  res.redirect('/index.html');
};  

exports.create = {
  validate:validator.makeValidator({
    canOnly:["password","name","pronoun","email","points","div","age","subFree"],
    types:{
      points:"int",
      div:"int",
      subFree:"int"
    }
  }),
  route:function(req,res) {
    var parts = req.body.email.split("@");
    if(isNaN(parts[0].slice(-2)) && parts[1] !== "hampshire.edu"){
      res.send(400,{status:"failed",message:"Users must have a valid student email address"});
      return false;
    }
    bcrypt.genSalt(10, function(err, salt) {
      if(err) {
        console.log("Error generating salt",err);
        res.send(500);
        return false;
      }
      bcrypt.hash(req.body.password,salt,function(err,hash) {
        if(err) {
          console.log("Error hashing password",err);
          res.send(500);
          return false;
        }
        clientPool.acquire(function(err,mysql) {
          if(err){
            console.log("can't get mysql con",err);
            clientPool.releaseConnection(mysql);
            res.send(500);
            return false;
          }
          mysql.query(
            "INSERT INTO `modfinder`.`user` (`name`, `pronoun`, `email`, `points`, `div`, `age`, `subFree`, `numNeeded`, `password`, `bio`) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, 'No bio yet...');",
            [req.body.name, req.body.pronoun, req.body.email, req.body.points, req.body.div, req.body.age, req.body.subFree, 3, hash],
            function(err,result) {
              if(err) {
                console.log("error inserting into mysql",err);
                res.send(500);
                clientPool.releaseConnection(mysql);
                return false;
              }
              req.session.userID = result.insertId;
              req.session.numResponses = 0;
              req.session.numNeeded = 3;
              clientPool.releaseConnection(mysql);
              res.redirect("/user/me");
            }
          );
        });
      });
    });
  }
};  

exports.edit = function(req,res) {
  clientPool.acquire(function(err,mysql) {
    if(err){
      console.log("can't get mysql con",err);
      res.send(500);
      return false;
    }
    mysql.query("SELECT * FROM `user` WHERE `userID` = ?;",[req.session.userID],function(err,user) {
      if(err){
        console.log("can't get user from database");
        res.send(500);
        clientPool.releaseConnection(mysql);
        return false;
      }
      user = user[0];
      clientPool.releaseConnection(mysql);
      res.render("userEdit",{
        user:_.omit(user,"password")
      });
    });
  });
};

exports.update = function(req,res) {
  clientPool.acquire(function(err,mysql) {
    if(err) {
      console.log(err);
      clientPool.releaseConnection(mysql);
      return false;

    }
    var params = _.omit(req.body,"userID","password","dtCreated","dtLastLoggedIn","numResponses","numAsked","numLogins","pic","numNeeded");
    sqlHelper.update(mysql,"user",params,{userID:req.session.userID},{},function(err,result) {
      if(err){
        console.log(err);
        clientPool.releaseConnection(mysql);
        return false;
      }
      clientPool.releaseConnection(mysql);
      res.redirect("/user/me");
    });
  }); 
}

exports.uploadPic = function(req,res) {
  res.set("Content-Type","text/json");
  if(_.has(req.body,"pic")) {
    clientPool.acquire(function(err,mysql) {
      mysql.query("UPDATE `user` SET `pic` = ? WHERE `userID` = ?",[req.body.pic,req.session.userID],function(err,result) {
        if(err) {
          console.log(err);
          clientPool.releaseConnection(mysql);
          res.send(500);
          return false;
        }
        clientPool.releaseConnection(mysql);
        res.send({status:"success"});
      });
    });
  } else {
    res.send(400);
  }
};

exports.search = function(req,res) {
  if(req.route.params.query) {
    clientPool.acquire(function(err,mysql) {
      if(err) {
        console.log(err);
        clientPool.releaseConnection(mysql);
        return false;
      }
      req.route.params.query = req.route.params.query.toLowerCase();
      var escapedQuery = mysql.escape("%" + req.route.params.query + "%");
      mysql.query("SELECT `name`,`userID` FROM `user` WHERE LOWER(`name`) LIKE " + escapedQuery + " LIMIT 11 ;",function(err,result) {
        if(err) {
          clientPool.releaseConnection(mysql);
          console.log(err);
          res.send(500);
          return false;
        }
        clientPool.releaseConnection(mysql);

        res.set("Content-Type","text/json");
        res.send(result);
      })
    });
  } else {
    res.send(400);
  }
}

exports.view = function(req,res) {
  if(req.route.params.userID === "me")
    req.route.params.userID = req.session.userID;
  if(!isNaN(parseInt(req.route.params.userID))) {
    clientPool.acquire(function(err,mysql) {
      if(err){
        console.log("can't get mysql con",err);
        clientPool.releaseConnection(mysql);
        res.send(500);
        return false;
      }
      mysql.query(
        "SELECT `user`.*, `favorite`.`fUserID`, `favorite`.`favoriteID` FROM `user` LEFT JOIN `favorite` \
        ON `user`.`userID` = `favorite`.`fUserID` \
        AND `favorite`.`userID` = ? \
        WHERE `user`.`userID` = ?;",
        [req.session.userID,req.route.params.userID],function(err,user) {
        if(err){
          console.log("can't get user from database");
          res.send(500);
          clientPool.releaseConnection(mysql);
          return false;
        }
        if(user.length > 0) {
          user = user[0];
          mysql.query("SELECT * FROM `question` WHERE `userID` = ? LIMIT ?;",[user.userID,user.numAsked],function(err,questions){
            if(err){
              console.log(err);
              res.send(500);
              clientPool.releaseConnection(mysql);
              return false;
            }
            mysql.query(
              "SELECT * FROM `question`,`answer`,`questionResponse` \
              WHERE `questionResponse`.`userID` = ? \
              AND `questionResponse`.`questionID` = `question`.`questionID` \
              AND `answer`.`questionID` = `question`.`questionID`\
              AND `answer`.`answerID` = `questionResponse`.`answerID` \
              LIMIT ?;",
              [user.userID,user.numResponses],
              function(err,responses){
                if(err) {
                  console.log(err);
                  clientPool.releaseConnection(mysql);
                  res.send(500);
                  return false;
                }
                clientPool.releaseConnection(mysql);
                res.render("profile",{
                  _:_,
                  req:req,
                  status:"success",
                  user:_.omit(user,"password"),
                  questions:questions,
                  responses:responses
                });
              }
            );
          });
        } else {
          res.send(404);
        }
      });
    });
  } else {
    res.send(404);
  }
    
};


exports.index = function(req,res) {
  clientPool.acquire(function(err,mysql) {
    mysql.query("SELECT * FROM `user` ORDER BY `pic` DESC ;",function(err,users) {
      if(err) {
        console.log(err);
        clientPool.releaseConnection(mysql);
        res.send(500);
        return false;
      }
      res.render("browse",{users:users});
      clientPool.releaseConnection(mysql);
    });
  });
};

generated Tue Apr 30 2013 17:31:04 GMT-0400 (EDT)
Modfinder