linagora-rse
Version:
136 lines (114 loc) • 3.41 kB
JavaScript
'use strict';
const passport = require('passport');
const config = require('../../core').config('default');
const userlogin = require('../../core/user/login');
const esnConfig = require('../../core/esn-config');
const logger = require('../../core/logger');
const alterTemplatePath = require('../middleware/templates').alterTemplatePath;
const assetRegistry = require('../../core').assets;
const i18n = require('../../core/i18n');
module.exports = {
index,
login,
passwordResetIndex,
user
};
function index(req, res) {
if (req.isAuthenticated()) {
return res.redirect(req.query.continue || '/');
}
esnConfig('recaptcha').get((err, recaptcha) => {
if (err) {
logger.error('Could not get recaptcha keys in esn config.', err.message);
return res.status(500).json({
error: 500,
message: 'Server Error',
details: 'Internal server error'
});
}
res.locals.assets = assetRegistry.envAwareApp('welcome');
alterTemplatePath('welcome/index', tplPath => {
res.render(tplPath, {
title: 'Home',
recaptchaPublicKey: recaptcha ? recaptcha.publickey : null
});
});
});
}
function login(req, res, next) {
if (!req.body.username || !req.body.password) {
return res.status(400).json({
recaptcha: req.recaptchaFlag || false,
error: {
code: 400,
message: 'Login error',
details: 'Bad parameters, missing username and/or password'
}
});
}
const username = req.body.username;
const strategies = config.auth && config.auth.strategies ? config.auth.strategies : ['local'];
passport.authenticate(strategies, (err, user) => {
if (err) {
return next(err);
}
if (!user) {
userlogin.failure(username, err => {
if (err) {
logger.error('Problem while setting login failure for user ' + username, err);
}
return res.status(403).json({
recaptcha: req.recaptchaFlag || false,
error: {
code: 403,
message: 'Login error',
details: 'Bad username or password'
}
});
});
} else {
req.logIn(user, err => {
if (err) {
return next(err);
}
function callback(err, user) {
if (err) {
logger.error('Problem while setting login success for user ' + username, err);
}
let result = {};
if (user) {
result = user.toObject();
delete result.password;
}
res.status(200).json(result);
}
if (!user.login.success) {
return userlogin.firstSuccess(
username,
{
language: i18n.getLocale(req),
timeZone: req.headers['x-esn-time-zone']
},
callback
);
}
return userlogin.success(username, callback);
});
}
})(req, res, next);
}
function passwordResetIndex(req, res) {
alterTemplatePath('password-reset/index', tplPath => res.render(tplPath, { title: 'PasswordReset' }));
}
function user(req, res) {
if (!req.user || !req.user.emails || !req.user.emails.length) {
return res.status(500).send({
error: {
code: 500,
message: 'Internal error',
details: 'User not set'
}
});
}
res.status(200).json(req.user);
}