From 9eaa1f9677a690614fff904dcebf59190c22cb84 Mon Sep 17 00:00:00 2001 From: Jakob Ackermann Date: Mon, 8 Jun 2020 10:29:36 +0200 Subject: [PATCH] Merge pull request #2890 from overleaf/jpa-socket-io-secondary-id [misc] socket.io: use a secondary publicId for public facing usages GitOrigin-RevId: f472c90ce0706aaf409e63c4199e71899b1aefa3 --- services/web/frontend/js/ide/connection/ConnectionManager.js | 3 ++- services/web/frontend/js/ide/editor/ShareJsDoc.js | 5 +++-- .../web/frontend/js/ide/online-users/OnlineUsersManager.js | 5 +++-- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/services/web/frontend/js/ide/connection/ConnectionManager.js b/services/web/frontend/js/ide/connection/ConnectionManager.js index afdf2ab597..ffe7a138fc 100644 --- a/services/web/frontend/js/ide/connection/ConnectionManager.js +++ b/services/web/frontend/js/ide/connection/ConnectionManager.js @@ -177,7 +177,8 @@ export default (ConnectionManager = (function() { // from the server, either "connectionAccepted" or // "connectionRejected". - this.ide.socket.on('connectionAccepted', message => { + this.ide.socket.on('connectionAccepted', (_, publicId) => { + this.ide.socket.publicId = publicId || this.ide.socket.socket.sessionid // state should be 'authenticating'... sl_console.log('[socket.io connectionAccepted] allowed to connect') this.connected = true diff --git a/services/web/frontend/js/ide/editor/ShareJsDoc.js b/services/web/frontend/js/ide/editor/ShareJsDoc.js index 010c0de6cd..63b7b98aae 100644 --- a/services/web/frontend/js/ide/editor/ShareJsDoc.js +++ b/services/web/frontend/js/ide/editor/ShareJsDoc.js @@ -18,6 +18,7 @@ */ import EventEmitter from '../../utils/EventEmitter' import ShareJs from 'libs/sharejs' + let ShareJsDoc const SINGLE_USER_FLUSH_DELAY = 1000 // ms @@ -77,7 +78,7 @@ export default (ShareJsDoc = (function() { ) }, state: 'ok', - id: this.socket.socket.sessionid + id: this.socket.publicId } this._doc = new ShareJs.Doc(this.connection, this.doc_id, { @@ -257,7 +258,7 @@ export default (ShareJsDoc = (function() { updateConnectionState(state) { sl_console.log(`[updateConnectionState] Setting state to ${state}`) this.connection.state = state - this.connection.id = this.socket.socket.sessionid + this.connection.id = this.socket.publicId this._doc.autoOpen = false this._doc._connectionStateChanged(state) return (this.lastAcked = null) // reset the last ack time when connection changes diff --git a/services/web/frontend/js/ide/online-users/OnlineUsersManager.js b/services/web/frontend/js/ide/online-users/OnlineUsersManager.js index b528d47c7e..c86dcb1925 100644 --- a/services/web/frontend/js/ide/online-users/OnlineUsersManager.js +++ b/services/web/frontend/js/ide/online-users/OnlineUsersManager.js @@ -17,6 +17,7 @@ import ColorManager from '../colors/ColorManager' import 'crypto-js/md5' import './controllers/OnlineUsersController' + let OnlineUsersManager export default (OnlineUsersManager = (function() { @@ -42,7 +43,7 @@ export default (OnlineUsersManager = (function() { (error, connectedUsers) => { this.$scope.onlineUsers = {} for (let user of Array.from(connectedUsers || [])) { - if (user.client_id === this.ide.socket.socket.sessionid) { + if (user.client_id === this.ide.socket.publicId) { // Don't store myself continue } @@ -66,7 +67,7 @@ export default (OnlineUsersManager = (function() { }) this.ide.socket.on('clientTracking.clientUpdated', client => { - if (client.id !== this.ide.socket.socket.sessionid) { + if (client.id !== this.ide.socket.publicId) { // Check it's not me! return this.$scope.$apply(() => { this.$scope.onlineUsers[client.id] = client