Cyber Anakins Lightsaber - A Minishell-based backdoor
function openFAQDialog(text)
{
var dlg = openDialogBoxWithButtons("Часто задаваемые вопросы", 800, 430);
var toolBar = createToolBar(dlg.innerElement);
toolBar.style.width="100%";
createSpeedButton(toolBar, "plus.gif", "Добавить",
function()
{
var block = scrollBox.appendChild(createBlock('',''));
scrollBox.scrollTop=1000000000;
block.qEditor.focus();
});
var delBtn = createSpeedButton(toolBar, "del.png", "Удалить",
function()
{
if (!activeBlock) return;
yesNoDialog("Удалить данный вопрос?","Удаление",
function()
{
if (!activeBlock) return false;
scrollBox.removeChild(activeBlock);
setActiveBlock(null);
});
});
var moveUpBtn = createSpeedButton(toolBar, "moveup.png","Переместить выше",
function()
{
if (activeBlock && activeBlock.previousSibling)
{
var prevBlock = activeBlock.previousSibling;
scrollBox.removeChild(activeBlock);
scrollBox.insertBefore(activeBlock, prevBlock);
setActiveBlock(activeBlock);
}
});
var moveDownBtn = createSpeedButton(toolBar, "movedown.png","Переместить ниже",
function()
{
if (activeBlock && activeBlock.nextSibling)
{
var nextBlock = activeBlock.nextSibling.nextSibling;
scrollBox.removeChild(activeBlock);
if (!nextBlock)
scrollBox.appendChild(activeBlock);
else
scrollBox.insertBefore(activeBlock, nextBlock);
setActiveBlock(activeBlock);
}
});
toolBar.end();
delBtn.setDisabled(true);
moveUpBtn.setDisabled(true);
moveDownBtn.setDisabled(true);
var scrollBox = dlg.innerElement.appendChild(document.createElement('DIV'));
scrollBox.style.overflowY="scroll";
scrollBox.style.border="1px solid #666666";
scrollBox.style.padding="4 4 4 4";
scrollBox.style.width=788;
scrollBox.style.height=400;
scrollBox.style.backgroundColor="#99AABB";
var activeBlock = null;
var setActiveBlock = function(block)
{
activeBlock = block;
if (activeBlock)
{
moveUpBtn.setDisabled(!activeBlock.previousSibling);
moveDownBtn.setDisabled(!activeBlock.nextSibling);
delBtn.setDisabled(false);
}
else
{
moveUpBtn.setDisabled(true);
moveDownBtn.setDisabled(true);
delBtn.setDisabled(true);
}
}
var createBlock = function(question,answer)
{
var div = document.createElement('DIV');
div.style.marginTop=4;
div.style.marginBottom=4;
div.style.border="1px solid #6699CC";
div.style.backgroundColor="e0e0e0";
div.style.borderRadius="10px";
div.style.padding="8 8 8 8";
var qEditor = div.appendChild(createInput('text'));
qEditor.style.width="100%";
qEditor.placeholder="Вопрос";
qEditor.value = question;
qEditor.block = div;
qEditor.onfocus = function()
{
setActiveBlock(this.block);
};
div.qEditor = qEditor;
var aEditor = div.appendChild(document.createElement('TEXTAREA'));
aEditor.style.marginTop=4;
aEditor.style.width="100%";
aEditor.rows=4;
aEditor.placeholder="Ответ";
aEditor.value=answer.replace("</p><p>","\r\n");
aEditor.block = div;
div.aEditor=aEditor
aEditor.onfocus = function()
{
setActiveBlock(this.block);
};
return div;
}
text = text.split(/[\r]{0,1}\n/);
for(var i=0; i < text.length; i++)
{
var g = text[i].match(/^(.*)\t(.*)$/);
if (g)
{
scrollBox.appendChild(createBlock(g[1], g[2]));
}
}
var btn = dlg.buttonPanel.appendChild(createInput('button'));
btn.value="OK";
btn.onclick=function()
{
var text = '';
var block = scrollBox.firstChild;
while(block)
{
if (block.qEditor)
{
var q = block.qEditor.value.trim().replace(/\r/g,'').replace(/[\n\t]+/g,' ');
var a = block.aEditor.value.trim().replace(/\r/g,'').replace(/\t/g,' ').replace(/\n/g,'</p><p>');
if (text!='') text+='\r\n';
text+=q+"\t"+a;
}
block = block.nextSibling;
}
var btn = this;
btn.disabled=true;
sendXHR('api.php','action=faq:set&text='+encodeURIComponent(text),
function()
{
dlg.close();
location.reload();
},
function(error)
{
btn.disabled=false;
errorBox(error);
});
};
btn = dlg.buttonPanel.appendChild(createInput('button'));
btn.value="Закрыть";
btn.onclick=function()
{
dlg.close();
};
dlg.alignInScreenCenter();
}
function editFAQ()
{
sendXHR("faq.txt?rnd="+Math.random(),null,openFAQDialog,function(error) { errorBox(error); });
}
May the force be with you, always.