|
@@ -1,5 +1,6 @@
|
|
|
'use strict'
|
|
|
|
|
|
+const Promise = require('bluebird')
|
|
|
const express = require('express')
|
|
|
const router = express.Router()
|
|
|
const passport = require('passport')
|
|
@@ -37,24 +38,51 @@ router.get('/login', function (req, res, next) {
|
|
|
})
|
|
|
|
|
|
router.post('/login', bruteforce.prevent, function (req, res, next) {
|
|
|
- passport.authenticate('local', function (err, user, info) {
|
|
|
- if (err) { return next(err) }
|
|
|
-
|
|
|
- if (!user) {
|
|
|
- req.flash('alert', {
|
|
|
- title: 'Invalid login',
|
|
|
- message: 'The email or password is invalid.'
|
|
|
+ new Promise((resolve, reject) => {
|
|
|
+ // [1] LOCAL AUTHENTICATION
|
|
|
+ passport.authenticate('local', function (err, user, info) {
|
|
|
+ if (err) { return reject(err) }
|
|
|
+ if (!user) { return reject(new Error('INVALID_LOGIN')) }
|
|
|
+ resolve(user)
|
|
|
+ })(req, res, next)
|
|
|
+ }).catch({ message: 'INVALID_LOGIN' }, err => {
|
|
|
+ if (appconfig.auth.ldap && appconfig.auth.ldap.enabled) {
|
|
|
+ // [2] LDAP AUTHENTICATION
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
+ passport.authenticate('ldapauth', function (err, user, info) {
|
|
|
+ if (err) { return reject(err) }
|
|
|
+ if (info && info.message) { return reject(new Error(info.message)) }
|
|
|
+ if (!user) { return reject(new Error('INVALID_LOGIN')) }
|
|
|
+ resolve(user)
|
|
|
+ })(req, res, next)
|
|
|
})
|
|
|
- return res.redirect('/login')
|
|
|
+ } else {
|
|
|
+ throw err
|
|
|
}
|
|
|
-
|
|
|
- req.logIn(user, function (err) {
|
|
|
+ }).then((user) => {
|
|
|
+ // LOGIN SUCCESS
|
|
|
+ return req.logIn(user, function (err) {
|
|
|
if (err) { return next(err) }
|
|
|
req.brute.reset(function () {
|
|
|
return res.redirect('/')
|
|
|
})
|
|
|
})
|
|
|
- })(req, res, next)
|
|
|
+ }).catch(err => {
|
|
|
+ // LOGIN FAIL
|
|
|
+ if (err.message === 'INVALID_LOGIN') {
|
|
|
+ req.flash('alert', {
|
|
|
+ title: 'Invalid login',
|
|
|
+ message: 'The email or password is invalid.'
|
|
|
+ })
|
|
|
+ return res.redirect('/login')
|
|
|
+ } else {
|
|
|
+ req.flash('alert', {
|
|
|
+ title: 'Login error',
|
|
|
+ message: err.message
|
|
|
+ })
|
|
|
+ return res.redirect('/login')
|
|
|
+ }
|
|
|
+ })
|
|
|
})
|
|
|
|
|
|
/**
|