PasswordResetRouter.js 2.0 KB

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