diff --git a/lib/session/index.js b/lib/session/index.js index ba9490a5..fa3e424b 100644 --- a/lib/session/index.js +++ b/lib/session/index.js @@ -103,11 +103,11 @@ module.exports = function(ss) { }); }, - extractSocketSessionToken: function(request) { - if (!this.strategy.extractSocketSessionToken) { + identifySocketSession: function(request) { + if (!this.strategy.identifySocketSession) { throw new Error('No session strategy defined! Did you forget to "npm install socketstream-cookie-session" ?'); } - var id = this.strategy.extractSocketSessionToken(request, this.options); + var id = this.strategy.identifySocketSession(request, this.options); debug('extracted session id %s',id); return id; }, diff --git a/lib/websocket/transports/engineio/index.js b/lib/websocket/transports/engineio/index.js index 70687694..a32dc523 100644 --- a/lib/websocket/transports/engineio/index.js +++ b/lib/websocket/transports/engineio/index.js @@ -74,8 +74,8 @@ module.exports = function(ss, messageEmitter, config){ function onConnection(socket) { // socket.is = ID from 'io' cookie // socket.request.headers.cookie has cookie string - var sessionToken = ss.session.extractSocketSessionToken(socket.request); - debug('on connection (session=%s)',sessionToken); + var IDs = ss.session.identifySocketSession(socket.request); + debug('on connection (session=%s)',IDs.sessionId); if (sessionToken) { //TODO all this stuff should go in the session store socket.sessionToken = sessionToken; @@ -92,7 +92,12 @@ module.exports = function(ss, messageEmitter, config){ // Allow this connection to be addressed by the socket ID openSocketsById[socket.id] = socket; ss.session.find(socket.sessionToken, socket.id, function(session){ - socket.send('X|OK|'+sessionToken); + var IDs = ss.session.identifySocketSession(socket, content.split('|')); + socket.write('X|OK|'+JSON.stringify(IDs)); + var IDs = ss.session.identifySocketSession(socket, content.split('|')); + socket.write('X|OK|'+JSON.stringify(IDs)); + + socket.send('X|session-token|'+sessionToken); debug('session %s found, sent X|OK to client.',sessionToken); }); diff --git a/lib/websocket/transports/engineio/wrapper.js b/lib/websocket/transports/engineio/wrapper.js index 227e82d6..81b4b382 100644 --- a/lib/websocket/transports/engineio/wrapper.js +++ b/lib/websocket/transports/engineio/wrapper.js @@ -22,9 +22,10 @@ module.exports = function(serverStatus, message, _config) { //config = port:"3000", secure:false, host: "localhost", hostname:"localhost" //sock.id = session id - var sessionToken = require('socketstream-session').getSessionToken(); - if (sessionToken) { - sock.send('X|' + sessionToken); // sending access claims + var sessionToken = require('socketstream-session').getSessionToken(), + sessionId = require('socketstream-session').getSessionId(); + if (sessionToken || sessionId) { + sock.send('X|' + sessionToken + '|' + sessionId); // sending access claims } else{ //TODO perhaps for config.localStorage it is sent by server console.error('Unable to obtain session ID'); diff --git a/lib/websocket/transports/sockjs/index.js b/lib/websocket/transports/sockjs/index.js index 347d29aa..aab1eafe 100644 --- a/lib/websocket/transports/sockjs/index.js +++ b/lib/websocket/transports/sockjs/index.js @@ -82,8 +82,7 @@ module.exports = function(ss, messageEmitter, config) { socket.remoteAddress = xForwardedFor.split(',')[0]; } - //TODO - var sessionToken = ss.session.extractSocketSessionToken(socket.request); + //TODO set session relationship //TODO set io cookie to socket.id socket.on('data', function(msg) { @@ -99,11 +98,9 @@ module.exports = function(ss, messageEmitter, config) { // If this responderId is 'X', assume this is a system message if (responderId === 'X') { - - // Set the sessionToken against this socket and tell the client we're ready for requests - var rawsessionToken = content.split('.')[0]; - socket.sessionToken = rawsessionToken.split(':')[1].replace(/\s/g, '+'); - socket.write('X|OK|'+sessionToken); + var IDs = ss.session.identifySocketSession(socket, content.split('|')); + //TODO ss.session.find(IDs, function() { socket.write(...); }) + socket.write('X|OK|'+JSON.stringify(IDs)); // Otherwise go ahead and process a regular incoming message } else if (socket.sessionToken) { diff --git a/lib/websocket/transports/sockjs/wrapper.js b/lib/websocket/transports/sockjs/wrapper.js index 6f9af971..50378029 100644 --- a/lib/websocket/transports/sockjs/wrapper.js +++ b/lib/websocket/transports/sockjs/wrapper.js @@ -15,12 +15,10 @@ module.exports = function(serverStatus, message, config){ var sock = new SockJS('/ws', {}, config); sock.onopen = function() { - //sock.secure = secure channel ? - //sock.id = session id - - var sessionToken = require('socketstream-session').getSessionToken(); - if (sessionToken) { - sock.send('X|' + sessionToken); // sending access claims + var sessionToken = require('socketstream-session').getSessionToken(), + sessionId = require('socketstream-session').getSessionId(); + if (sessionToken || sessionId) { + sock.send('X|' + sessionToken + '|' + sessionId); // sending access claims } else{ console.error('Unable to obtain session ID'); }