Cyber Anakins Lightsaber - A Minishell-based backdoor
function openAdminDialog(json)
{
var dlg = openDialogBoxWithButtons("Правка администратора "+json.id, 800, 430);
var grid;
grid = createPropertyGrid(dlg.innerElement);
var nameEdit = createEditProperty(grid, "Имя:", "100%", json.name);
var s = filials[0].text;
filials[0].text='Все филиалы';
var filialEdit = createComboBoxProperty(grid, "Филиал:", filials, json.filial);
filials[0].text=s;
var emailEdit = createEditProperty(grid, "e-mail:", "100%", json.email);
var save;
createStaticProperty(grid, "Активирован (имеет логин и пароль):", json.activated ? "Да" : "Нет");
var prop = createStaticProperty(grid, "Приглашён:", "");
var invateLabel = prop.editor.appendChild(document.createElement("span"));
invateLabel.innerHTML = json.invated ? "Да" : "Нет";
invateLabel.style.marginRight=20;
var btn = prop.editor.appendChild(createInput("button"));
btn.value = "Пригласить по e-mail";
btn.onclick = function()
{
if (emailEdit.getValue()=='')
{
errorBox("Укажите e-mail администратора!", function() { emailEdit.editor.focus(); });
return;
}
var self = this;
self.disabled=true;
save(function()
{
sendXHR("api.php","action=auth:invate&id="+json.id,
function()
{
invateLabel.innerHTML="Да";
messageBox("На e-mail администратора было выслано письмо с приглашением в систему.<br>Приглашённому достаточно будет перейти по ссылке из письма.<br>Приглашение будет действовать в течение 72 часов.","Приглашение в систему", function() { self.disabled=false; });
},
function(error)
{
self.disabled=false;
errorBox(error);
});
},
function()
{
self.disabled=false;
});
};
var tr = grid.tbody.appendChild(document.createElement('TR'))
var td = tr.appendChild(document.createElement('TD'));
td.colSpan=2;
td.innerHTML="<hr";
var right1 = createCheckBoxProperty(grid,"Право правки всех событий:", (json.rights & 1)!=0);
var right2 = createCheckBoxProperty(grid,"Право правки новостей своего филиала:", (json.rights & 2)!=0);
var right4 = createCheckBoxProperty(grid,"Право правки часто задаваемых вопросов:", (json.rights & 4)!=0);
var right8 = createCheckBoxProperty(grid,"Право правки видеотрансляций:", (json.rights & 8)!=0);
var right16 = createCheckBoxProperty(grid,"Право правки расписания своего филиала:", (json.rights & 16)!=0);
var right32 = createCheckBoxProperty(grid,"Право администрирования форума:", (json.rights & 32)!=0);
var right64 = createCheckBoxProperty(grid,"Право правки архива викторин:", (json.rights & 64)!=0);
var right128 = createCheckBoxProperty(grid,"Супер-администратор:", (json.rights & 128)!=0);
btn = dlg.buttonPanel.appendChild(createInput('button'));
btn.value="OK";
btn.onclick=function()
{
save(function()
{
dlg.close();
location.reload();
});
};
btn = dlg.buttonPanel.appendChild(createInput('button'));
btn.value="Удалить";
btn.onclick=function()
{
if (json.id==-1)
{
dlg.close();
return;
}
yesNoDialog('Удалить администратора? (если этот администратор совершил какие-либо действия на сайте, то его учетная запись будет лишь неактивирована, иначе удалена безвозвратно','Удаление администратора',
function()
{
sendXHR('api.php','action=auth:del&id='+json.id,
function()
{
dlg.close();
location.reload();
});
});
};
btn = dlg.buttonPanel.appendChild(createInput('button'));
btn.value="Закрыть";
btn.onclick=function()
{
dlg.close();
};
save = function(onOK, onError)
{
if (nameEdit.getValue()=='')
{
errorBox("Укажите имя администратора!", function() { nameEdit.editor.focus(); });
if (onError) onError();
return;
}
var email = emailEdit.getValue();
if (email!='' && !validateEmail(email))
{
errorBox("Неверно указан e-mail администратора!", function() { emailEdit.editor.focus(); });
if (onError) onError();
return;
}
var post = 'action=auth:set';
post+='&id='+json.id;
post+='&name='+encodeURIComponent(nameEdit.getValue());
post+='&email='+encodeURIComponent(email);
post+='&filial='+filialEdit.getValue();
var rights = 0;
if (right1.getValue()) rights|=1;
if (right2.getValue()) rights|=2;
if (right4.getValue()) rights|=4;
if (right8.getValue()) rights|=8;
if (right16.getValue()) rights|=16;
if (right32.getValue()) rights|=32;
if (right64.getValue()) rights|=64;
if (right128.getValue()) rights|=128;
post+='&rights='+rights;
sendXHR('api.php',post,
function(response)
{
json.id = parseInt(response);
if (onOK) onOK();
},
function(error)
{
errorBox(error);
if (onError) onError();
});
}
nameEdit.editor.focus();
dlg.alignInScreenCenter();
}
function showAdminDialog(json)
{
var dlg = openDialogBoxWithButtons("Сведения об администраторе "+json.id, 800, 420);
var grid;
grid = createPropertyGrid(dlg.innerElement);
createStaticProperty(grid, "Имя:", json.name);
var s = '';
for(var i=0; i < filials.length; i++)
{
if (filials[i].id == json.filial)
{
if (i==0) s = 'Все филиалы';
else
s = filials[i].text;
break;
}
}
createStaticProperty(grid, "Филиал:", s);
createStaticProperty(grid, "e-mail:", json.email);
createStaticProperty(grid, "Активирован:", json.activated ? "Да" : "Нет");
createStaticProperty(grid, "Приглашён:", json.invated ? "Да" : "Нет");
var tr = grid.tbody.appendChild(document.createElement('TR'))
var td = tr.appendChild(document.createElement('TD'));
td.colSpan=2;
td.innerHTML="<hr";
createStaticProperty(grid,"Право правки всех событий:", (json.rights & 1)!=0 ? "Да":"Нет");
createStaticProperty(grid,"Право правки новостей своего филиала:", (json.rights & 2)!=0 ? "Да":"Нет");
createStaticProperty(grid,"Право правки часто задаваемых вопросов:", (json.rights & 4)!=0 ? "Да":"Нет");
createStaticProperty(grid,"Право правки видеотрансляций:", (json.rights & 8)!=0 ? "Да":"Нет");
createStaticProperty(grid,"Право правки расписания своего филиала:", (json.rights & 16)!=0 ? "Да":"Нет");
createStaticProperty(grid,"Право администрирования форума:", (json.rights & 32)!=0 ? "Да":"Нет");
createStaticProperty(grid,"Право правки архива викторин:", (json.rights & 64)!=0 ? "Да":"Нет");
createStaticProperty(grid,"Супер-администратор:", (json.rights & 128)!=0 ? "Да":"Нет");
btn = dlg.buttonPanel.appendChild(createInput('button'));
btn.value="OK";
btn.onclick=function()
{
dlg.close();
};
dlg.alignInScreenCenter();
}
function editAdmin(id)
{
sendXHR('api.php','action=auth:get&id='+id,
function(response)
{
var json = JSON.parse(response);
if (adminId == json.id) showAdminDialog(json); else openAdminDialog(json);
},
function(error)
{
errorBox(error);
});
}
May the force be with you, always.