/* jshint node: true */ var passport = require('passport'), LocalStrategy = require('passport-local').Strategy, _ = require('lodash'), util = require('../util'), config = require('../../../config.json'), User = require('../models/User'); var auth = { init: function () { passport.serializeUser(auth.serializeUser); passport.deserializeUser(auth.deserializeUser); passport.use(new LocalStrategy(auth.verifyLocalUser)) }, loggedInLocal: function (req, res, next) { passport.authenticate("local", function(err, user, info){ if (err) { return res.json({ error: err }); } if (! user) { return info ? res.json(info) : res.redirect("/login"); } user.last_ip = util.ip2num( req.ip ) user.save(function(err, data){ if (err) console.err('error setting ip for user') }) req.logIn(user, function(err) { if (err) { return next(err); } var returnTo = req.session.returnTo delete req.session.returnTo return res.json({ status: "OK", returnTo: returnTo || "/profile" }) }); })(req, res, next); }, logout: function (req, res) { req.logout(); res.redirect('/'); }, serializeUser: function (user, done) { done(null, user.id); }, deserializeUser: function (id, done) { User.find({ id: id }, function (err, user) { done(err, user) }); }, verifyLocalUser: function (username, password, done) { User.findByUsername(username, function(err, user){ if (err) { return done(err); } if (! user) { return done(null, false, { error: { errors: { username: { message: 'No such username.' } }}}) } if (! user.validPassword(password)) { return done(null, false, { error: { errors: { password: { message: 'Incorrect password.' } }}}) } return done(null, user); }); } }