Files
redl-gamepanel/panel/application/views/servers/console.php
T
redl 6ee2744e3a Сборка REDL: панель на PHP 8, капча-тумблер, закрытые уязвимости, установщики в один клик
- панель работает на PHP 8.4 (оригинал под PHP 7.0): elFinder utf8_encode, apache_get_modules, warnings
- капча выключена и управляется из админки (флаг captcha_enable + блок настроек)
- закрыты две SQL-инъекции без авторизации (createAuthLog: пароль из POST и CF-Connecting-IP)
- убрано хранение паролей в открытом виде в authlog, XSS в поле ref
- установщики install-panel.sh и install-node.sh (оригинальный затирал sources.list репозиториями Debian 9)
- современный Dockerfile (оригинальный на debian:stretch больше не собирается)
- планировщик и автозапуск работают без systemd
- брендинг REDL.IO, год 2026, ссылки на redl.io
- документация на русском: ИЗМЕНЕНИЯ, БЕЗОПАСНОСТЬ, ИНСТРУКЦИЯ
2026-07-30 02:00:01 +00:00

298 lines
14 KiB
PHP

<?php
/*
Copyright (c) 2020 HOSTINPL (HOSTING-RUS) https://vk.com/hosting_rus
Developed by Samir Shelenko and Alexander Zemlyanoy (https://vk.com/id00v / https://vk.com/mrsasha082)
*/
?>
<?php echo $header?>
<div class="content d-flex flex-column flex-column-fluid" id="kt_content">
<div class="d-flex flex-column-fluid">
<div class="container">
<div class="row">
<div class="col-xl-12">
<?php include 'application/views/common/menuserver.php';?>
</div>
<div class="col-xl-3">
<div class="card card-custom mb-3 pt-5">
<div class="card-body">
<div class="text-center">
<div class="symbol symbol-60 symbol-circle symbol-xl-90">
<div class="symbol-label">
<i class="fa fa-terminal icon-3x text-primary"></i>
</div>
</div>
<h4 class="font-weight-bolder my-2">Консоль</h4>
<div class="text-center font-weight-bold mb-2">
<div class="card card-body" style="margin-bottom: 0rem;padding: 1rem;">
<div class="form-group" style="margin-bottom: 0rem;">
<div class="checkbox-list">
<label class="checkbox">
<input type="checkbox" checked id="autoscroll">
<span></span>
Автообновление
</label>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="card card-custom mb-3">
<div class="card-body px-1" style="padding: 0.3rem 2.25rem;">
<div class="navi navi-hover navi-active navi-link-rounded navi-bold navi-icon-center navi-light-icon">
<div class="navi-item my-2">
<a href="javascript:;" data-toggle="modal" data-target="#colorCMD" class="navi-link">
<span class="navi-icon mr-3">
<span class="svg-icon svg-icon-lg">
<i class="fa fa-clone"></i>
</span>
</span>
<span class="navi-text font-weight-bolder font-size-lg">Сменить дизайн</span>
</a>
</div>
<?if($server['game_query'] == 'samp'):?>
<div class="navi-item my-2">
<a href="javascript:;" data-toggle="modal" data-target="#infoCMD" class="navi-link">
<span class="navi-icon mr-3">
<span class="svg-icon svg-icon-lg">
<i class="fa fa-info-circle"></i>
</span>
</span>
<span class="navi-text font-weight-bolder font-size-lg">Доступные команды</span>
</a>
</div>
<?endif;?>
<div class="navi-item my-2">
<a href="javascript:;" onclick="clearConsole()" class="navi-link">
<span class="navi-icon mr-3">
<span class="svg-icon svg-icon-lg">
<i class="flaticon2-rubbish-bin"></i>
</span>
</span>
<span class="navi-text font-weight-bolder font-size-lg">Очистить консоль</span>
</a>
</div>
</div>
</div>
</div>
</div>
<div class="col-xl-9">
<div class="card card-custom gutter-b">
<div class="card-body">
<textarea style="<?php echo $theme ?>" disabled="" class="form-control console" id="console_data">Получение данных...</textarea>
<form class="form-inline" role="form" method='POST' id="console_form" action="" >
<div class="input-group" style="width: 100%;">
<input type="text" class="form-control" id="cmd" name="cmd" placeholder="Введите команду...">
<div class="input-group-append">
<button type="submit" class="btn btn-primary btn-icon" data-toggle="tooltip" title="" data-placement="right" data-original-title="Отправить"><i class="fa fa-terminal"></i></button>
</div>
</div>
</form>
<div class="subheader__wrapper">
<?php if($server['game_query'] == "samp"): ?>
<a href="/servers/console/index/<?php echo $server['server_id'] ?>" class="btn btn-default font-weight-bold px-1 py-1 mr-2">
./server_log.txt
</a>
<a href="/servers/console/index/<?php echo $server['server_id'] ?>?open=screenlog" class="btn btn-default font-weight-bold px-1 py-1 mr-2">
./screenlog.0
</a>
<?php elseif($server['game_query'] == "mtasa"): ?>
<a href="/servers/console/index/<?php echo $server['server_id'] ?>" class="btn btn-default font-weight-bold px-1 py-1 mr-2">
./mods/deathmatch/logs/server.log
</a>
<?php elseif($server['game_code'] == "mcpe"): ?>
<a href="/servers/console/index/<?php echo $server['server_id'] ?>" class="btn btn-default font-weight-bold px-1 py-1 mr-2">
./server.log
</a>
<?php else: ?>
<a href="/servers/console/index/<?php echo $server['server_id'] ?>" class="btn btn-default font-weight-bold px-1 py-1 mr-2">
./screenlog.0
</a>
<?php endif; ?>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!--begin::Modal-->
<div class="modal fade" id="infoCMD" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="exampleModalLabel">Доступные команды</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<i aria-hidden="true" class="ki ki-close"></i>
</button>
</div>
<div class="modal-body">
<code>cmdlist</code> - Показать список RCON команд<br>
<code>varlist</code> - Посмотреть список текущих настроек<br>
<code>kick [ID]</code> - Кикнуть пользователя по его ID (Пример: kick 3)<br>
<code>ban [ID]</code> - Забанить пользователя по его ID (Пример: ban 3)<br>
<code>banip [IP]</code> - Забанить IP (Пример: banip 127.0.0.1)<br>
<code>unbanip [IP]</code> - Разбанить IP (Пример: unbanip 127.0.0.1)<br>
<code>reloadbans</code> - Перезагрузить samp.ban<br>
<code>reloadlog</code> - Очистить лог сервера<br>
<code>exec [имя файла]</code> - Открыть файл .cfg (Пример: exec blah.cfg)<br>
<code>say [текст]</code> - Сказать в общий чат от лица админа (Пример: say Hello)<br>
<code>players</code> - Показать всех игроков на сервере с их именами, ip и пингом<br>
<code>gravity</code> - Изменить гравитацию на сервере - (Пример: gravity 0.008)<br>
<code>weather [ID]</code> - Изменить погоду на сервере (Пример: weather 2)<br>
<code>worldtime [время]</code> - Изменить время на сервере (Пример: worldtime 2)<br>
<code>maxplayers</code> - Изменить макс. количество мест на сервере<br>
<code>timestamp</code> - Установить часовой пояс<br>
<code>plugins</code> - Посмотреть список всех установленных плагинов<br>
<code>filterscripts</code> - Посмотреть список всех установленных фильтрскриптов<br>
<code>loadfs [название]</code> - Загрузить фильтрскрипт<br>
<code>unloadfs [название]</code> - Выгрузить фильтрскрипт<br>
<code>reloadfs [название]</code> - Перезагрузить фильтрскрипт<br>
<code>password [пароль]</code> - Установить пароль на сервере<br>
<code>changemode [название]</code> - Изменить режим игры на сервере на заданный<br>
<code>gmx</code> - Рестарт сервера<br>
<code>hostname [название]</code> - Изменить название сервера<br>
<code>gamemodetext [название]</code> - Изменить название мода<br>
<code>mapname [название]</code> - Изменить название карты<br>
<code>gamemode [1-15]</code> - Установить порядок гэйм-модов<br>
<code>instagib [bool]</code> - Включить функцию убийства с одной пули (1 или 0)<br>
<code>lanmode [bool]</code> - Установить LAN (1 или 0)<br>
<code>version</code> - Посмотреть версию сервера<br>
<code>weburl [url]</code> - Установить url сайта на сервере<br>
</div>
</div>
</div>
</div>
<!--end::Modal-->
<!--begin::Modal-->
<div class="modal fade" id="colorCMD" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="exampleModalLabel">Смена дизайна</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<i aria-hidden="true" class="ki ki-close"></i>
</button>
</div>
<div class="modal-body">
<div class="row row-paddingless">
<div class="col-6">
<a href="javascript:;" onclick="sendAction('default')" class="d-block py-10 px-5 text-center bg-hover-light border-right border-bottom">
<i class="flaticon2-drop text-primary icon-3x"></i>
<span class="d-block text-dark-75 font-weight-bold font-size-h6 mt-2 mb-1">Тема Default</span>
<span class="d-block text-dark-50 font-size-lg">Применить</span>
</a>
</div>
<div class="col-6">
<a href="javascript:;" onclick="sendAction('Amethyst')" class="d-block py-10 px-5 text-center bg-hover-light border-bottom">
<i class="flaticon2-drop text-primary icon-3x"></i>
<span class="d-block text-dark-75 font-weight-bold font-size-h6 mt-2 mb-1">Тема Amethyst</span>
<span class="d-block text-dark-50 font-size-lg">Применить</span>
</a>
</div>
<div class="col-6">
<a href="javascript:;" onclick="sendAction('City')" class="d-block py-10 px-5 text-center bg-hover-light border-right">
<i class="flaticon2-drop text-primary icon-3x"></i>
<span class="d-block text-dark-75 font-weight-bold font-size-h6 mt-2 mb-1">Тема City</span>
<span class="d-block text-dark-50 font-size-lg">Применить</span>
</a>
</div>
<div class="col-6">
<a href="javascript:;" onclick="sendAction('Flat')" class="d-block py-10 px-5 text-center bg-hover-light">
<i class="flaticon2-drop text-primary icon-3x"></i>
<span class="d-block text-dark-75 font-weight-bold font-size-h6 mt-2 mb-1">Тема Flat</span>
<span class="d-block text-dark-50 font-size-lg">Применить</span>
</a>
</div>
<div class="col-6">
<a href="javascript:;" onclick="sendAction('Modern')" class="d-block py-10 px-5 text-center bg-hover-light">
<i class="flaticon2-drop text-primary icon-3x"></i>
<span class="d-block text-dark-75 font-weight-bold font-size-h6 mt-2 mb-1">Тема Modern</span>
<span class="d-block text-dark-50 font-size-lg">Применить</span>
</a>
</div>
<div class="col-6">
<a href="javascript:;" onclick="sendAction('Smooth')" class="d-block py-10 px-5 text-center bg-hover-light">
<i class="flaticon2-drop text-primary icon-3x"></i>
<span class="d-block text-dark-75 font-weight-bold font-size-h6 mt-2 mb-1">Тема Smooth</span>
<span class="d-block text-dark-50 font-size-lg">Применить</span>
</a>
</div>
</div>
</div>
</div>
</div>
</div>
<!--end::Modal-->
<script>
$('#console_form').ajaxForm({
url: '/servers/console/sendconsole/<?php echo $server['server_id'] ?>',
dataType: 'text',
success: function(data) {
data = $.parseJSON(data);
switch(data.status) {
case 'error':
toastr.error(data.error);
$('button[type=submit]').prop('disabled', false);
break;
case 'success':
toastr.success(data.success);
document.getElementById("cmd").value = "";
break;
}
}
});
function clearConsole() {
$.ajax({
url: '/servers/console/clearcon/<?php echo $server['server_id'] ?>',
type: 'POST',
dataType: 'text',
success: function(data) {
data = $.parseJSON(data);
switch(data.status) {
case 'error':
toastr.error(data.error);
break;
case 'success':
toastr.success(data.success);
break;
}
}
});
}
setInterval(function() {
var autoscroll = document.getElementById("autoscroll");
if (autoscroll.checked == true) {
$.get("/servers/console/getconsole/<?php echo $server['server_id'] ?>/<?php echo $fileid ?>")
.done(function (data) {
var console = document.getElementById("console_data");
console.innerHTML = data;
console.scrollTop = console.scrollHeight;
});
}
}, 1000);
function sendAction(action) {
$.ajax({
url: '/servers/console/action_theme_console/'+action,
dataType: 'text',
success: function(data) {
data = $.parseJSON(data);
switch(data.status) {
case 'error':
toastr.error(data.error);
break;
case 'success':
toastr.success(data.success);
setTimeout("reload()", 1500);
break;
}
}
});
}
</script>
<?php echo $footer ?>