PasswordResetController.coffee 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. PasswordResetHandler = require("./PasswordResetHandler")
  2. RateLimiter = require("../../infrastructure/RateLimiter")
  3. AuthenticationController = require("../Authentication/AuthenticationController")
  4. UserGetter = require("../User/UserGetter")
  5. UserSessionsManager = require("../User/UserSessionsManager")
  6. logger = require "logger-sharelatex"
  7. module.exports =
  8. renderRequestResetForm: (req, res)->
  9. logger.log "rendering request reset form"
  10. res.render "user/passwordReset",
  11. title:"reset_password"
  12. requestReset: (req, res)->
  13. email = req.body.email.trim().toLowerCase()
  14. opts =
  15. endpointName: "password_reset_rate_limit"
  16. timeInterval: 60
  17. subjectName: req.ip
  18. throttle: 6
  19. RateLimiter.addCount opts, (err, canContinue)->
  20. if !canContinue
  21. return res.send 500, { message: req.i18n.translate("rate_limit_hit_wait")}
  22. PasswordResetHandler.generateAndEmailResetToken email, (err, exists)->
  23. if err?
  24. res.send 500, {message:err?.message}
  25. else if exists
  26. res.sendStatus 200
  27. else
  28. res.send 404, {message: req.i18n.translate("cant_find_email")}
  29. renderSetPasswordForm: (req, res)->
  30. if req.query.passwordResetToken?
  31. req.session.resetToken = req.query.passwordResetToken
  32. return res.redirect('/user/password/set')
  33. if !req.session.resetToken?
  34. return res.redirect('/user/password/reset')
  35. res.render "user/setPassword",
  36. title:"set_password"
  37. passwordResetToken: req.session.resetToken
  38. setNewUserPassword: (req, res, next)->
  39. {passwordResetToken, password} = req.body
  40. if !password? or password.length == 0 or !passwordResetToken? or passwordResetToken.length == 0
  41. return res.sendStatus 400
  42. delete req.session.resetToken
  43. PasswordResetHandler.setNewUserPassword passwordResetToken?.trim(), password?.trim(), (err, found, user_id) ->
  44. return next(err) if err?
  45. if found
  46. UserSessionsManager.revokeAllUserSessions {_id: user_id}, [], (err) ->
  47. return next(err) if err?
  48. if req.body.login_after
  49. UserGetter.getUser user_id, {email: 1}, (err, user) ->
  50. return next(err) if err?
  51. AuthenticationController.doLogin {email:user.email, password: password}, req, res, next
  52. else
  53. res.sendStatus 200
  54. else
  55. res.sendStatus 404