AccountMergeEmailController.coffee 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. UserGetter = require '../User/UserGetter'
  2. UserUpdater = require '../User/UserUpdater'
  3. OneTimeTokenHandler = require '../Security/OneTimeTokenHandler'
  4. logger = require 'logger-sharelatex'
  5. Settings = require 'settings-sharelatex'
  6. module.exports = AccountMergeEmailController =
  7. confirmMergeFromEmail: (req, res, next) ->
  8. token = req.query.token
  9. if !token
  10. return res.status(400).send()
  11. OneTimeTokenHandler.getValueFromTokenAndExpire 'account-merge-email-to-ol', token, (err, data) ->
  12. return next(err) if err?
  13. if !data
  14. return res.status(404).send()
  15. if data.origin != 'sl'
  16. logger.log {}, "Only sharelatex origin supported"
  17. # TODO: better error handling
  18. return res.status(501).send()
  19. { sl_id, v1_id, final_email } = data
  20. UserGetter.getUser sl_id, {_id: 1, overleaf: 1}, (err, user) ->
  21. return next(err) if err?
  22. if !user?
  23. logger.err {userId: sl_id}, 'SL user not found for account-merge'
  24. # TODO: better error handling
  25. return res.status(400).send()
  26. if user?.overleaf?.id?
  27. logger.err {userId: sl_id}, 'SL user is already linked to overleaf'
  28. return res.status(400).send()
  29. logger.log {sl_id, v1_id, final_email, origin: data.origin},
  30. "[AccountMergeEmailController] about to merge sharelatex and overleaf-v1 accounts"
  31. UserUpdater.updateUser sl_id, {
  32. '$set': {
  33. 'overleaf.id': v1_id,
  34. email: final_email
  35. }
  36. }, (err) ->
  37. return next(err) if err?
  38. res.render 'account_merge/finish', {
  39. finalEmail: final_email,
  40. continueUrl: "#{Settings.accountMerge.sharelatexHost}/user/login_to_ol_v2"
  41. }