| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- RedisWrapper = require('../../infrastructure/RedisWrapper')
- rclient = RedisWrapper.client('sudomode')
- logger = require('logger-sharelatex')
- AuthenticationManager = require '../Authentication/AuthenticationManager'
- Settings = require 'settings-sharelatex'
- V1Handler = require '../V1/V1Handler'
- UserGetter = require '../User/UserGetter'
- TIMEOUT_IN_SECONDS = 60 * 60
- module.exports = SudoModeHandler =
- _buildKey: (userId) ->
- "SudoMode:{#{userId}}"
- authenticate: (email, password, callback=(err, user)->) ->
- if Settings.overleaf?
- V1Handler.authWithV1 email, password, (err, isValid, v1Profile) ->
- if !isValid
- return callback(null, null)
- UserGetter.getUser {'overleaf.id': v1Profile.id}, callback
- else
- 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')
|