/* 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 = { guestUser: { id: "guest", username: "guest", access: 0, }, init: function () { passport.serializeUser(auth.serializeUser); passport.deserializeUser(auth.deserializeUser); passport.use(new LocalStrategy(auth.verifyLocalUser)) }, login: function (req, res, next) { passport.authenticate("local", function(err, user, info){ if (err || ! user) { return res.json({ error: err }); } req.logIn(user, function(err) { if (err) { return next(err); } User.findAll({ where: { access: 2 }, attributes: ['id','name'] }).success(function(hosts){ return res.json({ status: "OK", user: user, hosts: hosts, 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) { if (id == "guest") { return auth.guestUser } User.find({ id: id }, function (err, user) { done(err, user) }); }, verifyLocalUser: function (username, password, done) { if (username == "protocolsnyc" && password == "madhousenyc") { return done(null, auth.guestUser) } 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); }); } }