UNPKG

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.

72 lines (64 loc) 2.07 kB
// 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 done(null, new Buffer(user.encryptedOtpKey, 'hex'), user.hotpCounter); }, function(user, key, counter, delta, done) { if (counter > user.hotpCounter) { return User.updateAttributes(user._id, { 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 done(null, new Buffer(user.encryptedOtpKey, 'hex'), 30); })); };