PasswordResetRouter.js 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. const PasswordResetController = require('./PasswordResetController')
  2. const AuthenticationController = require('../Authentication/AuthenticationController')
  3. const CaptchaMiddleware = require('../../Features/Captcha/CaptchaMiddleware')
  4. const { RateLimiter } = require('../../infrastructure/RateLimiter')
  5. const RateLimiterMiddleware = require('../Security/RateLimiterMiddleware')
  6. const { Joi, validate } = require('../../infrastructure/Validation')
  7. const rateLimiter = new RateLimiter('password_reset_rate_limit', {
  8. points: 6,
  9. duration: 60,
  10. })
  11. module.exports = {
  12. apply(webRouter) {
  13. const rateLimit = RateLimiterMiddleware.rateLimit(rateLimiter, {
  14. ipOnly: true,
  15. })
  16. webRouter.get(
  17. '/user/password/reset',
  18. validate({
  19. query: { error: Joi.string() },
  20. }),
  21. PasswordResetController.renderRequestResetForm
  22. )
  23. webRouter.post(
  24. '/user/password/reset',
  25. validate({
  26. body: Joi.object({
  27. email: Joi.string().required(),
  28. }),
  29. }),
  30. rateLimit,
  31. CaptchaMiddleware.validateCaptcha('passwordReset'),
  32. PasswordResetController.requestReset
  33. )
  34. AuthenticationController.addEndpointToLoginWhitelist('/user/password/reset')
  35. webRouter.get(
  36. '/user/password/set',
  37. validate({
  38. query: {
  39. email: Joi.string().required(),
  40. passwordResetToken: Joi.string(),
  41. },
  42. }),
  43. rateLimit,
  44. PasswordResetController.renderSetPasswordForm
  45. )
  46. webRouter.post(
  47. '/user/password/set',
  48. validate({
  49. body: Joi.object({
  50. password: Joi.string().required(),
  51. passwordResetToken: Joi.string().required(),
  52. }),
  53. }),
  54. rateLimit,
  55. PasswordResetController.setNewUserPassword
  56. )
  57. AuthenticationController.addEndpointToLoginWhitelist('/user/password/set')
  58. webRouter.post(
  59. '/user/reconfirm',
  60. validate({
  61. body: Joi.object({
  62. email: Joi.string().required(),
  63. }),
  64. }),
  65. rateLimit,
  66. CaptchaMiddleware.validateCaptcha('passwordReset'),
  67. PasswordResetController.requestReset
  68. )
  69. },
  70. rateLimiter,
  71. }