From ce2516adf25fad8e8f4e0ab366353e8198d30f12 Mon Sep 17 00:00:00 2001 From: efkan Date: Mon, 16 Oct 2017 13:55:46 +0300 Subject: [PATCH 1/9] Changing `generateId` method Adding a callback to generateId method provides the program flow to continue after a new generated id is provided. --- lib/server.js | 80 +++++++++++++++++++++++++-------------------------- 1 file changed, 40 insertions(+), 40 deletions(-) diff --git a/lib/server.js b/lib/server.js index d52120a58..225e53f42 100644 --- a/lib/server.js +++ b/lib/server.js @@ -281,8 +281,8 @@ function sendErrorMessage (req, res, code) { * @api public */ -Server.prototype.generateId = function (req) { - return base64id.generateId(); +Server.prototype.generateId = function (req, callback) { + callback(base64id.generateId()); }; /** @@ -294,52 +294,52 @@ Server.prototype.generateId = function (req) { */ Server.prototype.handshake = function (transportName, req) { - var id = this.generateId(req); - - debug('handshaking client "%s"', id); + var self = this; + this.generateId(req, function (id) { + debug('handshaking client "%s"', id); + + try { + var transport = new transports[transportName](req); + if ('polling' === transportName) { + transport.maxHttpBufferSize = self.maxHttpBufferSize; + transport.httpCompression = self.httpCompression; + } else if ('websocket' === transportName) { + transport.perMessageDeflate = self.perMessageDeflate; + } - try { - var transport = new transports[transportName](req); - if ('polling' === transportName) { - transport.maxHttpBufferSize = this.maxHttpBufferSize; - transport.httpCompression = this.httpCompression; - } else if ('websocket' === transportName) { - transport.perMessageDeflate = this.perMessageDeflate; + if (req._query && req._query.b64) { + transport.supportsBinary = false; + } else { + transport.supportsBinary = true; + } + } catch (e) { + sendErrorMessage(req, req.res, Server.errors.BAD_REQUEST); + return; } - - if (req._query && req._query.b64) { - transport.supportsBinary = false; - } else { - transport.supportsBinary = true; + var socket = new Socket(id, self, transport, req); + + if (false !== self.cookie) { + transport.on('headers', function (headers) { + headers['Set-Cookie'] = cookieMod.serialize(self.cookie, id, + { + path: self.cookiePath, + httpOnly: self.cookiePath ? self.cookieHttpOnly : false + }); + }); } - } catch (e) { - sendErrorMessage(req, req.res, Server.errors.BAD_REQUEST); - return; - } - var socket = new Socket(id, this, transport, req); - var self = this; - if (false !== this.cookie) { - transport.on('headers', function (headers) { - headers['Set-Cookie'] = cookieMod.serialize(self.cookie, id, - { - path: self.cookiePath, - httpOnly: self.cookiePath ? self.cookieHttpOnly : false - }); - }); - } + transport.onRequest(req); - transport.onRequest(req); + self.clients[id] = socket; + self.clientsCount++; - this.clients[id] = socket; - this.clientsCount++; + socket.once('close', function () { + delete self.clients[id]; + self.clientsCount--; + }); - socket.once('close', function () { - delete self.clients[id]; - self.clientsCount--; + self.emit('connection', socket); }); - - this.emit('connection', socket); }; /** From b8d8c8ac22145366ef5337dccec84a30aa46ed04 Mon Sep 17 00:00:00 2001 From: efkan Date: Mon, 16 Oct 2017 13:57:04 +0300 Subject: [PATCH 2/9] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1f5226d22..51ba5147a 100644 --- a/README.md +++ b/README.md @@ -261,7 +261,7 @@ to a single process. - Overwrite this method to generate your custom socket id. - **Parameters** - `http.IncomingMessage`: a node request object - - **Returns** A socket id for connected client. + - `Function`: a callback method which contains the generated id value

From 88edb1378b483144125746ecdbeb892310509a07 Mon Sep 17 00:00:00 2001 From: efkan Date: Mon, 16 Oct 2017 13:58:53 +0300 Subject: [PATCH 3/9] Changing generateId method Adding callback to generateId method --- test/server.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/server.js b/test/server.js index 59bb41d2f..f1c2fdebf 100644 --- a/test/server.js +++ b/test/server.js @@ -234,8 +234,8 @@ describe('server', function () { var customId = 'CustomId' + Date.now(); - engine.generateId = function (req) { - return customId; + engine.generateId = function (req, callback) { + callback(customId); }; var socket = new eioc.Socket('ws://localhost:%d'.s(port)); From 644c9cd1cb1c93513da25c442b9e0ad5c1ed79e2 Mon Sep 17 00:00:00 2001 From: efkan Date: Tue, 17 Oct 2017 13:07:19 +0300 Subject: [PATCH 4/9] Update server.js --- test/server.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/server.js b/test/server.js index f1c2fdebf..363c0fdb5 100644 --- a/test/server.js +++ b/test/server.js @@ -235,7 +235,7 @@ describe('server', function () { var customId = 'CustomId' + Date.now(); engine.generateId = function (req, callback) { - callback(customId); + callback(null, customId); }; var socket = new eioc.Socket('ws://localhost:%d'.s(port)); From 5893dd7a124d9e10722bd90683c2638995ccd37f Mon Sep 17 00:00:00 2001 From: efkan Date: Tue, 17 Oct 2017 13:09:22 +0300 Subject: [PATCH 5/9] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 51ba5147a..fec7a7456 100644 --- a/README.md +++ b/README.md @@ -261,7 +261,7 @@ to a single process. - Overwrite this method to generate your custom socket id. - **Parameters** - `http.IncomingMessage`: a node request object - - `Function`: a callback method which contains the generated id value + - `Function`: a callback method which contains an error (if there is) object and the generated id value

From f2701929fa80ee7c8cedf6a40186b929596eba41 Mon Sep 17 00:00:00 2001 From: efkan Date: Tue, 17 Oct 2017 13:19:51 +0300 Subject: [PATCH 6/9] Update server.js --- lib/server.js | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/lib/server.js b/lib/server.js index 225e53f42..6adeb2ea9 100644 --- a/lib/server.js +++ b/lib/server.js @@ -282,7 +282,7 @@ function sendErrorMessage (req, res, code) { */ Server.prototype.generateId = function (req, callback) { - callback(base64id.generateId()); + callback(null, base64id.generateId()); }; /** @@ -295,10 +295,14 @@ Server.prototype.generateId = function (req, callback) { Server.prototype.handshake = function (transportName, req) { var self = this; - this.generateId(req, function (id) { + this.generateId(req, function (err, id) { debug('handshaking client "%s"', id); - + try { + if (err) { + throw err; + } + var transport = new transports[transportName](req); if ('polling' === transportName) { transport.maxHttpBufferSize = self.maxHttpBufferSize; From a7ec71a10577bdcdc13cda69224f86a4f5ca35b1 Mon Sep 17 00:00:00 2001 From: efkan Date: Tue, 17 Oct 2017 13:22:36 +0300 Subject: [PATCH 7/9] Update server.js --- lib/server.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/server.js b/lib/server.js index 6adeb2ea9..ffdcec860 100644 --- a/lib/server.js +++ b/lib/server.js @@ -297,12 +297,12 @@ Server.prototype.handshake = function (transportName, req) { var self = this; this.generateId(req, function (err, id) { debug('handshaking client "%s"', id); - + try { if (err) { throw err; } - + var transport = new transports[transportName](req); if ('polling' === transportName) { transport.maxHttpBufferSize = self.maxHttpBufferSize; From 964e0e5bd25226a32071328d1701d904a24c1b50 Mon Sep 17 00:00:00 2001 From: Damien Arrachequesne Date: Thu, 19 Oct 2017 18:28:50 +0200 Subject: [PATCH 8/9] add a test --- lib/server.js | 8 ++++---- test/server.js | 12 ++++++++++++ 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/lib/server.js b/lib/server.js index ffdcec860..d48c4ad79 100644 --- a/lib/server.js +++ b/lib/server.js @@ -296,13 +296,13 @@ Server.prototype.generateId = function (req, callback) { Server.prototype.handshake = function (transportName, req) { var self = this; this.generateId(req, function (err, id) { + if (err) { + sendErrorMessage(req, req.res, Server.errors.BAD_REQUEST); + return; + } debug('handshaking client "%s"', id); try { - if (err) { - throw err; - } - var transport = new transports[transportName](req); if ('polling' === transportName) { transport.maxHttpBufferSize = self.maxHttpBufferSize; diff --git a/test/server.js b/test/server.js index 363c0fdb5..a61f5d194 100644 --- a/test/server.js +++ b/test/server.js @@ -249,6 +249,18 @@ describe('server', function () { }); }); + it('should disallow connection when custom id cannot be generated', function (done) { + let engine = listen({ allowUpgrades: false }, port => { + engine.generateId = (req, callback) => { + callback(new Error('no ID found')); + }; + + let socket = new eioc.Socket('ws://localhost:%d'.s(port)); + socket.on('open', () => done(new Error('should not be able to connect'))); + socket.on('error', () => done()); + }); + }); + it('should exchange handshake data', function (done) { listen({ allowUpgrades: false }, function (port) { var socket = new eioc.Socket('ws://localhost:%d'.s(port)); From 1b50470838f5a763bf1e5c5a62d1f465dcf0bdce Mon Sep 17 00:00:00 2001 From: Damien Arrachequesne Date: Fri, 20 Oct 2017 07:52:23 +0200 Subject: [PATCH 9/9] use strict --- test/server.js | 1 + 1 file changed, 1 insertion(+) diff --git a/test/server.js b/test/server.js index a61f5d194..c081503fe 100644 --- a/test/server.js +++ b/test/server.js @@ -1,3 +1,4 @@ +'use strict'; /* eslint-disable standard/no-callback-literal */ /**