UserEmailsConfirmationHandler.coffee 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. EmailHelper = require "../Helpers/EmailHelper"
  2. EmailHandler = require "../Email/EmailHandler"
  3. OneTimeTokenHandler = require "../Security/OneTimeTokenHandler"
  4. settings = require 'settings-sharelatex'
  5. Errors = require "../Errors/Errors"
  6. logger = require "logger-sharelatex"
  7. UserUpdater = require "./UserUpdater"
  8. ONE_YEAR_IN_S = 365 * 24 * 60 * 60
  9. module.exports = UserEmailsConfirmationHandler =
  10. sendConfirmationEmail: (user_id, email, emailTemplate, callback = (error) ->) ->
  11. if arguments.length == 3
  12. callback = emailTemplate
  13. emailTemplate = 'confirmEmail'
  14. email = EmailHelper.parseEmail(email)
  15. return callback(new Error('invalid email')) if !email?
  16. data = {user_id, email}
  17. OneTimeTokenHandler.getNewToken 'email_confirmation', data, {expiresIn: ONE_YEAR_IN_S}, (err, token)->
  18. return callback(err) if err?
  19. emailOptions =
  20. to: email
  21. confirmEmailUrl: "#{settings.siteUrl}/user/emails/confirm?token=#{token}"
  22. EmailHandler.sendEmail emailTemplate, emailOptions, callback
  23. resendConfirmationEmail: (user_id, email, callback = (error) ->) ->
  24. OneTimeTokenHandler.findValidTokenFromData 'email_confirmation', { user_id, email }, (error, token) ->
  25. return callback(error) if error?
  26. if !token?
  27. UserEmailsConfirmationHandler.sendConfirmationEmail user_id, email, callback
  28. else
  29. emailOptions =
  30. to: email
  31. confirmEmailUrl: "#{settings.siteUrl}/user/emails/confirm?token=#{token}"
  32. EmailHandler.sendEmail 'confirmEmail', emailOptions, callback
  33. confirmEmailFromToken: (token, callback = (error) ->) ->
  34. logger.log {token_start: token.slice(0,8)}, 'confirming email from token'
  35. OneTimeTokenHandler.getValueFromTokenAndExpire 'email_confirmation', token, (error, data) ->
  36. return callback(error) if error?
  37. if !data?
  38. return callback(new Errors.NotFoundError('no token found'))
  39. {user_id, email} = data
  40. logger.log {data, user_id, email, token_start: token.slice(0,8)}, 'found data for email confirmation'
  41. if !user_id? or email != EmailHelper.parseEmail(email)
  42. return callback(new Errors.NotFoundError('invalid data'))
  43. UserUpdater.confirmEmail user_id, email, callback