From 92df70cb4887cbe58a29b3137dfd20d88ea85f99 Mon Sep 17 00:00:00 2001 From: Andrew Wilcox Date: Tue, 19 Nov 2013 11:35:46 -0500 Subject: [PATCH] Move login token code into the "RECONNECT TOKENS" section. --- packages/accounts-base/accounts_server.js | 135 +++++++++++----------- 1 file changed, 68 insertions(+), 67 deletions(-) diff --git a/packages/accounts-base/accounts_server.js b/packages/accounts-base/accounts_server.js index 50ecfac581..a828a87c4b 100644 --- a/packages/accounts-base/accounts_server.js +++ b/packages/accounts-base/accounts_server.js @@ -1,70 +1,3 @@ -// token -> list of session ids -var sessionsByLoginToken = {}; - -// Remove the session from the list of open sessions for the token. -var removeSessionFromToken = function (token, sessionId) { - sessionsByLoginToken[token] = _.without( - sessionsByLoginToken[token], - sessionId - ); - if (_.isEmpty(sessionsByLoginToken[token])) - delete sessionsByLoginToken[token]; -}; - -var loginTokenChanged = function (sessionId, newToken, oldToken) { - var self = this; - if (oldToken) { - removeSessionFromToken(oldToken, sessionId); - } - if (newToken) { - if (! _.has(sessionsByLoginToken, newToken)) - sessionsByLoginToken[newToken] = []; - sessionsByLoginToken[newToken].push(sessionId); - } -}; - - -Accounts._getLoginToken = function (methodInvocation) { - return methodInvocation._sessionData.loginToken; -}; - -Accounts._setLoginToken = function (methodInvocation, newToken) { - var oldToken = methodInvocation._sessionData.loginToken; - methodInvocation._sessionData.loginToken = newToken; - loginTokenChanged(methodInvocation.sessionId, newToken, oldToken); -}; - - -// sessionId -> SessionHandle -var sessionHandles = {}; - -Meteor.server.onConnection(function (sessionHandle) { - var sessionId = sessionHandle.id; - sessionHandles[sessionId] = sessionHandle; - sessionHandle.onClose(function () { - var token = sessionHandle._sessionData.loginToken; - if (token) - removeSessionFromToken(token, sessionId); - delete sessionHandles[sessionId]; - }); -}); - - - -// Close all open sessions associated with any of the tokens in -// `tokens`. -var closeSessionsForTokens = function (tokens) { - _.each(tokens, function (token) { - if (_.has(sessionsByLoginToken, token)) { - _.each(sessionsByLoginToken[token], function (sessionId) { - sessionHandles[sessionId] && sessionHandles[sessionId].close(); - }); - } - }); -}; - - - /// /// CURRENT USER /// @@ -211,6 +144,74 @@ Meteor.methods({ /// /// support reconnecting using a meteor login token +// token -> list of session ids +var sessionsByLoginToken = {}; + +// Remove the session from the list of open sessions for the token. +var removeSessionFromToken = function (token, sessionId) { + sessionsByLoginToken[token] = _.without( + sessionsByLoginToken[token], + sessionId + ); + if (_.isEmpty(sessionsByLoginToken[token])) + delete sessionsByLoginToken[token]; +}; + +var loginTokenChanged = function (sessionId, newToken, oldToken) { + var self = this; + if (oldToken) { + removeSessionFromToken(oldToken, sessionId); + } + if (newToken) { + if (! _.has(sessionsByLoginToken, newToken)) + sessionsByLoginToken[newToken] = []; + sessionsByLoginToken[newToken].push(sessionId); + } +}; + + +Accounts._getLoginToken = function (methodInvocation) { + return methodInvocation._sessionData.loginToken; +}; + +Accounts._setLoginToken = function (methodInvocation, newToken) { + var oldToken = methodInvocation._sessionData.loginToken; + methodInvocation._sessionData.loginToken = newToken; + loginTokenChanged(methodInvocation.sessionId, newToken, oldToken); +}; + + +// sessionId -> SessionHandle +// XXX Wouldn't be necessary if there was an API to get the session or +// session handle from a session id. +var sessionHandles = {}; + +Meteor.server.onConnection(function (sessionHandle) { + var sessionId = sessionHandle.id; + sessionHandles[sessionId] = sessionHandle; + sessionHandle.onClose(function () { + var token = sessionHandle._sessionData.loginToken; + if (token) + removeSessionFromToken(token, sessionId); + delete sessionHandles[sessionId]; + }); +}); + + + +// Close all open sessions associated with any of the tokens in +// `tokens`. +var closeSessionsForTokens = function (tokens) { + _.each(tokens, function (token) { + if (_.has(sessionsByLoginToken, token)) { + _.each(sessionsByLoginToken[token], function (sessionId) { + sessionHandles[sessionId] && sessionHandles[sessionId].close(); + }); + } + }); +}; + + // Login handler for resume tokens. Accounts.registerLoginHandler(function(options) { if (!options.resume)