summaryrefslogtreecommitdiff
path: root/src/node/hooks/express/socketio.js
diff options
context:
space:
mode:
authorMarcel Klehr <mklehr@gmx.net>2012-09-22 16:03:40 +0200
committerMarcel Klehr <mklehr@gmx.net>2012-09-22 16:03:40 +0200
commit0c9c1f514fba98b4333d92ce6a331818ec2ebe97 (patch)
tree257ac04b0b859f8d76e082c48d4f892b28b88f6f /src/node/hooks/express/socketio.js
parent0f436d5916807cde879617c85a5aea18b98ae1d4 (diff)
downloadetherpad-lite-0c9c1f514fba98b4333d92ce6a331818ec2ebe97.zip
Fix socket.io auth: Use connect to parse signed cookies (migrate to express v3)
Diffstat (limited to 'src/node/hooks/express/socketio.js')
-rw-r--r--src/node/hooks/express/socketio.js22
1 files changed, 16 insertions, 6 deletions
diff --git a/src/node/hooks/express/socketio.js b/src/node/hooks/express/socketio.js
index 9e1a010f..546ba2af 100644
--- a/src/node/hooks/express/socketio.js
+++ b/src/node/hooks/express/socketio.js
@@ -3,6 +3,7 @@ var socketio = require('socket.io');
var settings = require('../../utils/Settings');
var socketIORouter = require("../../handler/SocketIORouter");
var hooks = require("ep_etherpad-lite/static/js/pluginfw/hooks");
+var webaccess = require("ep_etherpad-lite/node/hooks/express/webaccess");
var padMessageHandler = require("../../handler/PadMessageHandler");
@@ -17,12 +18,21 @@ exports.expressCreateServer = function (hook_name, args, cb) {
* 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);
+
+ // Use connect's cookie parser, because it knows how to parse signed cookies
+ connect.cookieParser(webaccess.secret)(data, {}, function(err){
+ if(err) {
+ console.error(err);
+ accept("Couldn't parse request cookies. ", false);
+ return;
+ }
+
+ data.sessionID = data.signedCookies.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);
+ });
});
});