diff options
author | Marcel Klehr <mklehr@gmx.net> | 2012-09-22 16:03:40 +0200 |
---|---|---|
committer | Marcel Klehr <mklehr@gmx.net> | 2012-09-22 16:03:40 +0200 |
commit | 0c9c1f514fba98b4333d92ce6a331818ec2ebe97 (patch) | |
tree | 257ac04b0b859f8d76e082c48d4f892b28b88f6f /src/node/hooks/express/socketio.js | |
parent | 0f436d5916807cde879617c85a5aea18b98ae1d4 (diff) | |
download | etherpad-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.js | 22 |
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); + }); }); }); |