UserSessionsManager.coffee 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. Settings = require('settings-sharelatex')
  2. redis = require('redis-sharelatex')
  3. rclient = redis.createClient(Settings.redis.web)
  4. logger = require("logger-sharelatex")
  5. module.exports = UserSessionsManager =
  6. _sessionSetKey: (user) ->
  7. return "UserSessions:#{user._id}"
  8. # mimic the key used by the express sessions
  9. _sessionKey: (sessionId) ->
  10. return "sess:#{sessionId}"
  11. onLogin: (user, sessionId, callback=(err)-> ) ->
  12. logger.log {user_id: user._id, sessionId}, "onLogin handler"
  13. sessionSetKey = UserSessionsManager._sessionSetKey(user)
  14. value = UserSessionsManager._sessionKey sessionId
  15. rclient.sadd sessionSetKey, value, (err, response) ->
  16. if err
  17. logger.err {err, user_id: user._id, sessionId}, "error while adding session key to UserSessions set"
  18. return callback(err)
  19. callback()
  20. onLogout: (user, sessionId, callback=(err)-> ) ->
  21. logger.log {user_id: user._id, sessionId}, "onLogout handler"
  22. if !user
  23. logger.log {sessionId}, "no user, for some reason"
  24. return callback()
  25. sessionSetKey = UserSessionsManager._sessionSetKey(user)
  26. value = UserSessionsManager._sessionKey sessionId
  27. rclient.srem sessionSetKey, value, (err, response) ->
  28. if err
  29. logger.err {err, user_id: user._id, sessionId}, "error while removing session key from UserSessions set"
  30. return callback(err)
  31. callback()
  32. revokeAllSessions: (user, callback=(err)->) ->
  33. logger.log {user_id: user._id}, "revoking all existing sessions for user"
  34. callback(null)