SudoModeHandler.coffee 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. RedisWrapper = require('../../infrastructure/RedisWrapper')
  2. rclient = RedisWrapper.client('sudomode')
  3. logger = require('logger-sharelatex')
  4. AuthenticationManager = require '../Authentication/AuthenticationManager'
  5. Settings = require 'settings-sharelatex'
  6. V1Handler = require '../V1/V1Handler'
  7. UserGetter = require '../User/UserGetter'
  8. TIMEOUT_IN_SECONDS = 60 * 60
  9. module.exports = SudoModeHandler =
  10. _buildKey: (userId) ->
  11. "SudoMode:{#{userId}}"
  12. authenticate: (email, password, callback=(err, user)->) ->
  13. if Settings.overleaf?
  14. V1Handler.authWithV1 email, password, (err, isValid, v1Profile) ->
  15. if !isValid
  16. return callback(null, null)
  17. UserGetter.getUser {'overleaf.id': v1Profile.id}, callback
  18. else
  19. AuthenticationManager.authenticate {email}, password, callback
  20. activateSudoMode: (userId, callback=(err)->) ->
  21. if !userId?
  22. return callback(new Error('[SudoMode] user must be supplied'))
  23. duration = TIMEOUT_IN_SECONDS
  24. logger.log {userId, duration}, "[SudoMode] activating sudo mode for user"
  25. rclient.set SudoModeHandler._buildKey(userId), '1', 'EX', duration, callback
  26. clearSudoMode: (userId, callback=(err)->) ->
  27. if !userId?
  28. return callback(new Error('[SudoMode] user must be supplied'))
  29. logger.log {userId}, "[SudoMode] clearing sudo mode for user"
  30. rclient.del SudoModeHandler._buildKey(userId), callback
  31. isSudoModeActive: (userId, callback=(err, isActive)->) ->
  32. if !userId?
  33. return callback(new Error('[SudoMode] user must be supplied'))
  34. rclient.get SudoModeHandler._buildKey(userId), (err, result) ->
  35. if err?
  36. return callback(err)
  37. callback(null, result == '1')