New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

express-socket.io-session

Package Overview
Dependencies
Maintainers
1
Versions
20
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

express-socket.io-session - npm Package Compare versions

Comparing version 1.3.3 to 1.3.4

105

example/index.js
var debug = require("debug")("express-socket.io-session:example"),
app = require('express')(),
server = require("http").createServer(app),
io = require("socket.io")(server),
session = require("express-session")({
secret: "my-secret",
resave: true,
saveUninitialized: true
}),
sharedsession = require("../");
app = require("express")(),
server = require("http").createServer(app),
io = require("socket.io")(server),
session = require("express-session")({
secret: "my-secret",
resave: true,
saveUninitialized: true
}),
sharedsession = require("../");
// Attach session

@@ -17,16 +16,17 @@ app.use(session);

// Share session with io sockets
io.use(sharedsession(session, {
autoSave: true
}));
io.use(
sharedsession(session, {
autoSave: true
})
);
//Debugging express
app.use("*", function(req, res, next) {
debug("Express `req.session` data is %j.", req.session);
next();
debug("Express `req.session` data is %j.", req.session);
next();
});
// Debugging io
io.use(function(socket, next) {
debug("socket.handshake session data is %j.", socket.handshake.session);
next();
debug("socket.handshake session data is %j.", socket.handshake.session);
next();
});

@@ -38,47 +38,44 @@

app.use("/login", function(req, res, next) {
debug("Requested /login")
req.session.user = {
username: "OSK"
};
//req.session.save();
res.redirect("/");
debug("Requested /login");
req.session.user = {
username: "OSK"
};
//req.session.save();
res.redirect("/");
});
// Unset session data via express request
app.use("/logout", function(req, res, next) {
debug("Requested /logout")
delete req.session.user;
//req.session.save();
res.redirect("/");
debug("Requested /logout");
delete req.session.user;
//req.session.save();
res.redirect("/");
});
io.on("connection", function(socket) {
socket.emit("sessiondata", socket.handshake.session);
// Set session data via socket
debug("Emitting session data");
socket.on("login", function() {
debug("Received login message");
socket.handshake.session.user = {
username: "OSK"
};
debug("socket.handshake session data is %j.", socket.handshake.session);
socket.emit("sessiondata", socket.handshake.session);
// Set session data via socket
debug("Emitting session data");
socket.on("login", function() {
debug("Received login message");
socket.handshake.session.user = {
username: "OSK"
};
debug("socket.handshake session data is %j.", socket.handshake.session);
// socket.handshake.session.save();
//emit logged_in for debugging purposes of this example
socket.emit("logged_in", socket.handshake.session);
});
// Unset session data via socket
socket.on("logout", function() {
debug("Received logout message");
socket.handshake.session.user = {};
delete socket.handshake.session.logged;
// socket.handshake.session.save();
//emit logged_out for debugging purposes of this example
debug("socket.handshake session data is %j.", socket.handshake.session);
// socket.handshake.session.save();
//emit logged_in for debugging purposes of this example
socket.emit("logged_in", socket.handshake.session);
});
// Unset session data via socket
socket.on("logout", function() {
debug("Received logout message");
socket.handshake.session.user = {};
// socket.handshake.session.save();
//emit logged_out for debugging purposes of this example
debug("socket.handshake session data is %j.", socket.handshake.session);
socket.emit("logged_out", socket.handshake.session);
});
socket.emit("logged_out", socket.handshake.session);
});
});
server.listen(3000);
server.listen(3000);

@@ -12,3 +12,3 @@ {

"session": "^0.1.0",
"socket.io": "^1.3.5"
"socket.io": "^1.7.4"
},

@@ -15,0 +15,0 @@ "devDependencies": {},

@@ -1,2 +0,2 @@

var cookieparser = require('cookie-parser');
var cookieparser = require("cookie-parser");
var debug = require("debug")("express-socket.io-session");

@@ -16,107 +16,120 @@ var crc = require("crc").crc32;

*/
module.exports = function(expressSessionMiddleware, cookieParserMiddleware, options) {
var socketIoSharedSessionMiddleware;
module.exports = function(
expressSessionMiddleware,
cookieParserMiddleware,
options
) {
var socketIoSharedSessionMiddleware;
// Accept options as second argument if only 2 parameters passed
if (arguments.length == 2 && typeof cookieParserMiddleware === 'object') {
options = cookieParserMiddleware;
cookieParserMiddleware = undefined;
}
// Accept options as second argument if only 2 parameters passed
if (arguments.length == 2 && typeof cookieParserMiddleware === "object") {
options = cookieParserMiddleware;
cookieParserMiddleware = undefined;
}
if (typeof cookieParserMiddleware === 'undefined') {
debug("No cookie-parser instance passed as argument. Creating a cookie-parser " +
"instance with default values");
cookieParserMiddleware = cookieparser();
}
options = options || {};
var saveUninitializedSession = options.saveUninitialized;
debug("Creating socket.io middleware");
if (typeof cookieParserMiddleware === "undefined") {
debug(
"No cookie-parser instance passed as argument. Creating a cookie-parser " +
"instance with default values"
);
cookieParserMiddleware = cookieparser();
}
options = options || {};
var saveUninitializedSession = options.saveUninitialized;
debug("Creating socket.io middleware");
socketIoSharedSessionMiddleware = function(socket, next) {
var req = socket.handshake;
var res = {
end: function() {}
};
// originalHash, savedHash, originalId, cookieId
// are variables present for replicating express-session autoSaving behavioiur
var originalHash, savedHash;
var originalId;
var cookieId;
var _onevent = socket.onevent;
// Override socket.on if autoSave = true;
if (options.autoSave === true) {
debug("Using autoSave feature. express-session middleware will be called on every event received")
socket.onevent = function() {
debug("Executing socket.onevent monkeypatched by express-socket.io-session");
var _args = arguments;
originalHash = savedHash = hash(req.session);
cookieId = req.sessionID;
originalId = req.sessionID;
_onevent.apply(socket, _args);
if (shouldSave(req)) {
req.session.save()
}
};
}
//Parse session cookie
cookieParserMiddleware(req, res, function(err) {
if (err) {
debug("cookieParser errored");
return next(err);
}
expressSessionMiddleware(req, res, function(req, res) {
next();
});
});
/*
* These functions hash, isModified, isSaved, shouldSave
* and shouldDestroy are canibalized from express-session
* in order to this module being able to comply with the autoSave options.
*/
socketIoSharedSessionMiddleware = function(socket, next) {
var req = socket.handshake;
var res = {
end: function() {}
};
// originalHash, savedHash, originalId, cookieId
// are variables present for replicating express-session autoSaving behaviour
var originalHash, savedHash;
var originalId;
var cookieId;
var _onevent = socket.onevent;
// Override socket.on if autoSave = true;
if (options.autoSave === true) {
debug(
"Using autoSave feature. express-session middleware will be called on every event received"
);
socket.onevent = function() {
debug(
"Executing socket.onevent monkeypatched by express-socket.io-session"
);
var _args = arguments;
originalHash = savedHash = hash(req.session);
cookieId = req.sessionID;
originalId = req.sessionID;
_onevent.apply(socket, _args);
process.nextTick( function() {
if (shouldSave(req)) {
req.session.save();
}
} );
};
}
//Parse session cookie
cookieParserMiddleware(req, res, function(err) {
if (err) {
debug("cookieParser errored");
return next(err);
}
expressSessionMiddleware(req, res, function(req, res) {
next();
});
});
/*
* These functions hash, isModified, isSaved, shouldSave
* and shouldDestroy are canibalized from express-session
* in order to this module being able to comply with the autoSave options.
*/
/**
* Hash the given `sess` object omitting changes to `.cookie`.
*
* @param {Object} sess
* @return {String}
* @private
*/
/**
* Hash the given `sess` object omitting changes to `.cookie`.
*
* @param {Object} sess
* @return {String}
* @private
*/
function hash(sess) {
return crc(JSON.stringify(sess, function(key, val) {
if (key !== 'cookie') {
return val;
}
}));
}
function hash(sess) {
return crc(
JSON.stringify(sess, function(key, val) {
if (key !== "cookie") {
return val;
}
})
);
}
// check if session has been modified
function isModified(sess) {
return originalId !== sess.id || originalHash !== hash(sess);
}
// check if session has been modified
function isModified(sess) {
return originalId !== sess.id || originalHash !== hash(sess);
}
// check if session has been saved
function isSaved(sess) {
return originalId === sess.id && savedHash === hash(sess);
}
// check if session has been saved
function isSaved(sess) {
return originalId === sess.id && savedHash === hash(sess);
}
// determine if session should be destroyed
function shouldDestroy(req) {
return req.sessionID && unsetDestroy && req.session == null;
}
// determine if session should be saved to store
function shouldSave(req) {
// cannot set cookie without a session ID
if (typeof req.sessionID !== "string") {
debug(
"session ignored because of bogus req.sessionID %o",
req.sessionID
);
return false;
}
// determine if session should be saved to store
function shouldSave(req) {
// cannot set cookie without a session ID
if (typeof req.sessionID !== 'string') {
debug('session ignored because of bogus req.sessionID %o', req.sessionID);
return false;
}
return !saveUninitializedSession && cookieId !== req.sessionID
? isModified(req.session)
: !isSaved(req.session);
}
};
return !saveUninitializedSession && cookieId !== req.sessionID ? isModified(req.session) : !isSaved(req.session)
}
};
return socketIoSharedSessionMiddleware;
};
return socketIoSharedSessionMiddleware;
};
{
"name": "express-socket.io-session",
"version": "1.3.3",
"version": "1.3.4",
"description": "Share a cookie-based express-session middleware with socket.io",

@@ -27,3 +27,6 @@ "main": "index.js",

"debug": "~2.6.0"
},
"devDependencies": {
"prettier": "^1.13.5"
}
}
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc