SudoModeController.coffee 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. UserLocator = require "../User/UserLocator"
  2. Settings = require "settings-sharelatex"
  3. logger = require 'logger-sharelatex'
  4. SudoModeHandler = require './SudoModeHandler'
  5. AuthenticationController = require '../Authentication/AuthenticationController'
  6. AuthenticationManager = require '../Authentication/AuthenticationManager'
  7. ObjectId = require('../../infrastructure/Mongoose').mongo.ObjectId
  8. UserGetter = require '../User/UserGetter'
  9. module.exports = SudoModeController =
  10. sudoModePrompt: (req, res, next) ->
  11. userId = AuthenticationController.getLoggedInUserId(req)
  12. logger.log {userId}, "[SudoMode] rendering sudo mode password page"
  13. SudoModeHandler.isSudoModeActive userId, (err, isActive) ->
  14. if err?
  15. logger.err {err, userId}, "[SudoMode] error checking if sudo mode is active"
  16. return next(err)
  17. if isActive
  18. logger.log {userId}, "[SudoMode] sudo mode already active, redirecting"
  19. return res.redirect('/project')
  20. res.render 'sudo_mode/sudo_mode_prompt', title: 'confirm_your_password'
  21. submitPassword: (req, res, next) ->
  22. userId = AuthenticationController.getLoggedInUserId(req)
  23. redir = AuthenticationController._getRedirectFromSession(req) || "/project"
  24. password = req.body.password
  25. if !password
  26. logger.log {userId}, "[SudoMode] no password supplied, failed authentication"
  27. return next(new Error('no password supplied'))
  28. logger.log {userId, redir}, "[SudoMode] checking user password"
  29. UserGetter.getUser ObjectId(userId), {email: 1}, (err, userRecord) ->
  30. if err?
  31. logger.err {err, userId}, "[SudoMode] error getting user"
  32. return next(err)
  33. AuthenticationManager.authenticate email: userRecord.email, password, (err, user) ->
  34. if err?
  35. logger.err {err, userId}, "[SudoMode] error authenticating user"
  36. return next(err)
  37. if user?
  38. logger.log {userId}, "[SudoMode] authenticated user, activating sudo mode"
  39. SudoModeHandler.activateSudoMode userId, (err) ->
  40. if err?
  41. logger.err {err, userId}, "[SudoMode] error activating sudo mode"
  42. return next(err)
  43. return res.json {
  44. redir: redir
  45. }
  46. else
  47. logger.log {userId}, "[SudoMode] authentication failed for user"
  48. return res.json {
  49. message: {
  50. text: req.i18n.translate("invalid_password"),
  51. type: 'error'
  52. }
  53. }