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.
117 lines (106 loc) • 3.15 kB
JavaScript
// Generated by CoffeeScript 1.10.0
var User, localization, otpManager, passport, passwordKeys, qs, url;
passport = require('passport');
qs = require('querystring');
localization = require('../lib/localization_manager');
passwordKeys = require('../lib/password_keys');
otpManager = require('../lib/2fa_manager');
url = require('url');
User = require('../models/user');
module.exports.authenticate = function(req, res, next) {
var postLogin, process, processOtp;
process = function(err, user) {
var error;
if (err) {
return next(new Error(localization.t('error server')));
} else if (user === void 0 || !user) {
error = new Error(localization.t('error bad credentials'));
error.status = 401;
return next(error);
} else {
return passwordKeys.initializeKeys(req.body.password, function(err) {
if (err) {
return next(new Error(localization.t('error keys not intialized')));
} else {
return postLogin(user);
}
});
}
};
postLogin = function(user) {
return otpManager.getAuthType(function(err, otpAuth) {
var error, msg;
if (err) {
msg = localization.t("error login failed");
error = new Error(msg);
error.status = 401;
return next(error);
} else if (!otpAuth) {
return req.logIn(user, function(err, info) {
if (err) {
msg = localization.t("error login failed");
error = new Error(msg);
error.status = 401;
return next(error);
} else {
return res.status(200).send({
success: true
});
}
});
} else {
return passport.authenticate(otpAuth, processOtp)(req, res, next);
}
});
};
processOtp = function(err, user) {
var error, msg;
if (err) {
msg = localization.t(err);
error = new Error(msg);
return next(error);
} else if (!user && user !== void 0) {
msg = localization.t("error otp invalid code");
error = new Error(msg);
error.status = 401;
return next(error);
} else {
return User.first(function(err, user) {
return req.logIn(user, function(err, info) {
if (err) {
msg = localization.t("error login failed");
error = new Error(msg);
error.status = 401;
return next(error);
} else {
return res.status(200).send({
success: true
});
}
});
});
}
};
return passport.authenticate('local', process)(req, res, next);
};
module.exports.isAuthenticated = function(req, res, next) {
if (req.isAuthenticated()) {
return next();
} else {
url = "/login";
if (req.url !== '/') {
url += "?next=" + (encodeURIComponent(req.url));
}
if (req.query.length) {
url += "&" + (qs.stringify(req.query));
}
return res.redirect(url);
}
};
module.exports.isNotAuthenticated = function(req, res, next) {
if (req.isAuthenticated()) {
return res.redirect('/');
} else {
return next();
}
};