[fix] Block user from changing pad after he/she is disconnected
Use same approach of when channel state is chaged to "DISCONNECTED".pull/3182/head
parent
32ed4315e2
commit
0bd4169663
|
@ -1,5 +1,5 @@
|
||||||
/**
|
/**
|
||||||
* This code is mostly from the old Etherpad. Please help us to comment this code.
|
* This code is mostly from the old Etherpad. Please help us to comment this code.
|
||||||
* This helps other people to understand this code better and helps them to improve it.
|
* This helps other people to understand this code better and helps them to improve it.
|
||||||
* TL;DR COMMENTS ON THIS FILE ARE HIGHLY APPRECIATED
|
* TL;DR COMMENTS ON THIS FILE ARE HIGHLY APPRECIATED
|
||||||
*/
|
*/
|
||||||
|
@ -99,15 +99,15 @@ function getParams()
|
||||||
setting.callback(value);
|
setting.callback(value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Then URL applied stuff
|
// Then URL applied stuff
|
||||||
var params = getUrlVars()
|
var params = getUrlVars()
|
||||||
|
|
||||||
for(var i = 0; i < getParameters.length; i++)
|
for(var i = 0; i < getParameters.length; i++)
|
||||||
{
|
{
|
||||||
var setting = getParameters[i];
|
var setting = getParameters[i];
|
||||||
var value = params[setting.name];
|
var value = params[setting.name];
|
||||||
|
|
||||||
if(value && (value == setting.checkVal || setting.checkVal == null))
|
if(value && (value == setting.checkVal || setting.checkVal == null))
|
||||||
{
|
{
|
||||||
setting.callback(value);
|
setting.callback(value);
|
||||||
|
@ -156,7 +156,7 @@ function sendClientReady(isReconnect, messageType)
|
||||||
token = "t." + randomString();
|
token = "t." + randomString();
|
||||||
createCookie("token", token, 60);
|
createCookie("token", token, 60);
|
||||||
}
|
}
|
||||||
|
|
||||||
var sessionID = decodeURIComponent(readCookie("sessionID"));
|
var sessionID = decodeURIComponent(readCookie("sessionID"));
|
||||||
var password = readCookie("password");
|
var password = readCookie("password");
|
||||||
|
|
||||||
|
@ -169,14 +169,14 @@ function sendClientReady(isReconnect, messageType)
|
||||||
"token": token,
|
"token": token,
|
||||||
"protocolVersion": 2
|
"protocolVersion": 2
|
||||||
};
|
};
|
||||||
|
|
||||||
//this is a reconnect, lets tell the server our revisionnumber
|
//this is a reconnect, lets tell the server our revisionnumber
|
||||||
if(isReconnect == true)
|
if(isReconnect == true)
|
||||||
{
|
{
|
||||||
msg.client_rev=pad.collabClient.getCurrentRevisionNumber();
|
msg.client_rev=pad.collabClient.getCurrentRevisionNumber();
|
||||||
msg.reconnect=true;
|
msg.reconnect=true;
|
||||||
}
|
}
|
||||||
|
|
||||||
socket.json.send(msg);
|
socket.json.send(msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -203,12 +203,12 @@ function handshake()
|
||||||
socket.once('connect', function () {
|
socket.once('connect', function () {
|
||||||
sendClientReady(false);
|
sendClientReady(false);
|
||||||
});
|
});
|
||||||
|
|
||||||
socket.on('reconnect', function () {
|
socket.on('reconnect', function () {
|
||||||
pad.collabClient.setChannelState("CONNECTED");
|
pad.collabClient.setChannelState("CONNECTED");
|
||||||
pad.sendClientReady(true);
|
pad.sendClientReady(true);
|
||||||
});
|
});
|
||||||
|
|
||||||
socket.on('reconnecting', function() {
|
socket.on('reconnecting', function() {
|
||||||
pad.collabClient.setChannelState("RECONNECTING");
|
pad.collabClient.setChannelState("RECONNECTING");
|
||||||
});
|
});
|
||||||
|
@ -254,7 +254,7 @@ function handshake()
|
||||||
$("#passwordinput").focus();
|
$("#passwordinput").focus();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//if we haven't recieved the clientVars yet, then this message should it be
|
//if we haven't recieved the clientVars yet, then this message should it be
|
||||||
else if (!receivedClientVars && obj.type == "CLIENT_VARS")
|
else if (!receivedClientVars && obj.type == "CLIENT_VARS")
|
||||||
{
|
{
|
||||||
|
@ -267,7 +267,7 @@ function handshake()
|
||||||
clientVars = obj.data;
|
clientVars = obj.data;
|
||||||
clientVars.userAgent = "Anonymous";
|
clientVars.userAgent = "Anonymous";
|
||||||
clientVars.collab_client_vars.clientAgent = "Anonymous";
|
clientVars.collab_client_vars.clientAgent = "Anonymous";
|
||||||
|
|
||||||
//initalize the pad
|
//initalize the pad
|
||||||
pad._afterHandshake();
|
pad._afterHandshake();
|
||||||
initalized = true;
|
initalized = true;
|
||||||
|
@ -298,7 +298,7 @@ function handshake()
|
||||||
{
|
{
|
||||||
pad.changeViewOption('noColors', true);
|
pad.changeViewOption('noColors', true);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (settings.rtlIsTrue == true)
|
if (settings.rtlIsTrue == true)
|
||||||
{
|
{
|
||||||
pad.changeViewOption('rtlIsTrue', true);
|
pad.changeViewOption('rtlIsTrue', true);
|
||||||
|
@ -335,6 +335,12 @@ function handshake()
|
||||||
console.warn(obj);
|
console.warn(obj);
|
||||||
padconnectionstatus.disconnected(obj.disconnect);
|
padconnectionstatus.disconnected(obj.disconnect);
|
||||||
socket.disconnect();
|
socket.disconnect();
|
||||||
|
|
||||||
|
// block user from making any change to the pad
|
||||||
|
padeditor.disable();
|
||||||
|
padeditbar.disable();
|
||||||
|
padimpexp.disable();
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -345,13 +351,13 @@ function handshake()
|
||||||
});
|
});
|
||||||
// Bind the colorpicker
|
// Bind the colorpicker
|
||||||
var fb = $('#colorpicker').farbtastic({ callback: '#mycolorpickerpreview', width: 220});
|
var fb = $('#colorpicker').farbtastic({ callback: '#mycolorpickerpreview', width: 220});
|
||||||
// Bind the read only button
|
// Bind the read only button
|
||||||
$('#readonlyinput').on('click',function(){
|
$('#readonlyinput').on('click',function(){
|
||||||
padeditbar.setEmbedLinks();
|
padeditbar.setEmbedLinks();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
$.extend($.gritter.options, {
|
$.extend($.gritter.options, {
|
||||||
position: 'bottom-right', // defaults to 'top-right' but can be 'bottom-left', 'bottom-right', 'top-left', 'top-right' (added in 1.7.1)
|
position: 'bottom-right', // defaults to 'top-right' but can be 'bottom-left', 'bottom-right', 'top-left', 'top-right' (added in 1.7.1)
|
||||||
fade: false, // dont fade, too jerky on mobile
|
fade: false, // dont fade, too jerky on mobile
|
||||||
time: 6000 // hang on the screen for...
|
time: 6000 // hang on the screen for...
|
||||||
|
@ -424,7 +430,7 @@ var pad = {
|
||||||
if(window.history && window.history.pushState)
|
if(window.history && window.history.pushState)
|
||||||
{
|
{
|
||||||
$('#chattext p').remove(); //clear the chat messages
|
$('#chattext p').remove(); //clear the chat messages
|
||||||
window.history.pushState("", "", newHref);
|
window.history.pushState("", "", newHref);
|
||||||
receivedClientVars = false;
|
receivedClientVars = false;
|
||||||
sendClientReady(false, 'SWITCH_TO_PAD');
|
sendClientReady(false, 'SWITCH_TO_PAD');
|
||||||
}
|
}
|
||||||
|
@ -731,20 +737,20 @@ var pad = {
|
||||||
pad.diagnosticInfo.disconnectedMessage = message;
|
pad.diagnosticInfo.disconnectedMessage = message;
|
||||||
pad.diagnosticInfo.padId = pad.getPadId();
|
pad.diagnosticInfo.padId = pad.getPadId();
|
||||||
pad.diagnosticInfo.socket = {};
|
pad.diagnosticInfo.socket = {};
|
||||||
|
|
||||||
//we filter non objects from the socket object and put them in the diagnosticInfo
|
//we filter non objects from the socket object and put them in the diagnosticInfo
|
||||||
//this ensures we have no cyclic data - this allows us to stringify the data
|
//this ensures we have no cyclic data - this allows us to stringify the data
|
||||||
for(var i in socket.socket)
|
for(var i in socket.socket)
|
||||||
{
|
{
|
||||||
var value = socket.socket[i];
|
var value = socket.socket[i];
|
||||||
var type = typeof value;
|
var type = typeof value;
|
||||||
|
|
||||||
if(type == "string" || type == "number")
|
if(type == "string" || type == "number")
|
||||||
{
|
{
|
||||||
pad.diagnosticInfo.socket[i] = value;
|
pad.diagnosticInfo.socket[i] = value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pad.asyncSendDiagnosticInfo();
|
pad.asyncSendDiagnosticInfo();
|
||||||
if (typeof window.ajlog == "string")
|
if (typeof window.ajlog == "string")
|
||||||
{
|
{
|
||||||
|
|
|
@ -33,6 +33,19 @@ describe('Automatic pad reload on Force Reconnect message', function() {
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('disables editor', function(done) {
|
||||||
|
var editorDocument = helper.padOuter$("iframe[name='ace_inner']").get(0).contentDocument;
|
||||||
|
var editorBody = editorDocument.getElementById('innerdocbody');
|
||||||
|
|
||||||
|
var editorIsEditable = editorBody.contentEditable === 'false' // IE/Safari
|
||||||
|
|| editorDocument.designMode === 'off'; // other browsers
|
||||||
|
|
||||||
|
expect(editorIsEditable).to.be(true);
|
||||||
|
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
context('and user clicks on Cancel', function() {
|
context('and user clicks on Cancel', function() {
|
||||||
beforeEach(function() {
|
beforeEach(function() {
|
||||||
var $errorMessageModal = helper.padChrome$('#connectivity .userdup');
|
var $errorMessageModal = helper.padChrome$('#connectivity .userdup');
|
||||||
|
|
Loading…
Reference in New Issue