mirror of
https://github.com/meteor/meteor.git
synced 2026-05-02 03:01:46 -04:00
Move login token code into the "RECONNECT TOKENS" section.
This commit is contained in:
committed by
Nick Martin
parent
0e4ba1580d
commit
92df70cb48
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user