auth.js 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. var express = require('express');
  2. var router = express.Router();
  3. var passport = require('passport');
  4. var ExpressBrute = require('express-brute');
  5. var ExpressBruteMongoStore = require('express-brute-mongo');
  6. var moment = require('moment');
  7. /**
  8. * Setup Express-Brute
  9. */
  10. var EBstore = new ExpressBruteMongoStore((ready) => {
  11. db.onReady.then(() => {
  12. ready(db.connection.collection('bruteforce-store'));
  13. });
  14. });
  15. var bruteforce = new ExpressBrute(EBstore, {
  16. freeRetries: 5,
  17. minWait: 60 * 1000,
  18. maxWait: 5 * 60 * 1000,
  19. refreshTimeoutOnRequest: false,
  20. failCallback(req, res, next, nextValidRequestDate) {
  21. req.flash('alert', {
  22. class: 'error',
  23. title: 'Too many attempts!',
  24. message: "You've made too many failed attempts in a short period of time, please try again " + moment(nextValidRequestDate).fromNow() + '.',
  25. iconClass: 'fa-times'
  26. });
  27. res.redirect('/login');
  28. }
  29. });
  30. /**
  31. * Login form
  32. */
  33. router.get('/login', function(req, res, next) {
  34. res.render('auth/login', {
  35. usr: res.locals.usr
  36. });
  37. });
  38. router.post('/login', bruteforce.prevent, function(req, res, next) {
  39. passport.authenticate('local', function(err, user, info) {
  40. if (err) { return next(err); }
  41. if (!user) {
  42. req.flash('alert', {
  43. class: 'error',
  44. title: 'Invalid login',
  45. message: "The email or password is invalid.",
  46. iconClass: 'fa-times'
  47. });
  48. return res.redirect('/login');
  49. }
  50. req.logIn(user, function(err) {
  51. if (err) { return next(err); }
  52. req.brute.reset(function () {
  53. return res.redirect('/');
  54. });
  55. });
  56. })(req, res, next);
  57. });
  58. /**
  59. * Logout
  60. */
  61. router.get('/logout', function(req, res) {
  62. req.logout();
  63. res.redirect('/');
  64. });
  65. module.exports = router;