cozy-proxy
Version:
Cozy Proxy redirects requests properly to the right application of the Cozy platform depending on given path. It also handles authentication to the Cozy for users and devices.
91 lines (83 loc) • 2.46 kB
JavaScript
// Generated by CoffeeScript 1.10.0
var HotpStrategy, LocalStrategy, TotpStrategy, User, bcrypt, passport;
bcrypt = require('bcrypt');
passport = require('passport');
LocalStrategy = require('passport-local').Strategy;
HotpStrategy = require('passport-hotp').Strategy;
TotpStrategy = require('passport-totp').Strategy;
User = require('../models/user');
module.exports = function() {
var options;
passport.currentUser = null;
passport.serializeUser = function(user, req, done) {
return done(null, user._id);
};
passport.deserializeUser = function(id, req, done) {
if ((passport.currentUser != null) && id === passport.currentUser._id) {
return done(null, passport.currentUser);
} else {
return done(null, false);
}
};
options = {
usernameField: 'password'
};
passport.use(new LocalStrategy(options, function(email, password, done) {
return User.first(function(err, user) {
if ((err != null) || (user == null)) {
return done(err, false);
} else {
return bcrypt.compare(password, user.password, function(err, result) {
if (err != null) {
return done(err, false);
} else if (result) {
passport.currentUser = user;
passport.currentUser.id = user._id;
return done(err, user);
} else {
return done(err, false);
}
});
}
});
}));
passport.use(new HotpStrategy({
codeField: "authcode"
}, function(user, done) {
return User.first(function(err, user) {
if (err != null) {
return done(err);
} else {
return done(null, user.otpKey, user.hotpCounter);
}
});
}, function(user, key, counter, delta, done) {
return User.first(function(err, user) {
if (err != null) {
return done(err);
} else {
if (counter > user.hotpCounter) {
return User.updateAttributes(user._id, {
otpKey: key,
hotpCounter: counter
}, function(err) {
return done(err);
});
} else {
return done("error otp weak counter");
}
}
});
}));
return passport.use(new TotpStrategy({
codeField: "authcode"
}, function(user, done) {
return User.first(function(err, user) {
if (err != null) {
return done(err);
} else {
return done(null, user.otpKey, 30);
}
});
}));
};