summaryrefslogtreecommitdiff
path: root/src/node/hooks/express/socketio.js
diff options
context:
space:
mode:
authorEgil Moeller <egil.moller@freecode.no>2012-04-19 14:25:12 +0200
committerEgil Moeller <egil.moller@freecode.no>2012-04-19 14:25:12 +0200
commitac36a99a7226e1092c2e7e28c9b6e32d8f82e6fb (patch)
treea1de593a6290b66454c7f3684df63441ebb7bd83 /src/node/hooks/express/socketio.js
parent4c1d94343fe1b1a8ff02d7cfaef9f9506676d072 (diff)
downloadetherpad-lite-ac36a99a7226e1092c2e7e28c9b6e32d8f82e6fb.zip
More general basic auth
Diffstat (limited to 'src/node/hooks/express/socketio.js')
-rw-r--r--src/node/hooks/express/socketio.js18
1 files changed, 17 insertions, 1 deletions
diff --git a/src/node/hooks/express/socketio.js b/src/node/hooks/express/socketio.js
index e040f7ac..6774b653 100644
--- a/src/node/hooks/express/socketio.js
+++ b/src/node/hooks/express/socketio.js
@@ -7,11 +7,27 @@ var hooks = require("ep_etherpad-lite/static/js/pluginfw/hooks");
var padMessageHandler = require("../../handler/PadMessageHandler");
var timesliderMessageHandler = require("../../handler/TimesliderMessageHandler");
-
+var connect = require('connect');
+
exports.expressCreateServer = function (hook_name, args, cb) {
//init socket.io and redirect all requests to the MessageHandler
var io = socketio.listen(args.app);
+ /* Require an express session cookie to be present, and load the
+ * session. See http://www.danielbaulig.de/socket-ioexpress for more
+ * info */
+ io.set('authorization', function (data, accept) {
+ if (!data.headers.cookie) return accept('No session cookie transmitted.', false);
+ data.cookie = connect.utils.parseCookie(data.headers.cookie);
+ data.sessionID = data.cookie.express_sid;
+ args.app.sessionStore.get(data.sessionID, function (err, session) {
+ if (err || !session) return accept('Bad session / session has expired', false);
+ data.session = new connect.middleware.session.Session(data, session);
+ accept(null, true);
+ });
+ });
+
+
//this is only a workaround to ensure it works with all browers behind a proxy
//we should remove this when the new socket.io version is more stable
io.set('transports', ['xhr-polling']);