From 69194982344cf9bc248450be62a34bca065f0c44 Mon Sep 17 00:00:00 2001
From: Joao Siebel <joaos_desenv@imdt.com.br>
Date: Tue, 29 Sep 2020 09:57:31 -0300
Subject: [PATCH] Prevent multiple attaches on socket close for the same user

---
 bigbluebutton-html5/imports/api/users/server/publishers.js | 6 ++++--
 bigbluebutton-html5/imports/ui/services/auth/index.js      | 6 ++++--
 2 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/bigbluebutton-html5/imports/api/users/server/publishers.js b/bigbluebutton-html5/imports/api/users/server/publishers.js
index f41ac18982..fbef72e132 100644
--- a/bigbluebutton-html5/imports/api/users/server/publishers.js
+++ b/bigbluebutton-html5/imports/api/users/server/publishers.js
@@ -9,7 +9,7 @@ import { extractCredentials } from '/imports/api/common/server/helpers';
 
 const ROLE_MODERATOR = Meteor.settings.public.user.role_moderator;
 
-function currentUser() {
+function currentUser(registerCallback) {
   if (!this.userId) {
     return Users.find({ meetingId: '' });
   }
@@ -27,7 +27,9 @@ function currentUser() {
     }
   });
 
-  this._session.socket.on('close', _.debounce(onCloseConnection, 100));
+  if (registerCallback) {
+    this._session.socket.on('close', _.debounce(onCloseConnection, 100));
+  }
 
   const selector = {
     meetingId,
diff --git a/bigbluebutton-html5/imports/ui/services/auth/index.js b/bigbluebutton-html5/imports/ui/services/auth/index.js
index e571a07654..785337a84c 100755
--- a/bigbluebutton-html5/imports/ui/services/auth/index.js
+++ b/bigbluebutton-html5/imports/ui/services/auth/index.js
@@ -229,9 +229,11 @@ class Auth {
         return;
       }
 
+      let registerCallback = true;
+
       Tracker.autorun((c) => {
         computation = c;
-        Meteor.subscribe('current-user');
+        Meteor.subscribe('current-user', registerCallback);
 
         const selector = { meetingId: this.meetingID, userId: this.userID };
         const fields = {
@@ -242,7 +244,7 @@ class Auth {
         if (!User || !('intId' in User)) {
           logger.info({ logCode: 'auth_service_resend_validateauthtoken' }, 're-send validateAuthToken for delayed authentication');
           makeCall('validateAuthToken', this.meetingID, this.userID, this.token);
-
+          registerCallback = false;
           return;
         }
 
-- 
GitLab