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);