auth.js |
|
Generated by CoffeeScript 1.9.1 |
(function() {
var conf, express, ld, localStrategy, passport, user;
ld = require('lodash');
express = require('express');
passport = require('passport');
localStrategy = require('passport-local').Strategy;
conf = require('./configuration.js');
user = require('./model/user.js');
module.exports = (function() {
var auth;
auth = {};
auth.fn = {};
auth.fn.local = function() {
passport.serializeUser(function(user, done) {
return done(null, user._id);
});
passport.deserializeUser(function(id, done) {
return user.get(id, done);
});
return passport.use(new localStrategy({
usernameField: 'login',
passwordField: 'password'
}, function(login, password, callback) {
var isFS;
isFS = function(s) {
return ld.isString(s) && !ld.isEmpty(s);
};
if (!isFS(login)) {
throw new TypeError('login must be a string');
}
if (!isFS(password)) {
throw new TypeError('password must be a string');
}
if (!ld.isFunction(callback)) {
throw new TypeError('callback must be a function');
}
return auth.fn.localFn.apply(null, arguments);
}));
};
auth.fn.localFn = function(login, password, callback) {
return user.get(login, function(err, u) {
if (err) {
return callback(err);
}
return auth.fn.isPasswordValid(u, password, function(err, isValid) {
if (err) {
return callback(err);
}
if (!isValid) {
return callback(new Error('password is not correct', false));
} else {
return callback(null, u);
}
});
});
};
auth.fn.isPasswordValid = function(u, password, callback) {
return user.fn.hashPassword(u.password.salt, password, function(err, res) {
if (err) {
callback(err);
}
if (res.hash === u.password.hash) {
return callback(null, true);
} else {
return callback(null, false);
}
});
};
auth.init = function(app) {
auth.fn.local();
app.use(express.cookieParser());
app.use(passport.initialize());
app.use(passport.session());
return conf.get('sessionSecret', function(err, res) {
if (err) {
throw new Error(err);
}
return app.use(express.session({
secret: res
}));
});
};
return auth;
})();
}).call(this);
|