UserController.coffee 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. User = require('../models/User').User
  2. sanitize = require('sanitizer')
  3. fs = require('fs')
  4. _ = require('underscore')
  5. logger = require('logger-sharelatex')
  6. Security = require('../managers/SecurityManager')
  7. Settings = require('settings-sharelatex')
  8. dropboxHandler = require('../Features/Dropbox/DropboxHandler')
  9. userRegistrationHandler = require('../Features/User/UserRegistrationHandler')
  10. metrics = require('../infrastructure/Metrics')
  11. ReferalAllocator = require('../Features/Referal/ReferalAllocator')
  12. AuthenticationManager = require("../Features/Authentication/AuthenticationManager")
  13. AuthenticationController = require("../Features/Authentication/AuthenticationController")
  14. SubscriptionLocator = require("../Features/Subscription/SubscriptionLocator")
  15. UserDeleter = require("../Features/User/UserDeleter")
  16. EmailHandler = require("../Features/Email/EmailHandler")
  17. Url = require("url")
  18. uuid = require("node-uuid")
  19. module.exports =
  20. doRequestPasswordReset : (req, res, next = (error) ->)->
  21. email = sanitize.escape(req.body.email)
  22. email = sanitize.escape(email).trim()
  23. email = email.toLowerCase()
  24. logger.log email: email, "password reset requested"
  25. User.findOne {'email':email}, (err, user)->
  26. if(user?)
  27. randomPassword = uuid.v4()
  28. AuthenticationManager.setUserPassword user._id, randomPassword, (error) ->
  29. emailOpts =
  30. newPassword: randomPassword
  31. to: user.email
  32. EmailHandler.sendEmail "passwordReset", emailOpts, (err)->
  33. if err?
  34. logger.err err:err, emailOpts:emailOpts, "problem sending password reset email"
  35. return res.send 500
  36. metrics.inc "user.password-reset"
  37. res.send message:
  38. text:'An email with your new password has been sent to you'
  39. type:'success'
  40. else
  41. res.send message:
  42. text:'This email address has not been registered with us'
  43. type:'failure'
  44. logger.info email: email, "no user found with email"
  45. changePassword : (req, res, next = (error) ->)->
  46. metrics.inc "user.password-change"
  47. oldPass = req.body.currentPassword
  48. AuthenticationManager.authenticate _id: req.session.user._id, oldPass, (err, user)->
  49. return next(err) if err?
  50. if(user)
  51. logger.log user: req.session.user, "changing password"
  52. newPassword1 = req.body.newPassword1
  53. newPassword2 = req.body.newPassword2
  54. if newPassword1 != newPassword2
  55. logger.log user: user, "passwords do not match"
  56. res.send
  57. message:
  58. type:'error'
  59. text:'Your passwords do not match'
  60. else
  61. logger.log user: user, "password changed"
  62. AuthenticationManager.setUserPassword user._id, newPassword1, (error) ->
  63. return next(error) if error?
  64. res.send
  65. message:
  66. type:'success'
  67. text:'Your password has been changed'
  68. else
  69. logger.log user: user, "current password wrong"
  70. res.send
  71. message:
  72. type:'error'
  73. text:'Your old password is wrong'