overleaf/services/web/app/coffee/Features/SudoMode/SudoModeHandler.coffee

37 lines
1.3 KiB
CoffeeScript

RedisWrapper = require('../../infrastructure/RedisWrapper')
rclient = RedisWrapper.client('sudomode')
logger = require('logger-sharelatex')
AuthenticationManager = require '../Authentication/AuthenticationManager'
TIMEOUT_IN_SECONDS = 60 * 60
module.exports = SudoModeHandler =
_buildKey: (userId) ->
"SudoMode:{#{userId}}"
authenticate: (email, password, callback=(err, user)->) ->
AuthenticationManager.authenticate {email}, password, callback
activateSudoMode: (userId, callback=(err)->) ->
if !userId?
return callback(new Error('[SudoMode] user must be supplied'))
duration = TIMEOUT_IN_SECONDS
logger.log {userId, duration}, "[SudoMode] activating sudo mode for user"
rclient.set SudoModeHandler._buildKey(userId), '1', 'EX', duration, callback
clearSudoMode: (userId, callback=(err)->) ->
if !userId?
return callback(new Error('[SudoMode] user must be supplied'))
logger.log {userId}, "[SudoMode] clearing sudo mode for user"
rclient.del SudoModeHandler._buildKey(userId), callback
isSudoModeActive: (userId, callback=(err, isActive)->) ->
if !userId?
return callback(new Error('[SudoMode] user must be supplied'))
rclient.get SudoModeHandler._buildKey(userId), (err, result) ->
if err?
return callback(err)
callback(null, result == '1')