From d17ef183d01997c418e57cc95b5633575e91dd5b Mon Sep 17 00:00:00 2001 From: Jakob Ackermann Date: Tue, 21 Apr 2020 12:45:23 +0100 Subject: [PATCH 1/3] [Router] gracefully set and do not reset the ol_context --- services/real-time/app/coffee/Router.coffee | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/services/real-time/app/coffee/Router.coffee b/services/real-time/app/coffee/Router.coffee index f89e1d9eaf..b7d1ae2662 100644 --- a/services/real-time/app/coffee/Router.coffee +++ b/services/real-time/app/coffee/Router.coffee @@ -55,7 +55,7 @@ module.exports = Router = app.post "/client/:client_id/disconnect", httpAuth, HttpApiController.disconnectClient session.on 'connection', (error, client, session) -> - client.ol_context = {} + client.ol_context = {} unless client.ol_context client?.on "error", (err) -> logger.err { clientErr: err }, "socket.io client error" @@ -113,13 +113,9 @@ module.exports = Router = metrics.inc('socket-io.disconnect') metrics.gauge('socket-io.clients', io.sockets.clients()?.length - 1) - cleanup = () -> - delete client.ol_context WebsocketController.leaveProject io, client, (err) -> if err? - Router._handleError cleanup, err, client, "leaveProject" - else - cleanup() + Router._handleError (() ->), err, client, "leaveProject" # Variadic. The possible arguments: # doc_id, callback From 1fcf534dcfcb161c92321b2f4730a2921a4af934 Mon Sep 17 00:00:00 2001 From: Jakob Ackermann Date: Wed, 22 Apr 2020 11:36:20 +0200 Subject: [PATCH 2/3] [Router] revert preserving of client.ol_context We do not enter this line twice, it would result in multiple event handlers too. --- services/real-time/app/coffee/Router.coffee | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/services/real-time/app/coffee/Router.coffee b/services/real-time/app/coffee/Router.coffee index b7d1ae2662..3d891f1476 100644 --- a/services/real-time/app/coffee/Router.coffee +++ b/services/real-time/app/coffee/Router.coffee @@ -55,7 +55,9 @@ module.exports = Router = app.post "/client/:client_id/disconnect", httpAuth, HttpApiController.disconnectClient session.on 'connection', (error, client, session) -> - client.ol_context = {} unless client.ol_context + # init client context, we may access it in Router._handleError before + # setting any values + client.ol_context = {} client?.on "error", (err) -> logger.err { clientErr: err }, "socket.io client error" From 205efa8812d7ecd5ea49c49f8dda77819ba3c13a Mon Sep 17 00:00:00 2001 From: Jakob Ackermann Date: Wed, 22 Apr 2020 11:37:16 +0200 Subject: [PATCH 3/3] [WebsocketController] reset the client context before (re)populating it Co-Authored-By: Brian Gough --- services/real-time/app/coffee/WebsocketController.coffee | 1 + 1 file changed, 1 insertion(+) diff --git a/services/real-time/app/coffee/WebsocketController.coffee b/services/real-time/app/coffee/WebsocketController.coffee index 3ca030ca0c..f93e67f2a2 100644 --- a/services/real-time/app/coffee/WebsocketController.coffee +++ b/services/real-time/app/coffee/WebsocketController.coffee @@ -33,6 +33,7 @@ module.exports = WebsocketController = logger.warn {err, project_id, user_id, client_id: client.id}, "user is not authorized to join project" return callback(err) + client.ol_context = {} client.ol_context["privilege_level"] = privilegeLevel client.ol_context["user_id"] = user_id client.ol_context["project_id"] = project_id