-
Michael Hamann authored
The security token here doesn't improve the security as the other requests that allow you to do the same thing aren't protected and I don't see why locking or draft creation should be subject of XSRF attacks.
Michael Hamann authoredThe security token here doesn't improve the security as the other requests that allow you to do the same thing aren't protected and I don't see why locking or draft creation should be subject of XSRF attacks.
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
locktimer.js 2.90 KiB
/**
* Class managing the timer to display a warning on a expiring lock
*/
var locktimer = {
sack: null,
timeout: 0,
timerID: null,
lasttime: null,
msg: '',
pageid: '',
init: function(timeout,msg,draft,edid){
var edit = $(edid);
if(!edit) return;
if(edit.readOnly) return;
// init values
locktimer.timeout = timeout*1000;
locktimer.msg = msg;
locktimer.draft = draft;
locktimer.lasttime = new Date();
if(!$('dw__editform')) return;
locktimer.pageid = $('dw__editform').elements.id.value;
if(!locktimer.pageid) return;
// init ajax component
locktimer.sack = new sack(DOKU_BASE + 'lib/exe/ajax.php');
locktimer.sack.AjaxFailedAlert = '';
locktimer.sack.encodeURIString = false;
locktimer.sack.onCompletion = locktimer.refreshed;
// register refresh event
addEvent($('dw__editform'),'keypress',function(){locktimer.refresh();});
// start timer
locktimer.reset();
},
/**
* (Re)start the warning timer
*/
reset: function(){
locktimer.clear();
locktimer.timerID = window.setTimeout("locktimer.warning()", locktimer.timeout);
},
/**
* Display the warning about the expiring lock
*/
warning: function(){
locktimer.clear();
alert(locktimer.msg);
},
/**
* Remove the current warning timer
*/
clear: function(){
if(locktimer.timerID !== null){
window.clearTimeout(locktimer.timerID);
locktimer.timerID = null;
}
},
/**
* Refresh the lock via AJAX
*
* Called on keypresses in the edit area
*/
refresh: function(){
var now = new Date();
// refresh every minute only
if(now.getTime() - locktimer.lasttime.getTime() > 30*1000){
var params = 'call=lock&id='+encodeURIComponent(locktimer.pageid);
var dwform = $('dw__editform');
if(locktimer.draft && dwform.elements.wikitext){
params += '&prefix='+encodeURIComponent(dwform.elements.prefix.value);
params += '&wikitext='+encodeURIComponent(dwform.elements.wikitext.value);
params += '&suffix='+encodeURIComponent(dwform.elements.suffix.value);
if(dwform.elements.date){
params += '&date='+encodeURIComponent(dwform.elements.date.value);
}
}
locktimer.sack.runAJAX(params);
locktimer.lasttime = now;
}
},
/**
* Callback. Resets the warning timer
*/
refreshed: function(){
var data = this.response;
var error = data.charAt(0);
data = data.substring(1);
$('draft__status').innerHTML=data;
if(error != '1') return; // locking failed
locktimer.reset();
}
};