/* jshint node: true */ var passport = require('passport'), LocalStrategy = require('passport-local').Strategy, _ = require('lodash'), config = require('../../config.json'), User = require('../models/User'), crypt = require('./crypt'); var auth = module.exports = { guestUser: { id: "guest", username: "guest", name: "guest", access: 0, }, init: function () { passport.serializeUser(auth.serializeUser); passport.deserializeUser(auth.deserializeUser); passport.use(new LocalStrategy(auth.verifyLocalUser)) }, login: function (req, res, next) { if (req.isAuthenticated()) { console.log(req.user) return User.findAll({ where: { access: 2 }, attributes: ['id','name'] }).success(function(hosts){ res.json({ status: "OK", user: req.user, hosts: hosts }) }) } passport.authenticate("local", function(err, user, info){ if (err || ! user) { return res.json({ error: err || "no user" }); } 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 }) }) }); })(req, res, next); }, logout: function (req, res) { req.logout(); req.session.destroy() res.redirect('/'); }, serializeUser: function (user, done) { done(null, user.id); }, deserializeUser: function (id, done) { if (id == "guest") { done(null, auth.guestUser) } User.find({ where: { id: id } }).success(function (user) { done(null, user) }).error(function(){ done("error", null) }); }, verifyLocalUser: function (username, password, done) { if (username == "protocolsnyc" && password == "madhousenyc") { return done(null, auth.guestUser) } User.find({ where: { email: username } }).success(function(user){ if (! user.password || user.password.length < 2) { return done(null, false, { error: { errors: { username: { message: 'No such user.' } }}}) } else if ( crypt(password, user.password) !== user.password) { return done(null, false, { error: { errors: { password: { message: 'Incorrect password.' } }}}) } return done(null, user); }).error(function(){ return done(null, false, { error: { errors: { username: { message: 'No such username.' } }}}) }) } }