UserRegistrationHandler.coffee 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. sanitize = require('sanitizer')
  2. User = require("../../models/User").User
  3. UserCreator = require("./UserCreator")
  4. AuthenticationManager = require("../Authentication/AuthenticationManager")
  5. NewsLetterManager = require("../Newsletter/NewsletterManager")
  6. async = require("async")
  7. EmailHandler = require("../Email/EmailHandler")
  8. logger = require("logger-sharelatex")
  9. module.exports =
  10. validateEmail : (email) ->
  11. re = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\ ".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA -Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
  12. return re.test(email)
  13. hasZeroLengths : (props) ->
  14. hasZeroLength = false
  15. props.forEach (prop) ->
  16. if prop.length == 0
  17. hasZeroLength = true
  18. return hasZeroLength
  19. _registrationRequestIsValid : (body, callback)->
  20. email = sanitize.escape(body.email).trim().toLowerCase()
  21. password = body.password
  22. username = email.match(/^[^@]*/)
  23. if @hasZeroLengths([password, email])
  24. return false
  25. else if !@validateEmail(email)
  26. return false
  27. else
  28. return true
  29. _createNewUserIfRequired: (user, userDetails, callback)->
  30. if !user?
  31. UserCreator.createNewUser {holdingAccount:false, email:userDetails.email}, callback
  32. else
  33. callback null, user
  34. registerNewUser: (userDetails, callback)->
  35. self = @
  36. requestIsValid = @_registrationRequestIsValid userDetails
  37. if !requestIsValid
  38. return callback("request is not valid")
  39. userDetails.email = userDetails.email?.trim()?.toLowerCase()
  40. User.findOne email:userDetails.email, (err, user)->
  41. if err?
  42. return callback err
  43. if user?.holdingAccount == false
  44. return callback("EmailAlreadyRegisterd")
  45. self._createNewUserIfRequired user, userDetails, (err, user)->
  46. if err?
  47. return callback(err)
  48. async.series [
  49. (cb)-> User.update {_id: user._id}, {"$set":{holdingAccount:false}}, cb
  50. (cb)-> AuthenticationManager.setUserPassword user._id, userDetails.password, cb
  51. (cb)-> NewsLetterManager.subscribe user, cb
  52. (cb)->
  53. emailOpts =
  54. first_name:user.first_name
  55. to: user.email
  56. EmailHandler.sendEmail "welcome", emailOpts, cb
  57. ], (err)->
  58. logger.log user: user, "registered"
  59. callback(err, user)