Fix race condition on OnlyOffice

https://github.com/cryptpad/cryptpad/issues/1319
This commit is contained in:
Wolfgang Ginolas 2023-12-19 08:37:52 +01:00
parent 4c81c95a94
commit 32c22a8b61
3 changed files with 3 additions and 3 deletions

View file

@ -424,7 +424,7 @@ opt_isIdle){this._isViewer=isViewer;if(this._locks){this.ownedLockBlocks=[];for(
"indexUser":this._indexUser},"editorType":this.editorType,"lastOtherSaveTime":this.lastOtherSaveTime,"block":this.ownedLockBlocks,"sessionId":this._id,"sessionTimeConnect":this._sessionTimeConnect,"sessionTimeIdle":opt_isIdle>=0?opt_isIdle:0,"documentFormatSave":this._documentFormatSave,"view":this._isViewer,"isCloseCoAuthoring":this.isCloseCoAuthoring,"openCmd":opt_openCmd,"lang":this.lang,"mode":this.mode,"permissions":this.permissions,"encrypted":this.encrypted,"IsAnonymousUser":this.IsAnonymousUser,
"timezoneOffset":(new Date).getTimezoneOffset(),"coEditingMode":this.coEditingMode,"jwtOpen":this.jwtOpen,"jwtSession":this.jwtSession,"time":Math.round(performance.now()),"supportAuthChangesAck":true})};DocsCoApi.prototype._initSocksJs=function(){var t=this;var socketio;socketio=this.socketio={};var send=function(data){setTimeout(function(){socketio.onmessage({data:JSON.stringify(data)})})};var license={type:"license",license:{type:3,mode:0,rights:1,buildVersion:"7.3.3",buildNumber:8}};var channel;
require(["/common/outer/worker-channel.js","/common/common-util.js"],function(Channel,Util){var msgEv=Util.mkEvent();var p=window.parent;if(editor&&editor.isReporterMode){p=window.opener;window.parent=p}else window.APP=p&&p.APP;window.addEventListener("message",function(msg){if(msg.source!==p)return;msgEv.fire(msg)});var postMsg=function(data){p.postMessage(data,"*")};Channel.create(msgEv,postMsg,function(chan){channel=chan;send(license);chan.on("CMD",function(obj){send(obj)})})});socketio.onopen=
function(){t._onServerOpen()};socketio.onopen();socketio.close=function(){console.error("Close realtime")};socketio.emit=function(type,data){if(channel)channel.event("CMD",data)};socketio.onmessage=function(e){t._onServerMessage(JSON.parse(e.data))};return socketio};DocsCoApi.prototype._onServerOpen=function(){this._state=ConnectionState.WaitAuth;this.onFirstConnect()};DocsCoApi.prototype._onServerMessage=function(data){var dataObject=data;switch(dataObject["type"]){case "auth":this._onAuth(dataObject);
function(){t._onServerOpen()};socketio.onopen();socketio.close=function(){console.error("Close realtime")};socketio.emit=function(type,data){if(channel)channel.event("CMD",structuredClone(data))};socketio.onmessage=function(e){t._onServerMessage(JSON.parse(e.data))};return socketio};DocsCoApi.prototype._onServerOpen=function(){this._state=ConnectionState.WaitAuth;this.onFirstConnect()};DocsCoApi.prototype._onServerMessage=function(data){var dataObject=data;switch(dataObject["type"]){case "auth":this._onAuth(dataObject);
break;case "message":this._onMessages(dataObject,false);break;case "cursor":this._onCursor(dataObject);break;case "meta":this._onMeta(dataObject);break;case "getLock":this._onGetLock(dataObject);break;case "releaseLock":this._onReleaseLock(dataObject);break;case "connectState":this._onConnectionStateChanged(dataObject);break;case "saveChanges":this._onSaveChanges(dataObject);break;case "authChanges":this._onAuthChanges(dataObject);break;case "saveLock":this._onSaveLock(dataObject);break;case "unSaveLock":this._onUnSaveLock(dataObject);
break;case "savePartChanges":this._onSavePartChanges(dataObject);break;case "drop":this._onDrop(dataObject);break;case "disconnectReason":this._onDisconnectReason(dataObject);break;case "waitAuth":break;case "error":this._onDrop(dataObject);break;case "documentOpen":this._documentOpen(dataObject);break;case "warning":this._onWarning(dataObject);break;case "license":this._onLicense(dataObject);break;case "session":this._onSession(dataObject);break;case "refreshToken":this._onRefreshToken(dataObject["messages"]);
break;case "expiredToken":this._onExpiredToken(dataObject);break;case "forceSaveStart":this._onForceSaveStart(dataObject["messages"]);break;case "forceSave":this._onForceSave(dataObject["messages"]);break;case "rpc":this._onPRC(dataObject["responseKey"],false,dataObject["data"]);break}};DocsCoApi.prototype._onServerClose=function(explicit){if(ConnectionState.SaveChanges===this._state){this._isReSaveAfterAuth=true;if(null!==this.saveCallbackErrorTimeOutId){clearTimeout(this.saveCallbackErrorTimeOutId);

View file

@ -424,7 +424,7 @@ opt_isIdle){this._isViewer=isViewer;if(this._locks){this.ownedLockBlocks=[];for(
"indexUser":this._indexUser},"editorType":this.editorType,"lastOtherSaveTime":this.lastOtherSaveTime,"block":this.ownedLockBlocks,"sessionId":this._id,"sessionTimeConnect":this._sessionTimeConnect,"sessionTimeIdle":opt_isIdle>=0?opt_isIdle:0,"documentFormatSave":this._documentFormatSave,"view":this._isViewer,"isCloseCoAuthoring":this.isCloseCoAuthoring,"openCmd":opt_openCmd,"lang":this.lang,"mode":this.mode,"permissions":this.permissions,"encrypted":this.encrypted,"IsAnonymousUser":this.IsAnonymousUser,
"timezoneOffset":(new Date).getTimezoneOffset(),"coEditingMode":this.coEditingMode,"jwtOpen":this.jwtOpen,"jwtSession":this.jwtSession,"time":Math.round(performance.now()),"supportAuthChangesAck":true})};DocsCoApi.prototype._initSocksJs=function(){var t=this;var socketio;socketio=this.socketio={};var send=function(data){setTimeout(function(){socketio.onmessage({data:JSON.stringify(data)})})};var license={type:"license",license:{type:3,mode:0,rights:1,buildVersion:"7.3.3",buildNumber:8}};var channel;
require(["/common/outer/worker-channel.js","/common/common-util.js"],function(Channel,Util){var msgEv=Util.mkEvent();var p=window.parent;if(editor&&editor.isReporterMode){p=window.opener;window.parent=p}else window.APP=p&&p.APP;window.addEventListener("message",function(msg){if(msg.source!==p)return;msgEv.fire(msg)});var postMsg=function(data){p.postMessage(data,"*")};Channel.create(msgEv,postMsg,function(chan){channel=chan;send(license);chan.on("CMD",function(obj){send(obj)})})});socketio.onopen=
function(){t._onServerOpen()};socketio.onopen();socketio.close=function(){console.error("Close realtime")};socketio.emit=function(type,data){if(channel)channel.event("CMD",data)};socketio.onmessage=function(e){t._onServerMessage(JSON.parse(e.data))};return socketio};DocsCoApi.prototype._onServerOpen=function(){this._state=ConnectionState.WaitAuth;this.onFirstConnect()};DocsCoApi.prototype._onServerMessage=function(data){var dataObject=data;switch(dataObject["type"]){case "auth":this._onAuth(dataObject);
function(){t._onServerOpen()};socketio.onopen();socketio.close=function(){console.error("Close realtime")};socketio.emit=function(type,data){if(channel)channel.event("CMD",structuredClone(data))};socketio.onmessage=function(e){t._onServerMessage(JSON.parse(e.data))};return socketio};DocsCoApi.prototype._onServerOpen=function(){this._state=ConnectionState.WaitAuth;this.onFirstConnect()};DocsCoApi.prototype._onServerMessage=function(data){var dataObject=data;switch(dataObject["type"]){case "auth":this._onAuth(dataObject);
break;case "message":this._onMessages(dataObject,false);break;case "cursor":this._onCursor(dataObject);break;case "meta":this._onMeta(dataObject);break;case "getLock":this._onGetLock(dataObject);break;case "releaseLock":this._onReleaseLock(dataObject);break;case "connectState":this._onConnectionStateChanged(dataObject);break;case "saveChanges":this._onSaveChanges(dataObject);break;case "authChanges":this._onAuthChanges(dataObject);break;case "saveLock":this._onSaveLock(dataObject);break;case "unSaveLock":this._onUnSaveLock(dataObject);
break;case "savePartChanges":this._onSavePartChanges(dataObject);break;case "drop":this._onDrop(dataObject);break;case "disconnectReason":this._onDisconnectReason(dataObject);break;case "waitAuth":break;case "error":this._onDrop(dataObject);break;case "documentOpen":this._documentOpen(dataObject);break;case "warning":this._onWarning(dataObject);break;case "license":this._onLicense(dataObject);break;case "session":this._onSession(dataObject);break;case "refreshToken":this._onRefreshToken(dataObject["messages"]);
break;case "expiredToken":this._onExpiredToken(dataObject);break;case "forceSaveStart":this._onForceSaveStart(dataObject["messages"]);break;case "forceSave":this._onForceSave(dataObject["messages"]);break;case "rpc":this._onPRC(dataObject["responseKey"],false,dataObject["data"]);break}};DocsCoApi.prototype._onServerClose=function(explicit){if(ConnectionState.SaveChanges===this._state){this._isReSaveAfterAuth=true;if(null!==this.saveCallbackErrorTimeOutId){clearTimeout(this.saveCallbackErrorTimeOutId);

View file

@ -424,7 +424,7 @@ opt_isIdle){this._isViewer=isViewer;if(this._locks){this.ownedLockBlocks=[];for(
"indexUser":this._indexUser},"editorType":this.editorType,"lastOtherSaveTime":this.lastOtherSaveTime,"block":this.ownedLockBlocks,"sessionId":this._id,"sessionTimeConnect":this._sessionTimeConnect,"sessionTimeIdle":opt_isIdle>=0?opt_isIdle:0,"documentFormatSave":this._documentFormatSave,"view":this._isViewer,"isCloseCoAuthoring":this.isCloseCoAuthoring,"openCmd":opt_openCmd,"lang":this.lang,"mode":this.mode,"permissions":this.permissions,"encrypted":this.encrypted,"IsAnonymousUser":this.IsAnonymousUser,
"timezoneOffset":(new Date).getTimezoneOffset(),"coEditingMode":this.coEditingMode,"jwtOpen":this.jwtOpen,"jwtSession":this.jwtSession,"time":Math.round(performance.now()),"supportAuthChangesAck":true})};DocsCoApi.prototype._initSocksJs=function(){var t=this;var socketio;socketio=this.socketio={};var send=function(data){setTimeout(function(){socketio.onmessage({data:JSON.stringify(data)})})};var license={type:"license",license:{type:3,mode:0,rights:1,buildVersion:"7.3.3",buildNumber:8}};var channel;
require(["/common/outer/worker-channel.js","/common/common-util.js"],function(Channel,Util){var msgEv=Util.mkEvent();var p=window.parent;if(editor&&editor.isReporterMode){p=window.opener;window.parent=p}else window.APP=p&&p.APP;window.addEventListener("message",function(msg){if(msg.source!==p)return;msgEv.fire(msg)});var postMsg=function(data){p.postMessage(data,"*")};Channel.create(msgEv,postMsg,function(chan){channel=chan;send(license);chan.on("CMD",function(obj){send(obj)})})});socketio.onopen=
function(){t._onServerOpen()};socketio.onopen();socketio.close=function(){console.error("Close realtime")};socketio.emit=function(type,data){if(channel)channel.event("CMD",data)};socketio.onmessage=function(e){t._onServerMessage(JSON.parse(e.data))};return socketio};DocsCoApi.prototype._onServerOpen=function(){this._state=ConnectionState.WaitAuth;this.onFirstConnect()};DocsCoApi.prototype._onServerMessage=function(data){var dataObject=data;switch(dataObject["type"]){case "auth":this._onAuth(dataObject);
function(){t._onServerOpen()};socketio.onopen();socketio.close=function(){console.error("Close realtime")};socketio.emit=function(type,data){if(channel)channel.event("CMD",structuredClone(data))};socketio.onmessage=function(e){t._onServerMessage(JSON.parse(e.data))};return socketio};DocsCoApi.prototype._onServerOpen=function(){this._state=ConnectionState.WaitAuth;this.onFirstConnect()};DocsCoApi.prototype._onServerMessage=function(data){var dataObject=data;switch(dataObject["type"]){case "auth":this._onAuth(dataObject);
break;case "message":this._onMessages(dataObject,false);break;case "cursor":this._onCursor(dataObject);break;case "meta":this._onMeta(dataObject);break;case "getLock":this._onGetLock(dataObject);break;case "releaseLock":this._onReleaseLock(dataObject);break;case "connectState":this._onConnectionStateChanged(dataObject);break;case "saveChanges":this._onSaveChanges(dataObject);break;case "authChanges":this._onAuthChanges(dataObject);break;case "saveLock":this._onSaveLock(dataObject);break;case "unSaveLock":this._onUnSaveLock(dataObject);
break;case "savePartChanges":this._onSavePartChanges(dataObject);break;case "drop":this._onDrop(dataObject);break;case "disconnectReason":this._onDisconnectReason(dataObject);break;case "waitAuth":break;case "error":this._onDrop(dataObject);break;case "documentOpen":this._documentOpen(dataObject);break;case "warning":this._onWarning(dataObject);break;case "license":this._onLicense(dataObject);break;case "session":this._onSession(dataObject);break;case "refreshToken":this._onRefreshToken(dataObject["messages"]);
break;case "expiredToken":this._onExpiredToken(dataObject);break;case "forceSaveStart":this._onForceSaveStart(dataObject["messages"]);break;case "forceSave":this._onForceSave(dataObject["messages"]);break;case "rpc":this._onPRC(dataObject["responseKey"],false,dataObject["data"]);break}};DocsCoApi.prototype._onServerClose=function(explicit){if(ConnectionState.SaveChanges===this._state){this._isReSaveAfterAuth=true;if(null!==this.saveCallbackErrorTimeOutId){clearTimeout(this.saveCallbackErrorTimeOutId);