UserSessionsManager.coffee 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  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.multi()
  16. .sadd(sessionSetKey, value)
  17. .expire(sessionSetKey, "#{Settings.cookieSessionLength}")
  18. .exec (err, response) ->
  19. if err
  20. logger.err {err, user_id: user._id, sessionId}, "error while adding session key to UserSessions set"
  21. return callback(err)
  22. callback()
  23. onLogout: (user, sessionId, callback=(err)-> ) ->
  24. logger.log {user_id: user._id, sessionId}, "onLogout handler"
  25. if !user
  26. logger.log {sessionId}, "no user, for some reason"
  27. return callback()
  28. sessionSetKey = UserSessionsManager._sessionSetKey(user)
  29. value = UserSessionsManager._sessionKey sessionId
  30. rclient.multi()
  31. .srem(sessionSetKey, value)
  32. .expire(sessionSetKey, "#{Settings.cookieSessionLength}")
  33. .exec (err, response) ->
  34. if err
  35. logger.err {err, user_id: user._id, sessionId}, "error while removing session key from UserSessions set"
  36. return callback(err)
  37. callback()
  38. revokeAllSessions: (user, callback=(err)->) ->
  39. logger.log {user_id: user._id}, "revoking all existing sessions for user"
  40. callback(null)
  41. touch: (user, callback=(err)->) ->
  42. if !user
  43. return callback(null)
  44. sessionSetKey = UserSessionsManager._sessionSetKey(user)
  45. rclient.expire sessionSetKey, "#{Settings.cookieSessionLength}", (err, response) ->
  46. if err
  47. logger.err {err, user_id: user._id}, "error while updating ttl on UserSessions set"
  48. return callback(err)