diff --git a/services/web/app/coffee/Features/User/UserSessionsManager.coffee b/services/web/app/coffee/Features/User/UserSessionsManager.coffee index b3872ca417..78016e8a09 100644 --- a/services/web/app/coffee/Features/User/UserSessionsManager.coffee +++ b/services/web/app/coffee/Features/User/UserSessionsManager.coffee @@ -8,10 +8,6 @@ UserSessionsRedis = require('./UserSessionsRedis') rclient = UserSessionsRedis.client() module.exports = UserSessionsManager = - - _sessionSetKey: (user) -> - return "UserSessions:{#{user._id}}" - # mimic the key used by the express sessions _sessionKey: (sessionId) -> return "sess:#{sessionId}" @@ -24,7 +20,7 @@ module.exports = UserSessionsManager = logger.log {user_id: user._id}, "no sessionId to track, returning" return callback(null) logger.log {user_id: user._id, sessionId}, "onLogin handler" - sessionSetKey = UserSessionsManager._sessionSetKey(user) + sessionSetKey = UserSessionsRedis.sessionSetKey(user) value = UserSessionsManager._sessionKey sessionId rclient.multi() .sadd(sessionSetKey, value) @@ -44,7 +40,7 @@ module.exports = UserSessionsManager = logger.log {user_id: user._id}, "no sessionId to untrack, returning" return callback(null) logger.log {user_id: user._id, sessionId}, "onLogout handler" - sessionSetKey = UserSessionsManager._sessionSetKey(user) + sessionSetKey = UserSessionsRedis.sessionSetKey(user) value = UserSessionsManager._sessionKey sessionId rclient.multi() .srem(sessionSetKey, value) @@ -58,7 +54,7 @@ module.exports = UserSessionsManager = getAllUserSessions: (user, exclude, callback=(err, sessionKeys)->) -> exclude = _.map(exclude, UserSessionsManager._sessionKey) - sessionSetKey = UserSessionsManager._sessionSetKey(user) + sessionSetKey = UserSessionsRedis.sessionSetKey(user) rclient.smembers sessionSetKey, (err, sessionKeys) -> if err? logger.err user_id: user._id, "error getting all session keys for user from redis" @@ -94,7 +90,7 @@ module.exports = UserSessionsManager = logger.log {}, "no user to revoke sessions for, returning" return callback(null) logger.log {user_id: user._id}, "revoking all existing sessions for user" - sessionSetKey = UserSessionsManager._sessionSetKey(user) + sessionSetKey = UserSessionsRedis.sessionSetKey(user) rclient.smembers sessionSetKey, (err, sessionKeys) -> if err? logger.err {err, user_id: user._id, sessionSetKey}, "error getting contents of UserSessions set" @@ -123,7 +119,7 @@ module.exports = UserSessionsManager = if !user logger.log {}, "no user to touch sessions for, returning" return callback(null) - sessionSetKey = UserSessionsManager._sessionSetKey(user) + sessionSetKey = UserSessionsRedis.sessionSetKey(user) rclient.expire sessionSetKey, "#{Settings.cookieSessionLength}", (err, response) -> if err? logger.err {err, user_id: user._id}, "error while updating ttl on UserSessions set" @@ -135,7 +131,7 @@ module.exports = UserSessionsManager = logger.log {}, "no user, returning" return callback(null) logger.log {user_id: user._id}, "checking sessions for user" - sessionSetKey = UserSessionsManager._sessionSetKey(user) + sessionSetKey = UserSessionsRedis.sessionSetKey(user) rclient.smembers sessionSetKey, (err, sessionKeys) -> if err? logger.err {err, user_id: user._id, sessionSetKey}, "error getting contents of UserSessions set" diff --git a/services/web/app/coffee/Features/User/UserSessionsRedis.coffee b/services/web/app/coffee/Features/User/UserSessionsRedis.coffee index 2103f09fab..89ab7ed192 100644 --- a/services/web/app/coffee/Features/User/UserSessionsRedis.coffee +++ b/services/web/app/coffee/Features/User/UserSessionsRedis.coffee @@ -3,16 +3,19 @@ redis = require 'redis-sharelatex' ioredis = require 'ioredis' logger = require 'logger-sharelatex' +redisSessionsSettings = Settings.redis.websessions or Settings.redis.web + module.exports = Redis = - client: () -> - - redisSessionsSettings = Settings.redis.websessions or Settings.redis.web - if redisSessionsSettings?.cluster? logger.log {}, "using redis cluster for web sessions" rclient = new ioredis.Cluster(redisSessionsSettings.cluster) else rclient = redis.createClient(redisSessionsSettings) - return rclient + + sessionSetKey: (user) -> + if redisSessionsSettings?.cluster? + return "UserSessions:{#{user._id}}" + else + return "UserSessions:#{user._id}" diff --git a/services/web/test/UnitTests/coffee/User/UserSessionsManagerTests.coffee b/services/web/test/UnitTests/coffee/User/UserSessionsManagerTests.coffee index 8e75be83f5..b367bd893e 100644 --- a/services/web/test/UnitTests/coffee/User/UserSessionsManagerTests.coffee +++ b/services/web/test/UnitTests/coffee/User/UserSessionsManagerTests.coffee @@ -33,8 +33,9 @@ describe 'UserSessionsManager', -> @rclient.expire.returns(@rclient) @rclient.exec.callsArgWith(0, null) - @redis = + @UserSessionsRedis = client: () => @rclient + sessionSetKey: (user) => "UserSessions:{#{user._id}}" @logger = err: sinon.stub() error: sinon.stub() @@ -45,15 +46,9 @@ describe 'UserSessionsManager', -> @UserSessionsManager = SandboxedModule.require modulePath, requires: "logger-sharelatex": @logger "settings-sharelatex": @settings - './UserSessionsRedis': @redis + './UserSessionsRedis': @UserSessionsRedis 'async': Async - describe '_sessionSetKey', -> - - it 'should build the correct key', -> - result = @UserSessionsManager._sessionSetKey(@user) - result.should.equal 'UserSessions:{abcd}' - describe '_sessionKey', -> it 'should build the correct key', ->