| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- sanitize = require('sanitizer')
- User = require("../../models/User").User
- UserCreator = require("./UserCreator")
- AuthenticationManager = require("../Authentication/AuthenticationManager")
- NewsLetterManager = require("../Newsletter/NewsletterManager")
- async = require("async")
- logger = require("logger-sharelatex")
- module.exports =
- validateEmail : (email) ->
- 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,}))$/
- return re.test(email)
- hasZeroLengths : (props) ->
- hasZeroLength = false
- props.forEach (prop) ->
- if prop.length == 0
- hasZeroLength = true
- return hasZeroLength
- _registrationRequestIsValid : (body, callback)->
- email = sanitize.escape(body.email).trim().toLowerCase()
- password = body.password
- username = email.match(/^[^@]*/)
- if @hasZeroLengths([password, email])
- return false
- else if !@validateEmail(email)
- return false
- else
- return true
- _createNewUserIfRequired: (user, userDetails, callback)->
- if !user?
- UserCreator.createNewUser {holdingAccount:false, email:userDetails.email}, callback
- else
- callback null, user
- registerNewUser: (userDetails, callback)->
- self = @
- requestIsValid = @_registrationRequestIsValid userDetails
- if !requestIsValid
- return callback(new Error("request is not valid"))
- userDetails.email = userDetails.email?.trim()?.toLowerCase()
- User.findOne email:userDetails.email, (err, user)->
- if err?
- return callback err
- if user?.holdingAccount == false
- return callback(new Error("EmailAlreadyRegistered"), user)
- self._createNewUserIfRequired user, userDetails, (err, user)->
- if err?
- return callback(err)
- async.series [
- (cb)-> User.update {_id: user._id}, {"$set":{holdingAccount:false}}, cb
- (cb)-> AuthenticationManager.setUserPassword user._id, userDetails.password, cb
- (cb)->
- NewsLetterManager.subscribe user, ->
- cb() #this can be slow, just fire it off
- ], (err)->
- logger.log user: user, "registered"
- callback(err, user)
|