Сборка 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
- документация на русском: ИЗМЕНЕНИЯ, БЕЗОПАСНОСТЬ, ИНСТРУКЦИЯ
This commit is contained in:
2026-07-30 02:00:01 +00:00
commit 6ee2744e3a
492 changed files with 354172 additions and 0 deletions
@@ -0,0 +1,260 @@
<?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)
*/
class autoinstallController extends Controller {
public function index($serverid = null) {
$this->document->setActiveSection('servers');
$this->document->setActiveItem('autoinstall');
$this->data['activesection'] = $this->document->getActiveSection();
$this->data['activeitem'] = $this->document->getActiveItem();
if(!$this->user->isLogged()) {
$this->session->data['error'] = "Вы не авторизированы!";
$this->response->redirect($this->config->url . 'account/login');
}
if($this->user->getAccessLevel() < 0) {
$this->session->data['error'] = "У вас нет доступа к данному разделу!";
$this->response->redirect($this->config->url);
}
$this->load->model('servers');
$this->load->model('users');
$error = $this->validate($serverid);
if($error) {
$this->session->data['error'] = $error;
$this->response->redirect($this->config->url . 'servers/index');
}
$userid = $this->user->getId();
$server = $this->serversModel->getServerById($serverid, array('games', 'locations'));
$this->data['server'] = $server;
$mods = $this->serversModel->getMods(array('mod_status' => 1),array('games'),array(), array());
$this->data['usermods'] = $this->usersModel->getUserMods($userid);
$this->data['mods'] = $mods;
include_once 'application/controllers/common/main.php';
$this->getChild(array('common/header', 'common/footer'));
return $this->load->view('servers/autoinstall', $this->data);
}
public function action($serverid = null, $action = null) {
if(!$this->user->isLogged()) {
$this->data['status'] = "error";
$this->data['error'] = "Вы не авторизированы!";
return json_encode($this->data);
}
if($this->user->getAccessLevel() < 0) {
$this->data['status'] = "error";
$this->data['error'] = "У вас нет доступа к данному разделу!";
return json_encode($this->data);
}
$userid = $this->user->getId();
$this->load->model('servers');
$this->load->library('ssh2');
$this->load->model('users');
$this->load->model('waste');
$ssh2Lib = new ssh2Library();
$error = $this->validate($serverid);
if($error) {
$this->data['status'] = "error";
$this->data['error'] = $error;
return json_encode($this->data);
}
$error = $this->validateMode($action);
if($error) {
$this->data['status'] = "error";
$this->data['error'] = $error;
return json_encode($this->data);
}
$balance = $this->user->getBalance();
$server = $this->serversModel->getServerById($serverid, array('users', 'locations', 'games'));
if($server['server_status'] == 3) {
$this->data["status"] = "error";
$this->data["error"] = "Идет установка сервера!";
return json_encode($this->data);
} else if($server['server_status'] == 4) {
$this->data["status"] = "error";
$this->data["error"] = "Идет переустановка сервера!";
return json_encode($this->data);
} else if($server['server_status'] == 5) {
$this->data["status"] = "error";
$this->data["error"] = "Идет создание BackUP сервера!";
return json_encode($this->data);
} else if($server['server_status'] == 6) {
$this->data["status"] = "error";
$this->data["error"] = "Идет восстанновление сервера из BackUP!";
return json_encode($this->data);
} else if($server['server_status'] == 7) {
$this->data["status"] = "error";
$this->data["error"] = "Идет обновление сервера!";
return json_encode($this->data);
} else if($server["server_status"] == 0) {
$this->data["status"] = "error";
$this->data["error"] = "Сервер заблокирован!";
return json_encode($this->data);
}
$mod = $this->serversModel->getModById($action);
if($mod["mod_status"] != 1) {
$this->data["status"] = "error";
$this->data["error"] = "Данный мод не доступен для установки!";
return json_encode($this->data);
}
if($server['server_mysql'] == 0) {
$this->data['status'] = "error";
$this->data['error'] = "Создайте базу MySQL и включите ее!";
return json_encode($this->data);
}
if($server['server_status'] != 1) {
$this->data['status'] = "error";
$this->data['error'] = "Сервер должен быть выключен!";
return json_encode($this->data);
}
$stats = $this->serversModel->getHDD($server['server_id']);
if($stats > $server['game_ssd']) {
$this->data["status"] = "error";
$this->data["error"] = "Вы привысили ограничение размера директории на ". round($stats - $server['game_ssd'], 2) ."МБ, установка мода невозможна!";
return json_encode($this->data);
}
if($this->request->server['REQUEST_METHOD'] == 'POST') {
$this->serversModel->deleteTask(array('task_name' => 'restart', 'server_id' => $serverid));
$this->serversModel->deleteTask(array('task_name' => 'enable', 'server_id' => $serverid));
$this->serversModel->deleteTask(array('task_name' => 'disable', 'server_id' => $serverid));
if($mod['mod_price'] > 0) {
if($this->usersModel->checkFreeMode($userid, $mod['mod_id'])){
$free_mode = 1;
}
$price = $mod['mod_price'];
if(($balance < $price) and $free_mode != 1){
$this->data['status'] = "error";
$this->data['error'] = "Недостаточно средств";
return json_encode($this->data);
}
}
$this->serversModel->action($serverid, 'reinstall');
$host = $server['location_ip'];
$uname = "gs$serverid";
$dbpass = $server['db_pass'];
$database = "gs$serverid";
$conn = new mysqli($host, $uname, $dbpass, $database);
$op_data = '';
if ($mresult = $conn->query("SHOW TABLES"))
{
while($row = $mresult->fetch_array(MYSQLI_NUM))
{
$conn->query('DROP TABLE IF EXISTS '.$row[0]);
}
}
$FILE = "scriptfiles/mysql_settings.ini";
$link = $ssh2Lib->connect($server['location_ip'], $server['location_user'], $server['location_password']);
$ssh2Lib->execute($link,
"
cd /home/gs$serverid;
rm server.cfg;
rm -rf gamemodes;
rm -rf filterscripts;
rm -rf include;
rm -rf npcmodes;
rm -rf scriptfiles;
wget ".$mod['mod_url'].";
tar -xf ".$mod['mod_arch'].";
rm ".$mod['mod_arch'].";
mysql -h".$server['location_ip']." -u gs$serverid -p".$server['db_pass']." gs$serverid < dump.sql;
rm dump.sql;
echo 'host = ".$server['location_ip']."'>>".$FILE.";
echo 'username = gs$serverid'>>".$FILE.";
echo 'password = ".$server['db_pass']."'>>".$FILE.";
echo 'database = gs$serverid'>>".$FILE.";
sudo chown -R gs". $server['server_id'] .":gameservers /home/gs". $server['server_id'] ."
"
);
$ssh2Lib->disconnect($link);
if($mod['mod_price'] > 0) {
if($free_mode != 1){
$userid = $this->user->getId();
$wasteData = array(
'user_id' => $userid,
'waste_ammount' => $price,
'waste_status' => 1,
'waste_usluga' => "Установка мода ".$mod['mod_name'].""
);
$this->wasteModel->createWaste($wasteData);
$this->usersModel->downUserBalance($userid, $price);
$freeData = array(
'user_id' => $userid,
'mod_id' => "".$mod['mod_id'].""
);
$this->usersModel->addMode($freeData);
$user = $this->usersModel->getUserById($userid, array(), array(), array());
if($user['ref'] != 0) {
$ref_percent = $this->config->ref_percent;
$getpref = ($price * (1 + $ref_percent / 100)) - $price;
$this->usersModel->upUserBalance($user['ref'], $getpref);
$this->usersModel->upUserRMoney($user['ref'], $getpref);
$wasteData = array(
'user_id' => $user['ref'],
'waste_ammount' => $getpref,
'waste_status' => 0,
'waste_usluga' => "Бонус с реферала ID-$userid"
);
$this->wasteModel->createWaste($wasteData);
}
$this->data['status'] = "success";
$this->data['success'] = "Мод ".$mod['mod_name']." успешно был установлен,с вашего счёта снято ".$mod['mod_price']." р! Запускаем игровой сервер, пожалуйста, подождите...";
} else{
$this->data['status'] = "success";
$this->data['success'] = "Мод ".$mod['mod_name']." успешно был установлен. Запускаем игровой сервер, пожалуйста, подождите...";
}
} else {
$this->data['status'] = "success";
$this->data['success'] = "Мод ".$mod['mod_name']." успешно был установлен. Запускаем игровой сервер, пожалуйста, подождите...";
}
} else {
$this->data['status'] = "error";
$this->data['error'] = "Не POST запрос!";
}
return json_encode($this->data);
}
private function validate($serverid) {
$result = null;
$userid = $this->user->getId();
if(!$this->serversModel->getTotalServerOwners(array('server_id' => (int)$serverid, 'user_id' => (int)$userid, 'owner_status' => 1))) {
if(!$this->serversModel->getTotalServers(array('server_id' => (int)$serverid, 'user_id' => (int)$userid))) {
$result = "Запрашиваемый сервер не существует!";
}
}
return $result;
}
private function validateMode($modid) {
$result = null;
if(!$this->serversModel->getTotalMods(array('mod_id' => (int)$modid))) {
$result = "Запрашиваемый мод не существует!";
}
return $result;
}
}
?>
@@ -0,0 +1,168 @@
<?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)
*/
class configController extends Controller {
public function index($serverid = null) {
$this->document->setActiveSection('servers');
$this->document->setActiveItem('config');
$this->data['activesection'] = $this->document->getActiveSection();
$this->data['activeitem'] = $this->document->getActiveItem();
if(!$this->user->isLogged()) {
$this->session->data['error'] = "Вы не авторизированы!";
$this->response->redirect($this->config->url . 'account/login');
}
if($this->user->getAccessLevel() < 0) {
$this->session->data['error'] = "У вас нет доступа к данному разделу!";
$this->response->redirect($this->config->url);
}
$this->load->model('servers');
$error = $this->validate($serverid);
if($error) {
$this->session->data['error'] = $error;
$this->response->redirect($this->config->url . 'servers/index');
}
$server = $this->serversModel->getServerById($serverid, array('games', 'locations'));
$this->data['server'] = $server;
if($server['server_status'] == 1 || $server['server_status'] == 2) {
if($server['game_query'] == 'samp') {
$file = "/server.cfg";
} else if($server['game_query'] == 'mtasa') {
$file = "/mods/deathmatch/mtaserver.conf";
} else if($server['game_code'] == 'cs') {
$file = "/cstrike/server.cfg";
} else if($server['game_code'] == 'css') {
$file = "/cstrike/cfg/server.cfg";
} else if($server['game_code'] == 'csgo') {
$file = "/csgo/cfg/server.cfg";
} else if($server['game_query'] == 'mine') {
$file = "/server.properties";
} else if($server['game_code'] == 'ragemp') {
$file = "/conf.json";
}
$this->load->library('sftp');
$sftpLib = new sftpLibrary();
$sftpLink = $sftpLib->connect($server['location_ip'], $server['location_user'], $server['location_password']);
$config = $sftpLib->open($sftpLink, '/home/gs' . $serverid . '/' . $file);
$this->data['config'] = $config;
} else {
$config = "В данном статусе не доступно редактирование конфигурации!";
$this->data['config'] = $config;
}
include_once 'application/controllers/common/main.php';
$this->getChild(array('common/header', 'common/footer'));
return $this->load->view('servers/config', $this->data);
}
public function send_config($serverid = null)
{
if (!$this->user->isLogged()) {
$this->data['status'] = 'error';
$this->data['error'] = 'Вы не авторизированы!';
return json_encode($this->data);
}
if ($this->user->getAccessLevel() < 0) {
$this->data['status'] = 'error';
$this->data['error'] = 'У вас нет доступа к данному разделу!';
return json_encode($this->data);
}
$this->load->model('servers');
$error = $this->validate($serverid);
if($error) {
$this->session->data['error'] = $error;
$this->response->redirect($this->config->url . 'servers/index');
}
$server = $this->serversModel->getServerById($serverid, array('users', 'locations', 'games'));
if($server['server_status'] == 3) {
$this->data["status"] = "error";
$this->data["error"] = "Идет установка сервера!";
return json_encode($this->data);
} else if($server['server_status'] == 4) {
$this->data["status"] = "error";
$this->data["error"] = "Идет переустановка сервера!";
return json_encode($this->data);
} else if($server['server_status'] == 5) {
$this->data["status"] = "error";
$this->data["error"] = "Идет создание BackUP сервера!";
return json_encode($this->data);
} else if($server['server_status'] == 6) {
$this->data["status"] = "error";
$this->data["error"] = "Идет восстанновление сервера из BackUP!";
return json_encode($this->data);
} else if($server['server_status'] == 7) {
$this->data["status"] = "error";
$this->data["error"] = "Идет обновление сервера!";
return json_encode($this->data);
} else if($server["server_status"] == 0) {
$this->data["status"] = "error";
$this->data["error"] = "Сервер заблокирован!";
return json_encode($this->data);
}
if($this->request->server['REQUEST_METHOD'] == 'POST') {
if($server['server_status'] == 1 || $server['server_status'] == 2) {
$config = htmlspecialchars_decode($this->request->post['config']);
if($server['game_query'] == 'samp') {
$file = "/server.cfg";
} else if($server['game_query'] == 'mtasa') {
$file = "/mods/deathmatch/mtaserver.conf";
} else if($server['game_code'] == 'cs') {
$file = "/cstrike/server.cfg";
} else if($server['game_code'] == 'css') {
$file = "/cstrike/cfg/server.cfg";
} else if($server['game_code'] == 'csgo') {
$file = "/csgo/cfg/server.cfg";
} else if($server['game_query'] == 'mine') {
$file = "/server.properties";
} else if($server['game_code'] == 'ragemp') {
$file = "/conf.json";
}
$this->load->library('sftp');
$sftpLib = new sftpLibrary();
$sftpLink = $sftpLib->connect($server['location_ip'], $server['location_user'], $server['location_password']);
$sftpLib->write($sftpLink, '/home/gs' . $serverid . '/' . $file, $config);
$this->data['status'] = 'success';
$this->data['success'] = 'Конфигурационный файл отредактирован!';
}
}
return json_encode($this->data);
}
function validate($serverid) {
$result = null;
$this->user->getId( );
$userid = $this->user->getId();
if(!$this->serversModel->getTotalServerOwners(array('server_id' => (int)$serverid, 'user_id' => (int)$userid, 'owner_status' => 1))) {
if(!$this->serversModel->getTotalServers(array('server_id' => (int)$serverid, 'user_id' => (int)$userid))) {
$result = "Запрашиваемый сервер не существует!";
}
}
return $result;
}
private function validatePOST() {
$this->load->library('validate');
$validateLib = new validateLibrary();
return $result;
}
}
@@ -0,0 +1,371 @@
<?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)
*/
class consoleController extends Controller {
public function index($serverid = null) {
$this->document->setActiveSection('servers');
$this->document->setActiveItem('console');
$this->data['activesection'] = $this->document->getActiveSection();
$this->data['activeitem'] = $this->document->getActiveItem();
if(!$this->user->isLogged()) {
$this->session->data['error'] = "Вы не авторизированы!";
$this->response->redirect($this->config->url . 'account/login');
}
if($this->user->getAccessLevel() < 0) {
$this->session->data['error'] = "У вас нет доступа к данному разделу!";
$this->response->redirect($this->config->url);
}
if(isset($this->request->get['open'])) {
$this->data['fileid'] = $this->request->get['open'];
}
$this->load->model('servers');
$error = $this->validate($serverid);
if($error) {
$this->session->data['error'] = $error;
$this->response->redirect($this->config->url . 'servers/index');
}
$server = $this->serversModel->getServerById($serverid, array('games', 'locations'));
$this->data['server'] = $server;
if(isset($_COOKIE["data-theme-console"])){
$this->data['theme'] = $_COOKIE['data-theme-console'];
} else{
$this->data['theme'] = "color: white; background-color: black; font-family: Inconsolata; resize: none; min-height: 300px;";
}
include_once 'application/controllers/common/main.php';
$this->getChild(array('common/header', 'common/footer'));
return $this->load->view('servers/console', $this->data);
}
public function getconsole($serverid = null, $file = null) {
if(!$this->user->isLogged()) {
$this->data['status'] = "error";
$this->data['error'] = "Вы не авторизированы!";
return json_encode($this->data);
}
if($this->user->getAccessLevel() < 1) {
$this->data['status'] = "error";
$this->data['error'] = "У вас нет доступа к данному разделу!";
return json_encode($this->data);
}
$this->load->model('servers');
$this->load->library('ssh2');
$server = $this->serversModel->getServerById($serverid, array('games', 'locations'));
$error = $this->validate($serverid);
if($error) {
$this->session->data['error'] = $error;
$this->response->redirect($this->config->url . 'servers/index');
}
switch($file) {
default: {
if($server["game_query"] == "samp") {
$fileLog = "server_log.txt";
} elseif($server["game_query"] == "mtasa") {
$fileLog = "mods/deathmatch/logs/server.log";
} elseif($server["game_code"] == "mcpe") {
$fileLog = "server.log";
} else {
$fileLog = "screenlog.0";
}
break;
}
case 'screenlog': {
$fileLog = "screenlog.0";
break;
}
}
if($server['server_status'] == 3) {
$result = "Идет установка сервера!";
} else if($server['server_status'] == 4) {
$result = "Идет переустановка сервера!";
} else if($server['server_status'] == 5) {
$result = "Идет создание BackUP сервера!";
} else if($server['server_status'] == 6) {
$result = "Идет восстанновление сервера из BackUP!";
} else if($server['server_status'] == 7) {
$result = "Идет обновление сервера!";
} else if($server["server_status"] == 0) {
$result = "Сервер заблокирован!";
} else if($server["server_status"] == 1) {
$result = "Сервер должен быть включен!";
} else if($server["server_status"] == 2) {
$ssh = new ssh2Library();
$connect = $ssh->connect($server['location_ip'], $server['location_user'], $server['location_password']);
if($server["game_query"] == "ragemp" || $server["game_query"] == "valve") {
$logs = $ssh->execute($connect, "tail -n 500 /home/gs" . $serverid . "/" . $fileLog. " | iconv -t utf8");
} else {
$logs = $ssh->execute($connect, "tail -n 500 /home/gs" . $serverid . "/" . $fileLog. " | iconv -f cp1251 -t utf8");
}
$logs = str_replace("", "", $logs);
$logs = str_replace(">", "", $logs);
$logs = str_replace(">", "", $logs);
$logs = str_replace("null", "", $logs);
if(!empty($logs)) {
$result = $logs;
} else {
$result = 'Список логов пуст :(';
}
$ssh->disconnect($connect);
}
return $result;
}
public function sendconsole($serverid = null) {
if(!$this->user->isLogged()) {
$this->data['status'] = "error";
$this->data['error'] = "Вы не авторизированы!";
return json_encode($this->data);
}
if($this->user->getAccessLevel() < 1) {
$this->data['status'] = "error";
$this->data['error'] = "У вас нет доступа к данному разделу!";
return json_encode($this->data);
}
$this->load->model('servers');
$this->load->library('ssh2');
$server = $this->serversModel->getServerById($serverid, array('games', 'locations'));
$error = $this->validate($serverid);
if($error) {
$this->session->data['error'] = $error;
$this->response->redirect($this->config->url . 'servers/index');
}
if($server['server_status'] == 3) {
$this->data["status"] = "error";
$this->data["error"] = "Идет установка сервера!";
return json_encode($this->data);
} else if($server['server_status'] == 4) {
$this->data["status"] = "error";
$this->data["error"] = "Идет переустановка сервера!";
return json_encode($this->data);
} else if($server['server_status'] == 5) {
$this->data["status"] = "error";
$this->data["error"] = "Идет создание BackUP сервера!";
return json_encode($this->data);
} else if($server['server_status'] == 6) {
$this->data["status"] = "error";
$this->data["error"] = "Идет восстанновление сервера из BackUP!";
return json_encode($this->data);
} else if($server['server_status'] == 7) {
$this->data["status"] = "error";
$this->data["error"] = "Идет обновление сервера!";
return json_encode($this->data);
} else if($server["server_status"] == 0) {
$this->data["status"] = "error";
$this->data["error"] = "Сервер заблокирован!";
return json_encode($this->data);
}
$command = @$this->request->post['cmd'];
if($server['server_status'] == 2){
if($command == ""){
$this->data['status'] = "error";
$this->data['error'] = "Введите команду!";
}elseif($command != ""){
if($server['game_query'] == "samp") {
$this->load->library('SampRconAPI');
$SampRcon = new SampRconAPI($server['location_ip'], $server['server_port'], $server['rcon_password']);
if ($SampRcon->connect()) {
$SampRcon->call($command, false);
$this->data['status'] = "success";
$this->data['success'] = "Команда успешно отправлена!";
} else {
$this->data['status'] = "error";
$this->data['error'] = "Ошибка подключения к rcon!";
}
$SampRcon->close();
} else {
$exec = str_replace("'", "&#039;", $command);
$this->serversModel->action($serverid, 'sendcommand', array('command' => $exec));
$this->data['status'] = "success";
$this->data['success'] = "Команда успешно отправлена!";
}
}
}else{
$this->data['status'] = "error";
$this->data['error'] = "Сервер должен быть включён!";
}
return json_encode($this->data);
}
public function clearcon($serverid = null) {
if(!$this->user->isLogged()) {
$this->data['status'] = "error";
$this->data['error'] = "Вы не авторизированы!";
return json_encode($this->data);
}
if($this->user->getAccessLevel() < 1) {
$this->data['status'] = "error";
$this->data['error'] = "У вас нет доступа к данному разделу!";
return json_encode($this->data);
}
$this->load->model('servers');
$this->load->library('ssh2');
$server = $this->serversModel->getServerById($serverid, array('games','locations'));
$error = $this->validate($serverid);
if($error) {
$this->session->data['error'] = $error;
$this->response->redirect($this->config->url . 'servers/index');
}
if($server['server_status'] == 3) {
$this->data["status"] = "error";
$this->data["error"] = "Идет установка сервера!";
return json_encode($this->data);
} else if($server['server_status'] == 4) {
$this->data["status"] = "error";
$this->data["error"] = "Идет переустановка сервера!";
return json_encode($this->data);
} else if($server['server_status'] == 5) {
$this->data["status"] = "error";
$this->data["error"] = "Идет создание BackUP сервера!";
return json_encode($this->data);
} else if($server['server_status'] == 6) {
$this->data["status"] = "error";
$this->data["error"] = "Идет восстанновление сервера из BackUP!";
return json_encode($this->data);
} else if($server['server_status'] == 7) {
$this->data["status"] = "error";
$this->data["error"] = "Идет обновление сервера!";
return json_encode($this->data);
} else if($server["server_status"] == 0) {
$this->data["status"] = "error";
$this->data["error"] = "Сервер заблокирован!";
return json_encode($this->data);
}
if($this->request->server['REQUEST_METHOD'] == 'POST') {
if($server['server_status'] == 2) {
$ssh2Lib = new ssh2Library();
$link = $ssh2Lib->connect($server['location_ip'], $server['location_user'], $server['location_password']);
if($server['game_query'] == 'samp') {
$ssh2Lib->execute($link, "cat /dev/null > /home/gs$serverid/server_log.txt;");
$ssh2Lib->execute($link, "cat /dev/null > /home/gs$serverid/screenlog.0;");
} elseif($server['game_code'] == 'mcpe') {
$ssh2Lib->execute($link, "cat /dev/null > /home/gs$serverid/server.log;");
} elseif($server['game_query'] == 'mtasa') {
$ssh2Lib->execute($link, "cat /dev/null > /home/gs$serverid/mods/deathmatch/logs/server.log;");
} else {
$ssh2Lib->execute($link, "cat /dev/null > /home/gs$serverid/screenlog.0;");
}
$ssh2Lib->disconnect($link);
$this->data['status'] = "success";
$this->data['success'] = "Консоль успешно очищена!";
} else {
$this->data['status'] = "error";
$this->data['error'] = "Сервер должен быть включен!";
}
}
return json_encode($this->data);
}
public function action_theme_console($action = null) {
if(!$this->user->isLogged()) {
$this->data['status'] = "error";
$this->data['error'] = "Вы не авторизированы!";
return json_encode($this->data);
}
if($this->user->getAccessLevel() < 1) {
$this->data['status'] = "error";
$this->data['error'] = "У вас нет доступа к данному разделу!";
return json_encode($this->data);
}
switch($action) {
case 'default': {
$name = 'color: white; background-color: black; font-family: Inconsolata; resize: none; min-height: 300px;';
setcookie('data-theme-console',$name,time() + (86400 * 5), '/' );
$this->data['status'] = "success";
$this->data['success'] = "Тема установлена!";
break;
}
case 'Amethyst': {
$name = 'color: #323e42; background-color: #a48ad4; font-family: Inconsolata; resize: none; min-height: 300px;';
setcookie('data-theme-console',$name,time() + (86400 * 5), '/' );
$this->data['status'] = "success";
$this->data['success'] = "Тема установлена!";
break;
}
case 'City': {
$name = 'color: #323e42; background-color: #ff6b6b; font-family: Inconsolata; resize: none; min-height: 300px;';
setcookie('data-theme-console',$name,time() + (86400 * 5), '/' );
$this->data['status'] = "success";
$this->data['success'] = "Тема установлена!";
break;
}
case 'Flat': {
$name = 'color: #323e42; background-color: #44b4a6; font-family: Inconsolata; resize: none; min-height: 300px;';
setcookie('data-theme-console',$name,time() + (86400 * 5), '/' );
$this->data['status'] = "success";
$this->data['success'] = "Тема установлена!";
break;
}
case 'Modern': {
$name = 'color: #323e42; background-color: #14adc4; font-family: Inconsolata; resize: none; min-height: 300px;';
setcookie('data-theme-console',$name,time() + (86400 * 5), '/' );
$this->data['status'] = "success";
$this->data['success'] = "Тема установлена!";
break;
}
case 'Smooth': {
$name = 'color: #323e42; background-color: #ff6c9d; font-family: Inconsolata; resize: none; min-height: 300px;';
setcookie('data-theme-console',$name,time() + (86400 * 5), '/' );
$this->data['status'] = "success";
$this->data['success'] = "Тема установлена!";
break;
}
default: {
$this->data['status'] = "error";
$this->data['error'] = "Вы выбрали несуществующее действие!";
break;
}
}
return json_encode($this->data);
}
function validate($serverid) {
$result = null;
$this->user->getId( );
$userid = $this->user->getId();
if(!$this->serversModel->getTotalServerOwners(array('server_id' => (int)$serverid, 'user_id' => (int)$userid, 'owner_status' => 1))) {
if(!$this->serversModel->getTotalServers(array('server_id' => (int)$serverid, 'user_id' => (int)$userid))) {
$result = "Запрашиваемый сервер не существует!";
}
}
return $result;
}
private function validatePOST() {
$this->load->library('validate');
$validateLib = new validateLibrary();
$result = null;
return $result;
}
}
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,233 @@
<?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)
*/
class firewallController extends Controller {
public function index($serverid = null) {
$this->document->setActiveSection('servers');
$this->document->setActiveItem('firewall');
$this->data['activesection'] = $this->document->getActiveSection();
$this->data['activeitem'] = $this->document->getActiveItem();
if(!$this->user->isLogged()) {
$this->session->data['error'] = "Вы не авторизированы!";
$this->response->redirect($this->config->url . 'account/login');
}
if($this->user->getAccessLevel() < 0) {
$this->session->data['error'] = "У вас нет доступа к данному разделу!";
$this->response->redirect($this->config->url);
}
$this->load->model('servers');
$error = $this->validate($serverid);
if($error) {
$this->session->data['error'] = $error;
$this->response->redirect($this->config->url . 'servers/index');
}
$this->data['server'] = $this->serversModel->getServerById($serverid, array('games', 'locations'));
$this->data['Firewalls'] = $this->serversModel->getFirewallsById($serverid);
include_once 'application/controllers/common/main.php';
$this->getChild(array('common/header', 'common/footer'));
return $this->load->view('servers/firewall', $this->data);
}
public function ajax($serverid = null) {
if(!$this->user->isLogged()) {
$this->data['status'] = "error";
$this->data['error'] = "Вы не авторизированы!";
return json_encode($this->data);
}
if($this->user->getAccessLevel() < 1) {
$this->data['status'] = "error";
$this->data['error'] = "У вас нет доступа к данному разделу!";
return json_encode($this->data);
}
$this->load->model('servers');
$server = $this->serversModel->getServerById($serverid);
$error = $this->validate($serverid);
if($error) {
$this->data['status'] = "error";
$this->data['error'] = $error;
return json_encode($this->data);
}
if($server['server_status'] == 3) {
$this->data["status"] = "error";
$this->data["error"] = "Идет установка сервера!";
return json_encode($this->data);
} else if($server['server_status'] == 4) {
$this->data["status"] = "error";
$this->data["error"] = "Идет переустановка сервера!";
return json_encode($this->data);
} else if($server['server_status'] == 5) {
$this->data["status"] = "error";
$this->data["error"] = "Идет создание BackUP сервера!";
return json_encode($this->data);
} else if($server['server_status'] == 6) {
$this->data["status"] = "error";
$this->data["error"] = "Идет восстанновление сервера из BackUP!";
return json_encode($this->data);
} else if($server['server_status'] == 7) {
$this->data["status"] = "error";
$this->data["error"] = "Идет обновление сервера!";
return json_encode($this->data);
} else if($server["server_status"] == 0) {
$this->data["status"] = "error";
$this->data["error"] = "Сервер заблокирован!";
return json_encode($this->data);
}
if($this->request->server['REQUEST_METHOD'] == 'POST') {
$ipmask = @$this->request->post['address'];
if (!$ipmask) {
$this->data['status'] = 'error';
$this->data['error'] = 'Вы не ввели IP';
return json_encode($this->data);
}
$ip = explode('/', $ipmask)[0];
$net = explode('/', $ipmask)[1];
if (($ipmask !== str_replace('/', '', $ipmask)) && !$net) {
$this->data['status'] = 'error';
$this->data['error'] = 'Не введены данные после "/"';
return json_encode($this->data);
}
if (!filter_var($ip, FILTER_VALIDATE_IP)) {
$this->data['status'] = 'error';
$this->data['error'] = 'Введен неверный IP';
return json_encode($this->data);
}
if ($net) {
if (is_numeric($net)) {
if (2 < mb_strlen($net)) {
$this->data['status'] = 'error';
$this->data['error'] = 'Не больше двух цифр после "/"';
return json_encode($this->data);
if (!filter_var($net, FILTER_VALIDATE_IP)) {
$this->data['status'] = 'error';
$this->data['error'] = 'Введены неверные данные после "/"';
return json_encode($this->data);
}
}
}
else {
$this->data['status'] = 'error';
$this->data['error'] = 'Введены неверные данные после "/"';
return json_encode($this->data);
}
}
if ($this->serversModel->getTotalFirewalls(array('server_ip' => $ipmask, 'server_id' => $serverid))) {
$this->data['status'] = 'error';
$this->data['error'] = 'Данное правило уже добавлено!';
return json_encode($this->data);
}
$firewallData = array(
'server_id' => $serverid,
'server_ip' => $ipmask
);
$firewallid = $this->serversModel->createFirewall($firewallData);
$this->serversModel->addFirewall($firewallid);
$this->data['status'] = "success";
$this->data['success'] = "Вы успешно заблокировали ".$ipmask."!";
return json_encode($this->data);
}
}
public function action($action = null, $serverid = null, $firewallid = null) {
if(!$this->user->isLogged()) {
$this->data['status'] = "error";
$this->data['error'] = "Вы не авторизированы!";
return json_encode($this->data);
}
if($this->user->getAccessLevel() < 1) {
$this->data['status'] = "error";
$this->data['error'] = "У вас нет доступа к данному разделу!";
return json_encode($this->data);
}
$this->load->model('servers');
$server = $this->serversModel->getServerById($serverid);
$error = $this->validate($serverid);
if($error) {
$this->data['status'] = "error";
$this->data['error'] = $error;
return json_encode($this->data);
}
if($server['server_status'] == 3) {
$this->data["status"] = "error";
$this->data["error"] = "Идет установка сервера!";
return json_encode($this->data);
} else if($server['server_status'] == 4) {
$this->data["status"] = "error";
$this->data["error"] = "Идет переустановка сервера!";
return json_encode($this->data);
} else if($server['server_status'] == 5) {
$this->data["status"] = "error";
$this->data["error"] = "Идет создание BackUP сервера!";
return json_encode($this->data);
} else if($server['server_status'] == 6) {
$this->data["status"] = "error";
$this->data["error"] = "Идет восстанновление сервера из BackUP!";
return json_encode($this->data);
} else if($server['server_status'] == 7) {
$this->data["status"] = "error";
$this->data["error"] = "Идет обновление сервера!";
return json_encode($this->data);
} else if($server["server_status"] == 0) {
$this->data["status"] = "error";
$this->data["error"] = "Сервер заблокирован!";
return json_encode($this->data);
}
switch($action) {
case 'delete': {
$this->serversModel->deleteFirewall($firewallid);
$this->data['status'] = "success";
$this->data['success'] = "Вы успешно разблокировали IP!";
break;
}
default: {
$this->data['status'] = "error";
$this->data['error'] = "Вы выбрали несуществующее действие!";
break;
}
}
return json_encode($this->data);
}
private function validate($serverid) {
$result = null;
$userid = $this->user->getId();
if(!$this->serversModel->getTotalServerOwners(array('server_id' => (int)$serverid, 'user_id' => (int)$userid, 'owner_status' => 1))) {
if(!$this->serversModel->getTotalServers(array('server_id' => (int)$serverid, 'user_id' => (int)$userid))) {
$result = "Запрашиваемый сервер не существует!";
}
}
return $result;
}
}
@@ -0,0 +1,344 @@
<?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)
*/
class ftpController extends Controller {
public function index($serverid = null) {
$this->document->setActiveSection('servers');
$this->document->setActiveItem('ftp');
$this->data['activesection'] = $this->document->getActiveSection();
$this->data['activeitem'] = $this->document->getActiveItem();
if(!$this->user->isLogged()) {
$this->session->data['error'] = "Вы не авторизированы!";
$this->response->redirect($this->config->url . 'account/login');
}
if($this->user->getAccessLevel() < 0) {
$this->session->data['error'] = "У вас нет доступа к данному разделу!";
$this->response->redirect($this->config->url);
}
$this->load->model('servers');
$error = $this->validate($serverid);
if($error) {
$this->session->data['error'] = $error;
$this->response->redirect($this->config->url . 'servers/index');
}
$server = $this->serversModel->getServerById($serverid, array('games', 'locations'));
$this->data['server'] = $server;
if(isset($_COOKIE["data-theme-ftp"])){
$this->data['theme'] = $_COOKIE['data-theme-ftp'];
} else{
$this->data['theme'] = "/application/public/css/elfinderT/default/css/theme.css";
}
include_once 'application/controllers/common/main.php';
$this->getChild(array('common/header', 'common/footer'));
return $this->load->view('servers/ftp', $this->data);
}
public function ajax($serverid = null) {
if(!$this->user->isLogged()) {
$this->data['status'] = "error";
$this->data['error'] = "Вы не авторизированы!";
return json_encode($this->data);
}
if($this->user->getAccessLevel() < 1) {
$this->data['status'] = "error";
$this->data['error'] = "У вас нет доступа к данному разделу!";
return json_encode($this->data);
}
$this->load->model('servers');
$server = $this->serversModel->getServerById($serverid, array('games', 'locations'));
$error = $this->validate($serverid);
if($error) {
$this->data['status'] = "error";
$this->data['error'] = $error;
return json_encode($this->data);
}
if($server['server_status'] == 3) {
$this->data["status"] = "error";
$this->data["error"] = "Идет установка сервера!";
return json_encode($this->data);
} else if($server['server_status'] == 4) {
$this->data["status"] = "error";
$this->data["error"] = "Идет переустановка сервера!";
return json_encode($this->data);
} else if($server['server_status'] == 5) {
$this->data["status"] = "error";
$this->data["error"] = "Идет создание BackUP сервера!";
return json_encode($this->data);
} else if($server['server_status'] == 6) {
$this->data["status"] = "error";
$this->data["error"] = "Идет восстанновление сервера из BackUP!";
return json_encode($this->data);
} else if($server['server_status'] == 7) {
$this->data["status"] = "error";
$this->data["error"] = "Идет обновление сервера!";
return json_encode($this->data);
} else if($server["server_status"] == 0) {
$this->data["status"] = "error";
$this->data["error"] = "Сервер заблокирован!";
return json_encode($this->data);
}
if($this->request->server['REQUEST_METHOD'] == 'POST') {
$errorPOST = $this->validatePOST();
if(!$errorPOST) {
$editpassword = @$this->request->post['editpassword'];
$password = @$this->request->post['password'];
if($editpassword) {
$this->serversModel->updateServer($serverid, array('server_password' => $password));
$result = $this->serversModel->action($serverid, "updatepass");
if($result["status"] == "success") {
$this->data['status'] = "success";
$this->data['success'] = "Пароль FTP успешно изменен!!";
} else {
$this->data["status"] = "error";
$this->data["error"] = $result["description"];
}
} else {
$this->data['status'] = "error";
$this->data['error'] = "Ошибка!";
}
} else {
$this->data['status'] = "error";
$this->data['error'] = $errorPOST;
}
}
return json_encode($this->data);
}
public function action_theme_ftp($action = null) {
if(!$this->user->isLogged()) {
$this->data['status'] = "error";
$this->data['error'] = "Вы не авторизированы!";
return json_encode($this->data);
}
if($this->user->getAccessLevel() < 1) {
$this->data['status'] = "error";
$this->data['error'] = "У вас нет доступа к данному разделу!";
return json_encode($this->data);
}
$this->load->model('servers');
switch($action) {
case 'default': {
$name = '/application/public/css/elfinderT/default/css/theme.css';
setcookie('data-theme-ftp',$name,time() + (86400 * 5), '/' );
$this->data['status'] = "success";
$this->data['success'] = "Тема Default успешно установлена!";
break;
}
case 'material': {
$name = '/application/public/css/elfinderT/Material/css/theme.css';
setcookie('data-theme-ftp',$name,time() + (86400 * 5), '/' );
$this->data['status'] = "success";
$this->data['success'] = "Тема Material успешно установлена!";
break;
}
case 'materialgray': {
$name = '/application/public/css/elfinderT/Material/css/theme-gray.css';
setcookie('data-theme-ftp',$name,time() + (86400 * 5), '/' );
$this->data['status'] = "success";
$this->data['success'] = "Тема Material gray успешно установлена!";
break;
}
case 'materiallight': {
$name = '/application/public/css/elfinderT/Material/css/theme-light.css';
setcookie('data-theme-ftp',$name,time() + (86400 * 5), '/' );
$this->data['status'] = "success";
$this->data['success'] = "Тема Material light успешно установлена!";
break;
}
default: {
$this->data['status'] = "error";
$this->data['error'] = "Вы выбрали несуществующее действие!";
break;
}
}
return json_encode($this->data);
}
private function validate($serverid) {
$result = null;
$userid = $this->user->getId();
if(!$this->serversModel->getTotalServerOwners(array('server_id' => (int)$serverid, 'user_id' => (int)$userid, 'owner_status' => 1))) {
if(!$this->serversModel->getTotalServers(array('server_id' => (int)$serverid, 'user_id' => (int)$userid))) {
$result = "Запрашиваемый сервер не существует!";
}
}
return $result;
}
public function getftp($serverid = null) {
if(!$this->user->isLogged()) {
$this->session->data['error'] = "Вы не авторизированы!";
$this->response->redirect($this->config->url . 'account/login');
}
if($this->user->getAccessLevel() < 0) {
$this->session->data['error'] = "У вас нет доступа к данному разделу!";
$this->response->redirect($this->config->url);
}
$this->load->model('servers');
$error = $this->validate($serverid);
if($error) {
$this->session->data['error'] = $error;
$this->response->redirect($this->config->url . 'servers/index');
}
$server = $this->serversModel->getServerById($serverid, array('games', 'locations'));
if($server['server_status'] == 3) {
$this->data["status"] = "error";
$this->data["error"] = "Идет установка сервера!";
return json_encode($this->data);
} else if($server['server_status'] == 4) {
$this->data["status"] = "error";
$this->data["error"] = "Идет переустановка сервера!";
return json_encode($this->data);
} else if($server['server_status'] == 5) {
$this->data["status"] = "error";
$this->data["error"] = "Идет создание BackUP сервера!";
return json_encode($this->data);
} else if($server['server_status'] == 6) {
$this->data["status"] = "error";
$this->data["error"] = "Идет восстанновление сервера из BackUP!";
return json_encode($this->data);
} else if($server['server_status'] == 7) {
$this->data["status"] = "error";
$this->data["error"] = "Идет обновление сервера!";
return json_encode($this->data);
} else if($server["server_status"] == 0) {
$this->data["status"] = "error";
$this->data["error"] = "Сервер заблокирован!";
return json_encode($this->data);
}
include_once ENGINE_DIR . 'engine_ftp/elFinderConnector.class.php';
include_once ENGINE_DIR . 'engine_ftp/elFinder.class.php';
include_once ENGINE_DIR . 'engine_ftp/elFinderVolumeDriver.class.php';
include_once ENGINE_DIR . 'engine_ftp/elFinderVolumeLocalFileSystem.class.php';
include_once ENGINE_DIR . 'engine_ftp/elFinderVolumeFTP.class.php';
function access($attr, $path, $data, $volume) {
return strpos(basename($path), '.') === 0
? !($attr == 'read' || $attr == 'write')
: null;
}
function logger($cmd, $result, $args, $elfinder) {
$log = sprintf('[%s] %s:', date('r'), strtoupper($cmd));
foreach ($result as $key => $value) {
if (empty($value)) {
continue;
}
$data = array();
if (in_array($key, array('error', 'warning'))) {
array_push($data, implode(' ', $value));
} else {
if (is_array($value)) {
foreach ($value as $file) {
$filepath = (isset($file['realpath']) ? $file['realpath'] : $elfinder->realpath($file['hash']));
array_push($data, $filepath);
}
} else {
array_push($data, $value);
}
}
$log .= sprintf(' %s(%s)', $key, implode(', ', $data));
}
$log .= "\n";
$logfile = 'files/log.txt';
$dir = dirname($logfile);
if (!is_dir($dir) && !mkdir($dir)) {
return;
}
if (($fp = fopen($logfile, 'a'))) {
fwrite($fp, $log);
fclose($fp);
}
}
$opts = array(
'roots' => array(
array(
'driver' => 'FTP',
'URL' => 'ftp://gs'.$server['server_id'].':'.$server['server_password'].'@'.$server['location_ip'].':21/',
'host' => $server['location_ip'],
'user' => 'gs'.$server['server_id'],
'pass' => $server['server_password'],
'port' => 21,
'mode' => 'passive',
'path' => '/',
'read' => true,
'write' => true,
'utf8fix' => true,
'bind' => array(
'mkdir mkfile rename duplicate upload rm paste' => 'logger'
),
'rootAlias'=>'Server Root',
'fileURL'=>True,
'dotFiles'=>True,
'dirSize'=>True,
'fileMode'=>0644,
'dirMode'=>0775,
'imgLib'=>False,
'tmbDir'=>'.tmb',
'tmbAtOnce'=>5,
'debug'=>True
),
'attributes' => array(
array(
'pattern' => '~/\.~',
'read' => true,
'write' => true,
'hidden' => true
),
)
)
);
$connector = new elFinderConnector(new elFinder($opts));
$connector->run();
}
private function validatePOST() {
$this->load->library('validate');
$validateLib = new validateLibrary();
$result = null;
$editpassword = @$this->request->post['editpassword'];
$password = @$this->request->post['password'];
$password2 = @$this->request->post['password2'];
if($editpassword) {
if(!$validateLib->password($password)) {
$result = "Пароль должен содержать от 6 до 32 латинских букв, цифр и знаков <i>,.!?_-</i>!";
}
elseif($password != $password2) {
$result = "Введенные вами пароли не совпадают!";
}
}
return $result;
}
}
?>
@@ -0,0 +1,208 @@
<?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)
*/
class indexController extends Controller {
private $limit = 10;
public function index($page = 1) {
$this->document->setActiveSection('servers');
$this->document->setActiveItem('index');
if(!$this->user->isLogged()) {
$this->session->data['error'] = "Вы не авторизированы!";
$this->response->redirect($this->config->url . 'account/login');
}
if($this->user->getAccessLevel() < 0) {
$this->session->data['error'] = "У вас нет доступа к данному разделу!";
$this->response->redirect($this->config->url);
}
$this->load->library('pagination');
$this->load->model('servers');
$userid = $this->user->getId();
$options = array(
'start' => ($page - 1) * $this->limit,
'limit' => $this->limit
);
$this->data['servers'] = $this->serversModel->getServers(array('user_id' => (int)$userid), array('games', 'locations'), array(), $options);
$this->data['serversOwners'] = $this->serversModel->getOwners(array('servers_owners.user_id' => $userid), array('servers', 'games', 'locations'));
$paginationLib = new paginationLibrary();
$paginationLib->total = $this->serversModel->getTotalServers(array('user_id' => (int)$userid));
$paginationLib->page = $page;
$paginationLib->limit = $this->limit;
$paginationLib->url = $this->config->url . 'servers/index/index/{page}';
$this->data['pagination'] = $paginationLib->render();
$this->getChild(array('common/header', 'common/footer'));
return $this->load->view('servers/index', $this->data);
}
public function action($serverid = null, $action = null) {
if(!$this->user->isLogged()) {
$this->data['status'] = "error";
$this->data['error'] = "Вы не авторизированы!";
return json_encode($this->data);
}
if($this->user->getAccessLevel() < 1) {
$this->data['status'] = "error";
$this->data['error'] = "У вас нет доступа к данному разделу!";
return json_encode($this->data);
}
$this->load->model('servers');
$error = $this->validate($serverid);
if($error) {
$this->data['status'] = "error";
$this->data['error'] = $error;
return json_encode($this->data);
}
$server = $this->serversModel->getServerById($serverid, array('users', 'locations', 'games'));
if($server['server_status'] == 3) {
$this->data["status"] = "error";
$this->data["error"] = "Идет установка сервера!";
return json_encode($this->data);
} else if($server['server_status'] == 4) {
$this->data["status"] = "error";
$this->data["error"] = "Идет переустановка сервера!";
return json_encode($this->data);
} else if($server['server_status'] == 5) {
$this->data["status"] = "error";
$this->data["error"] = "Идет создание BackUP сервера!";
return json_encode($this->data);
} else if($server['server_status'] == 6) {
$this->data["status"] = "error";
$this->data["error"] = "Идет восстанновление сервера из BackUP!";
return json_encode($this->data);
} else if($server['server_status'] == 7) {
$this->data["status"] = "error";
$this->data["error"] = "Идет обновление сервера!";
return json_encode($this->data);
} else if($server["server_status"] == 0) {
$this->data["status"] = "error";
$this->data["error"] = "Сервер заблокирован!";
return json_encode($this->data);
}
switch($action) {
case "start": {
if($server["server_status"] == 1) {
$stats = $this->serversModel->getHDD($server['server_id']);
if((int)$stats < $server['game_ssd']) {
$result = $this->serversModel->action($serverid, 'start');
if($result["status"] == "success") {
$this->serversModel->deleteTask(array('task_name' => 'enable', 'server_id' => $serverid));
$this->serversModel->updateServer($serverid, array("server_status" => 2));
$logData = array(
'server_id' => $serverid,
'reason' => 'Успешный запуск сервера',
'status' => 1
);
$this->serversModel->createLog($logData);
$this->data["status"] = "success";
$this->data["success"] = "Вы успешно запустили сервер!";
} else {
$this->data["status"] = "error";
$this->data["error"] = $result["description"];
}
} else {
$this->data["status"] = "error";
$this->data["error"] = "Вы привысили ограничение размера директории на ". round($stats - $server['game_ssd'], 2) ."МБ, запуск сервера невозможен!";
}
} else {
$this->data["status"] = "error";
$this->data["error"] = "Сервер должен быть выключен!";
}
break;
}
case "restart": {
if($server["server_status"] == 2) {
$stats = $this->serversModel->getHDD($server['server_id']);
if((int)$stats < $server['game_ssd']) {
$result = $this->serversModel->action($serverid, 'restart');
if($result["status"] == "success") {
$this->serversModel->deleteTask(array('task_name' => 'restart', 'server_id' => $serverid));
$logData = array(
'server_id' => $serverid,
'reason' => 'Успешный перезапуск сервера',
'status' => 1
);
$this->serversModel->createLog($logData);
$this->data["status"] = "success";
$this->data["success"] = "Вы успешно перезапустили сервер!";
} else {
$this->data["status"] = "error";
$this->data["error"] = $result["description"];
}
} else {
$result = $this->serversModel->action($serverid, 'stop');
if($result['status'] == "success") {
$this->serversModel->updateServer($serverid, array('server_status' => 1));
$this->data["status"] = "error";
$this->data["error"] = "Вы привысили ограничение размера директории на ". round($stats - $server['game_ssd'], 2) ."МБ, перезагрузка сервера невозможна!";
} else {
$this->data["status"] = "error";
$this->data["error"] = $result["description"];
}
}
} else if($server["server_status"] == 2) {
$this->data["status"] = "error";
$this->data["error"] = "Сервер должен быть включен!";
}
break;
}
case "stop": {
if($server["server_status"] == 2) {
$result = $this->serversModel->action($serverid, 'stop');
if($result["status"] == "success") {
$this->serversModel->deleteTask(array('task_name' => 'disable', 'server_id' => $serverid));
$this->serversModel->deleteTask(array('task_name' => 'restart', 'server_id' => $serverid));
$this->serversModel->updateServer($serverid, array("server_status" => 1));
$logData = array(
'server_id' => $serverid,
'reason' => 'Успешное выключение сервера',
'status' => 1
);
$this->serversModel->createLog($logData);
$this->data["status"] = "success";
$this->data["success"] = "Вы успешно выключили сервер!";
} else {
$this->data["status"] = "error";
$this->data["error"] = $result["description"];
}
} else {
$this->data["status"] = "error";
$this->data["error"] = "Сервер должен быть вылючен!";
}
break;
}
}
return json_encode($this->data);
}
private function validate($serverid) {
$result = null;
$userid = $this->user->getId();
if(!$this->serversModel->getTotalServerOwners(array('server_id' => (int)$serverid, 'user_id' => (int)$userid, 'owner_status' => 1))) {
if(!$this->serversModel->getTotalServers(array('server_id' => (int)$serverid, 'user_id' => (int)$userid))) {
$result = "Запрашиваемый сервер не существует!";
}
}
return $result;
}
}
?>
@@ -0,0 +1,246 @@
<?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)
*/
class mysqlController extends Controller {
public function index($serverid = null) {
$this->document->setActiveSection('servers');
$this->document->setActiveItem('mysql');
$this->data['activesection'] = $this->document->getActiveSection();
$this->data['activeitem'] = $this->document->getActiveItem();
if(!$this->user->isLogged()) {
$this->session->data['error'] = "Вы не авторизированы!";
$this->response->redirect($this->config->url . 'account/login');
}
if($this->user->getAccessLevel() < 0) {
$this->session->data['error'] = "У вас нет доступа к данному разделу!";
$this->response->redirect($this->config->url);
}
$this->load->model('servers');
$error = $this->validate($serverid);
if($error) {
$this->session->data['error'] = $error;
$this->response->redirect($this->config->url . 'servers/index');
}
$server = $this->serversModel->getServerById($serverid, array('games', 'locations'));
$this->data['server'] = $server;
include_once 'application/controllers/common/main.php';
$this->getChild(array('common/header', 'common/footer'));
return $this->load->view('servers/mysql', $this->data);
}
public function action($serverid = null, $action = null) {
if(!$this->user->isLogged()) {
$this->data['status'] = "error";
$this->data['error'] = "Вы не авторизированы!";
return json_encode($this->data);
}
if($this->user->getAccessLevel() < 0) {
$this->data['status'] = "error";
$this->data['error'] = "У вас нет доступа к данному разделу!";
return json_encode($this->data);
}
$this->load->model('servers');
$error = $this->validate($serverid);
if($error) {
$this->session->data['error'] = $error;
$this->response->redirect($this->config->url . 'servers/index');
}
$server = $this->serversModel->getServerById($serverid);
if($server['server_status'] == 3) {
$this->data["status"] = "error";
$this->data["error"] = "Идет установка сервера!";
return json_encode($this->data);
} else if($server['server_status'] == 4) {
$this->data["status"] = "error";
$this->data["error"] = "Идет переустановка сервера!";
return json_encode($this->data);
} else if($server['server_status'] == 5) {
$this->data["status"] = "error";
$this->data["error"] = "Идет создание BackUP сервера!";
return json_encode($this->data);
} else if($server['server_status'] == 6) {
$this->data["status"] = "error";
$this->data["error"] = "Идет восстанновление сервера из BackUP!";
return json_encode($this->data);
} else if($server['server_status'] == 7) {
$this->data["status"] = "error";
$this->data["error"] = "Идет обновление сервера!";
return json_encode($this->data);
} else if($server["server_status"] == 0) {
$this->data["status"] = "error";
$this->data["error"] = "Сервер заблокирован!";
return json_encode($this->data);
}
switch($action) {
case 'mysqlon': {
if($server['server_mysql'] == 2) {
$this->serversModel->updateServer($serverid, array('server_mysql' => 1));
$this->data['status'] = "success";
$this->data['success'] = "Вы успешно включили базу данных gs$serverid!";
} else {
$this->data['status'] = "error";
$this->data['error'] = "База данных и так включена либо вы ее еще не создали!";
}
break;
}
case 'mysqloff': {
if($server['server_mysql'] == 1) {
$this->serversModel->updateServer($serverid, array('server_mysql' => 2));
$this->data['status'] = "success";
$this->data['success'] = "Вы успешно выключили базу данных gs$serverid!";
} else {
$this->data['status'] = "error";
$this->data['error'] = "База данных и так выключена!";
}
break;
}
case 'mysqlcr': {
if($server['server_mysql'] == 0) {
$result = $this->serversModel->action($serverid, 'create_mysql');
if($result["status"] == "success") {
$this->serversModel->updateServer($serverid, array('server_mysql' => 2));
$this->data['status'] = "success";
$this->data['success'] = "Вы успешно создали базу данных gs$serverid!";
} else {
$this->data["status"] = "error";
$this->data["error"] = $result["description"];
}
} else {
$this->data['status'] = "error";
$this->data['error'] = "База данных и так создана!";
}
break;
}
default: {
$this->data['status'] = "error";
$this->data['error'] = "Вы выбрали несуществующее действие!";
break;
}
}
return json_encode($this->data);
}
private function validate($serverid) {
$result = null;
$userid = $this->user->getId();
if(!$this->serversModel->getTotalServerOwners(array('server_id' => (int)$serverid, 'user_id' => (int)$userid, 'owner_status' => 1))) {
if(!$this->serversModel->getTotalServers(array('server_id' => (int)$serverid, 'user_id' => (int)$userid))) {
$result = "Запрашиваемый сервер не существует!";
}
}
return $result;
}
public function ajax($serverid = null) {
if(!$this->user->isLogged()) {
$this->data['status'] = "error";
$this->data['error'] = "Вы не авторизированы!";
return json_encode($this->data);
}
if($this->user->getAccessLevel() < 1) {
$this->data['status'] = "error";
$this->data['error'] = "У вас нет доступа к данному разделу!";
return json_encode($this->data);
}
$this->load->model('servers');
$server = $this->serversModel->getServerById($serverid, array('games', 'locations'));
$error = $this->validate($serverid);
if($error) {
$this->data['status'] = "error";
$this->data['error'] = $error;
return json_encode($this->data);
}
if($server['server_status'] == 3) {
$this->data["status"] = "error";
$this->data["error"] = "Идет установка сервера!";
return json_encode($this->data);
} else if($server['server_status'] == 4) {
$this->data["status"] = "error";
$this->data["error"] = "Идет переустановка сервера!";
return json_encode($this->data);
} else if($server['server_status'] == 5) {
$this->data["status"] = "error";
$this->data["error"] = "Идет создание BackUP сервера!";
return json_encode($this->data);
} else if($server['server_status'] == 6) {
$this->data["status"] = "error";
$this->data["error"] = "Идет восстанновление сервера из BackUP!";
return json_encode($this->data);
} else if($server['server_status'] == 7) {
$this->data["status"] = "error";
$this->data["error"] = "Идет обновление сервера!";
return json_encode($this->data);
} else if($server["server_status"] == 0) {
$this->data["status"] = "error";
$this->data["error"] = "Сервер заблокирован!";
return json_encode($this->data);
}
if($this->request->server['REQUEST_METHOD'] == 'POST') {
$errorPOST = $this->validatePOST();
if(!$errorPOST) {
$editpassword = @$this->request->post['editpassword'];
$password = @$this->request->post['password'];
if($editpassword) {
$this->serversModel->updateServer($serverid, array('db_pass' => $password));
$result = $this->serversModel->action($serverid, "updatepassm");
if($result["status"] == "success") {
$this->data['status'] = "success";
$this->data['success'] = "Пароль MySql успешно изменен!!";
} else {
$this->data["status"] = "error";
$this->data["error"] = $result["description"];
}
} else {
$this->data['status'] = "error";
$this->data['error'] = "Ошибка!";
}
} else {
$this->data['status'] = "error";
$this->data['error'] = $errorPOST;
}
}
return json_encode($this->data);
}
private function validatePOST() {
$this->load->library('validate');
$validateLib = new validateLibrary();
$result = null;
$editpassword = @$this->request->post['editpassword'];
$password = @$this->request->post['password'];
$password2 = @$this->request->post['password2'];
if($editpassword) {
if(!$validateLib->password($password)) {
$result = "Пароль должен содержать от 6 до 32 латинских букв, цифр и знаков <i>,.!?_-</i>!";
}
elseif($password != $password2) {
$result = "Введенные вами пароли не совпадают!";
}
}
return $result;
}
}
?>
@@ -0,0 +1,281 @@
<?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)
*/
class orderController extends Controller {
public function index() {
$this->data['serv_test'] = $this->config->serv_test;
$this->document->setActiveSection('servers');
$this->document->setActiveItem('order');
if(!$this->user->isLogged()) {
$this->session->data['error'] = "Вы не авторизированы!";
$this->response->redirect($this->config->url . 'account/login');
}
if($this->user->getAccessLevel() < 0) {
$this->session->data['error'] = "У вас нет доступа к данному разделу!";
$this->response->redirect($this->config->url);
}
$this->load->model('games');
$this->load->model('locations');
$games = $this->gamesModel->getGames(array('game_status' => 1));
$locations = $this->locationsModel->getLocations(array('location_status' => 1));
$this->data['games'] = $games;
$this->data['locations'] = $locations;
$this->getChild(array('common/header', 'common/footer'));
return $this->load->view('servers/order', $this->data);
}
public function promo() {
if(!$this->user->isLogged()) {
$this->data['status'] = "error";
$this->data['error'] = "Вы не авторизированы!";
return json_encode($this->data);
}
if($this->user->getAccessLevel() < 1) {
$this->data['status'] = "error";
$this->data['error'] = "У вас нет доступа к данному разделу!";
return json_encode($this->data);
}
$this->load->model('users');
if($this->request->server['REQUEST_METHOD'] == 'POST') {
$code = $this->request->post['code'];
$skidka = $this->usersModel->getSkidkaByCode($code, false);
$kofficent=(100-$skidka['skidka'])/100;
if($skidka['skidka'] == NULL){
$this->data['status'] = "error";
$this->data['error'] = "Данного кода не существует";
}else{
$this->data['status'] = "success";
$this->data['success'] = "Вы активировали скидку ".$skidka['skidka']."%";
$this->data['skidka'] = $kofficent;
}
}
return json_encode($this->data);
}
public function ajax() {
if(!$this->user->isLogged()) {
$this->data['status'] = "error";
$this->data['error'] = "Вы не авторизированы!";
return json_encode($this->data);
}
if($this->user->getAccessLevel() < 1) {
$this->data['status'] = "error";
$this->data['error'] = "У вас нет доступа к данному разделу!";
return json_encode($this->data);
}
$this->load->model('waste');
$this->load->model('users');
$this->load->model('games');
$this->load->model('locations');
$this->load->model('servers');
if($this->request->server['REQUEST_METHOD'] == 'POST') {
$errorPOST = $this->validatePOST();
if(!$errorPOST) {
$gameid = $this->request->post['gameid'];
$locationid = $this->request->post['locationid'];
$slots = $this->request->post['slots'];
$days = $this->request->post['days'];
$password = $this->request->post['password'];
$location = $this->locationsModel->getLocationById($locationid);
$location_games = explode(" ", $location['location_games']);
if(!in_array($gameid, $location_games)) {
$this->data['status'] = "error";
$this->data['error'] = "Данная игра не доступна для указанной локации!";
return json_encode($this->data);
}
$userid = $this->user->getId();
$balance = $this->user->getBalance();
$firstname = $this->user->getFirstname();
$lastname = $this->user->getLastname();
$email = $this->user->getEmail();
$test_server = $this->user->getTest_server();
$game = $this->gamesModel->getGameById($gameid);
$port = $this->serversModel->getServerNewPort($locationid, $game['game_min_port'], $game['game_max_port']);
$user = $this->usersModel->getUserById($userid, array(), array(), array());
$code = $this->request->post['promo'];
$skidka = $this->usersModel->getSkidkaByCode($code,true);$kofficent=(100-$skidka['skidka'])/100;
if($port) {
$price = $slots * $game['game_price'];
switch($days) {
case "0":
$test_periud = true;
break;
case "15":
$price = $price / 2;
$test_periud = false;
break;
case "30":
$test_periud = false;
break;
case "60":
$price = $price * 2;
$test_periud = false;
break;
case "90":
$price = 3 * $price * 0.95;
$test_periud = false;
break;
case "180":
$price = 6 * $price * 0.90;
$test_periud = false;
break;
case "360":
$price = 12 * $price * 0.85;
$test_periud = false;
break;
}
if($skidka['skidka'] != NULL){
$price = $price * $kofficent;
}
if($test_periud == true){
if($this->config->serv_test == 1) {
if($test_server == 1){
$serverData = array(
'user_id' => $userid,
'game_id' => $gameid,
'location_id' => $locationid,
'server_mysql' => 0,
'server_slots' => $slots,
'server_port' => $port,
'server_password' => $password,
'server_status' => 3,
'test_periud' => $test_periud,
'server_days' => $days
);
$serverid = $this->serversModel->createServer($serverData);
$this->usersModel->downUserBalance($userid, $price);
$wasteData = array(
'user_id' => $userid,
'waste_ammount' => $price,
'waste_status' => 1,
'waste_usluga' => "Заказ тестового сервера gs$serverid"
);
$this->wasteModel->createWaste($wasteData);
$this->data['status'] = "success";
$this->data['success'] = "Сервер успешно поставлен в очередь на установку.";
$this->data['id'] = $serverid;
} else {
$this->data['status'] = "error";
$this->data['error'] = "Вы уже брали тестовый период, либо у вас нет одобрения администратора!";
}
} else {
$this->data['status'] = "error";
$this->data['error'] = "Тестовый период отключен на хостинге!";
}
}elseif($balance >= $price AND $test_periud == false) {
$serverData = array(
'user_id' => $userid,
'game_id' => $gameid,
'location_id' => $locationid,
'server_mysql' => 0,
'server_slots' => $slots,
'server_port' => $port,
'server_password' => $password,
'server_status' => 3,
'test_periud' => $test_periud,
'server_days' => $days
);
$serverid = $this->serversModel->createServer($serverData);
$this->usersModel->downUserBalance($userid, $price);
$wasteData = array(
'user_id' => $userid,
'waste_ammount' => $price,
'waste_status' => 1,
'waste_usluga' => "Заказ сервера gs$serverid"
);
$this->wasteModel->createWaste($wasteData);
if($user['ref'] != 0) {
$ref_percent = $this->config->ref_percent;
$getpref = ($price * (1 + $ref_percent / 100)) - $price;
$this->usersModel->upUserBalance($user['ref'], $getpref);
$this->usersModel->upUserRMoney($user['ref'], $getpref);
$wasteData = array(
'user_id' => $user['ref'],
'waste_ammount' => $getpref,
'waste_status' => 0,
'waste_usluga' => "Бонус с реферала ID-$userid"
);
$this->wasteModel->createWaste($wasteData);
}
$this->data['status'] = "success";
$this->data['success'] = "Сервер успешно поставлен в очередь на установку.";
$this->data['id'] = $serverid;
} else {
$this->data['status'] = "error";
$this->data['error'] = "На Вашем счету недостаточно средств";
}
} else {
$this->data['status'] = "error";
$this->data['error'] = "На выбранной Вами локации нет свободных портов для данной игры";
}
} else {
$this->data['status'] = "error";
$this->data['error'] = $errorPOST;
}
}
return json_encode($this->data);
}
private function validatePOST() {
$this->load->library('validate');
$validateLib = new validateLibrary();
$result = null;
$gameid = @$this->request->post['gameid'];
$locationid = @$this->request->post['locationid'];
$slots = @$this->request->post['slots'];
$days = @$this->request->post['days'];
$password = @$this->request->post['password'];
$password2 = @$this->request->post['password2'];
if(!$this->gamesModel->getTotalGames(array('game_id' => (int)$gameid, 'game_status' => 1))) {
$result = "Вы указали несуществующую игру!";
}
elseif(!$this->locationsModel->getTotalLocations(array('location_id' => (int)$locationid, 'location_status' => 1))) {
$result = "Вы указали несуществующую локацию!";
}
elseif($days != "30" && $days != "60" && $days != "90" && $days != "180" && $days != "360" && $days != "15" && $days != "0") {
$result = "Вы указали недопустимый период оплаты!";
}
elseif(!$this->gamesModel->validateSlots($gameid, $slots)) {
$result = "Вы указали недопустимое количество слотов!";
}
elseif(!$validateLib->password($password)) {
$result = "Пароль должен содержать от 6 до 32 латинских букв, цифр и знаков <i>,.!?_-</i>!";
}
elseif($password != $password2) {
$result = "Введенные вами пароли не совпадают!";
}
return $result;
}
}
?>
@@ -0,0 +1,210 @@
<?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)
*/
class ownerController extends Controller {
public function index($serverid = null) {
$this->document->setActiveSection('servers');
$this->document->setActiveItem('owner');
$this->data['activesection'] = $this->document->getActiveSection();
$this->data['activeitem'] = $this->document->getActiveItem();
if(!$this->user->isLogged()) {
$this->session->data['error'] = "Вы не авторизированы!";
$this->response->redirect($this->config->url . 'account/login');
}
if($this->user->getAccessLevel() < 0) {
$this->session->data['error'] = "У вас нет доступа к данному разделу!";
$this->response->redirect($this->config->url);
}
$this->load->model('servers');
$error = $this->validate($serverid);
if($error) {
$this->session->data['error'] = $error;
$this->response->redirect($this->config->url . 'servers/index');
}
$this->data['server'] = $this->serversModel->getServerById($serverid, array('games', 'locations'));
$this->data['serversOwners'] = $this->serversModel->getOwners(array('server_id' => $serverid), array('users'));
include_once 'application/controllers/common/main.php';
$this->getChild(array('common/header', 'common/footer'));
return $this->load->view('servers/owner', $this->data);
}
public function create($serverid = null) {
if(!$this->user->isLogged()) {
$this->data['status'] = "error";
$this->data['error'] = "Вы не авторизированы!";
return json_encode($this->data);
}
if($this->user->getAccessLevel() < 1) {
$this->data['status'] = "error";
$this->data['error'] = "У вас нет доступа к данному разделу!";
return json_encode($this->data);
}
$this->load->model('users');
$this->load->model('servers');
$server = $this->serversModel->getServerById($serverid);
$error = $this->validate($serverid);
if($error) {
$this->data['status'] = "error";
$this->data['error'] = $error;
return json_encode($this->data);
}
if($server['server_status'] == 3) {
$this->data["status"] = "error";
$this->data["error"] = "Идет установка сервера!";
return json_encode($this->data);
} else if($server['server_status'] == 4) {
$this->data["status"] = "error";
$this->data["error"] = "Идет переустановка сервера!";
return json_encode($this->data);
} else if($server['server_status'] == 5) {
$this->data["status"] = "error";
$this->data["error"] = "Идет создание BackUP сервера!";
return json_encode($this->data);
} else if($server['server_status'] == 6) {
$this->data["status"] = "error";
$this->data["error"] = "Идет восстанновление сервера из BackUP!";
return json_encode($this->data);
} else if($server['server_status'] == 7) {
$this->data["status"] = "error";
$this->data["error"] = "Идет обновление сервера!";
return json_encode($this->data);
} else if($server["server_status"] == 0) {
$this->data["status"] = "error";
$this->data["error"] = "Сервер заблокирован!";
return json_encode($this->data);
}
if($this->request->server['REQUEST_METHOD'] == 'POST') {
if(!$this->validatePOST($serverid)) {
$ownerid = @$this->request->post['ownerid'];
$ownerData = array(
'server_id' => $serverid,
'user_id' => $ownerid,
'owner_status' => 1
);
$this->serversModel->createOwner($ownerData);
$this->data['status'] = "success";
$this->data['success'] = "Вы успешно добавили друга!";
} else {
$this->data['status'] = "error";
$this->data['error'] = $this->validatePOST($serverid);
}
}
return json_encode($this->data);
}
public function delete($serverid = null, $ownerid = null) {
if(!$this->user->isLogged()) {
$this->data['status'] = "error";
$this->data['error'] = "Вы не авторизированы!";
return json_encode($this->data);
}
if($this->user->getAccessLevel() < 1) {
$this->data['status'] = "error";
$this->data['error'] = "У вас нет доступа к данному разделу!";
return json_encode($this->data);
}
$this->load->model('users');
$this->load->model('servers');
$server = $this->serversModel->getServerById($serverid);
$error = $this->validate($serverid);
if($error) {
$this->data['status'] = "error";
$this->data['error'] = $error;
return json_encode($this->data);
}
if($server['server_status'] == 3) {
$this->data["status"] = "error";
$this->data["error"] = "Идет установка сервера!";
return json_encode($this->data);
} else if($server['server_status'] == 4) {
$this->data["status"] = "error";
$this->data["error"] = "Идет переустановка сервера!";
return json_encode($this->data);
} else if($server['server_status'] == 5) {
$this->data["status"] = "error";
$this->data["error"] = "Идет создание BackUP сервера!";
return json_encode($this->data);
} else if($server['server_status'] == 6) {
$this->data["status"] = "error";
$this->data["error"] = "Идет восстанновление сервера из BackUP!";
return json_encode($this->data);
} else if($server['server_status'] == 7) {
$this->data["status"] = "error";
$this->data["error"] = "Идет обновление сервера!";
return json_encode($this->data);
} else if($server["server_status"] == 0) {
$this->data["status"] = "error";
$this->data["error"] = "Сервер заблокирован!";
return json_encode($this->data);
}
if($this->request->server['REQUEST_METHOD'] == 'POST') {
if($this->serversModel->getTotalServerOwners(array('server_id' => $serverid, 'owner_id' => $ownerid))) {
$this->serversModel->deleteOwner($ownerid);
$this->data['status'] = "success";
$this->data['success'] = "Вы успешно удалили друга!";
} else {
$this->data['status'] = "error";
$this->data['error'] = "Ошибка!";
}
}
return json_encode($this->data);
}
private function validate($serverid) {
$result = null;
$userid = $this->user->getId();
if (!$this->serversModel->getTotalServers( array( 'server_id' => (int)$serverid, 'user_id' => (int)$userid ) )) {
$result = 'Вы не являетесь владельцем сервера. У вас нет доступа к разделу!';
}
return $result;
}
private function validatePOST($serverid) {
$result = null;
$this->load->library('validate');
$validateLib = new validateLibrary();
$ownerid = @$this->request->post['ownerid'];
$userid = $this->user->getId();
if(!$validateLib->money($ownerid)) {
$result = "Вы указали недоступный ID пользователя!";
}elseif(!$this->usersModel->getTotalUsers(array('user_id' => $ownerid))) {
$result = "Запрашиваемый пользователь не существует!";
}elseif($this->serversModel->getTotalServerOwners(array('server_id' => $serverid, 'user_id' => $ownerid))) {
$result = "Запрашиваемый пользователь уже добавлен!";
}elseif($userid == $ownerid) {
$result = "Запрашиваемый пользователь является владельцем сервера!";
}
return $result;
}
}
@@ -0,0 +1,183 @@
<?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)
*/
class repoController extends Controller {
public function index($serverid = null) {
$this->document->setActiveSection('servers');
$this->document->setActiveItem('repo');
$this->data['activesection'] = $this->document->getActiveSection();
$this->data['activeitem'] = $this->document->getActiveItem();
if(!$this->user->isLogged()) {
$this->session->data['error'] = "Вы не авторизированы!";
$this->response->redirect($this->config->url . 'account/login');
}
if($this->user->getAccessLevel() < 0) {
$this->session->data['error'] = "У вас нет доступа к данному разделу!";
$this->response->redirect($this->config->url);
}
$this->load->model('servers');
$this->load->model('users');
$error = $this->validate($serverid);
if($error) {
$this->session->data['error'] = $error;
$this->response->redirect($this->config->url . 'servers/index');
}
$userid = $this->user->getId();
$server = $this->serversModel->getServerById($serverid, array('games', 'locations'));
$this->data['server'] = $server;
$repos = $this->serversModel->getRepos(array('repo_status' => 1),array('games'),array(), array());
$this->data['userrepos'] = $this->usersModel->getUserRepos($userid);
$this->data['repos'] = $repos;
include_once 'application/controllers/common/main.php';
$this->getChild(array('common/header', 'common/footer'));
return $this->load->view('servers/repo', $this->data);
}
public function action($serverid = null, $action = null) {
if(!$this->user->isLogged()) {
$this->data['status'] = "error";
$this->data['error'] = "Вы не авторизированы!";
return json_encode($this->data);
}
if($this->user->getAccessLevel() < 0) {
$this->data['status'] = "error";
$this->data['error'] = "У вас нет доступа к данному разделу!";
return json_encode($this->data);
}
$userid = $this->user->getId();
$this->load->model('servers');
$this->load->model('users');
$this->load->model('waste');
$error = $this->validate($serverid);
if($error) {
$this->data['status'] = "error";
$this->data['error'] = $error;
return json_encode($this->data);
}
$error = $this->validateRepo($action);
if($error) {
$this->data['status'] = "error";
$this->data['error'] = $error;
return json_encode($this->data);
}
$balance = $this->user->getBalance();
$server = $this->serversModel->getServerById($serverid, array('users', 'locations', 'games'));
if($server['server_status'] == 3) {
$this->data["status"] = "error";
$this->data["error"] = "Идет установка сервера!";
return json_encode($this->data);
} else if($server['server_status'] == 4) {
$this->data["status"] = "error";
$this->data["error"] = "Идет переустановка сервера!";
return json_encode($this->data);
} else if($server['server_status'] == 5) {
$this->data["status"] = "error";
$this->data["error"] = "Идет создание BackUP сервера!";
return json_encode($this->data);
} else if($server['server_status'] == 6) {
$this->data["status"] = "error";
$this->data["error"] = "Идет восстанновление сервера из BackUP!";
return json_encode($this->data);
} else if($server['server_status'] == 7) {
$this->data["status"] = "error";
$this->data["error"] = "Идет обновление сервера!";
return json_encode($this->data);
} else if($server["server_status"] == 0) {
$this->data["status"] = "error";
$this->data["error"] = "Сервер заблокирован!";
return json_encode($this->data);
}
$repo = $this->serversModel->getRepoById($action);
if($repo["repo_status"] != 1) {
$this->data["status"] = "error";
$this->data["error"] = "Данный файл не доступен!";
return json_encode($this->data);
}
if($this->request->server['REQUEST_METHOD'] == 'POST') {
$price = $repo['repo_price'];
if($balance < $price){
$this->data['status'] = "error";
$this->data['error'] = "Недостаточно средств";
return json_encode($this->data);
}
$userid = $this->user->getId();
$wasteData = array(
'user_id' => $userid,
'waste_ammount' => $price,
'waste_status' => 1,
'waste_usluga' => "Покупка файла ".$repo['repo_id'].""
);
$this->wasteModel->createWaste($wasteData);
$this->usersModel->downUserBalance($userid, $price);
$freeData = array(
'user_id' => $userid,
'repo_id' => "".$repo['repo_id'].""
);
$this->usersModel->addRepos($freeData);
$user = $this->usersModel->getUserById($userid, array(), array(), array());
if($user['ref'] != 0) {
$ref_percent = $this->config->ref_percent;
$getpref = ($price * (1 + $ref_percent / 100)) - $price;
$this->usersModel->upUserBalance($user['ref'], $getpref);
$this->usersModel->upUserRMoney($user['ref'], $getpref);
$wasteData = array(
'user_id' => $user['ref'],
'waste_ammount' => $getpref,
'waste_status' => 0,
'waste_usluga' => "Бонус с реферала ID-$userid"
);
$this->wasteModel->createWaste($wasteData);
}
$this->data['status'] = "success";
$this->data['success'] = "Файл ".$repo['repo_name']." успешно был приобретен, с вашего счёта снято ".$repo['repo_price']." р!";
} else {
$this->data['status'] = "error";
$this->data['error'] = "Не POST запрос!";
}
return json_encode($this->data);
}
private function validate($serverid) {
$result = null;
$userid = $this->user->getId();
if(!$this->serversModel->getTotalServerOwners(array('server_id' => (int)$serverid, 'user_id' => (int)$userid, 'owner_status' => 1))) {
if(!$this->serversModel->getTotalServers(array('server_id' => (int)$serverid, 'user_id' => (int)$userid))) {
$result = "Запрашиваемый сервер не существует!";
}
}
return $result;
}
private function validateRepo($repoid) {
$result = null;
if(!$this->serversModel->getRepoById(array('repo_id' => (int)$repoid))) {
$result = "Запрашиваемый файл не существует!";
}
return $result;
}
}
?>
@@ -0,0 +1,109 @@
<?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)
*/
class statisticsController extends Controller {
public function index($serverid = null) {
$this->document->setActiveSection('servers');
$this->document->setActiveItem('statistic');
$this->data['activesection'] = $this->document->getActiveSection();
$this->data['activeitem'] = $this->document->getActiveItem();
if(!$this->user->isLogged()) {
$this->session->data['error'] = "Вы не авторизированы!";
$this->response->redirect($this->config->url . 'account/login');
}
if($this->user->getAccessLevel() < 0) {
$this->session->data['error'] = "У вас нет доступа к данному разделу!";
$this->response->redirect($this->config->url);
}
$this->load->model('servers');
$error = $this->validate($serverid);
if($error) {
$this->session->data['error'] = $error;
$this->response->redirect($this->config->url . 'servers/index');
}
$server = $this->serversModel->getServerById($serverid, array('games', 'locations'));
$logs = $this->serversModel->getLogs(array(), array('servers'), array(), array());
$stats = $this->serversModel->getServerStats($serverid, "NOW() - INTERVAL 31 DAY", "NOW()");
$this->data['server'] = $server;
$this->data['logs'] = $logs;
$this->data['stats'] = $stats;
include_once 'application/controllers/common/main.php';
$this->getChild(array('common/header', 'common/footer'));
return $this->load->view('servers/statistics', $this->data);
}
public function getData($serverid = null) {
if(!$this->user->isLogged()) {
$this->session->data['error'] = "Вы не авторизированы!";
$this->response->redirect($this->config->url . 'account/login');
}
if($this->user->getAccessLevel() < 0) {
$this->session->data['error'] = "У вас нет доступа к данному разделу!";
$this->response->redirect($this->config->url);
}
$this->load->model('servers');
$this->load->library('query');
$error = $this->validate($serverid);
if($error) {
$this->session->data['error'] = $error;
$this->response->redirect($this->config->url . 'servers/index');
}
$server = $this->serversModel->getServerById($serverid, array('games', 'locations'));
if($server['server_status'] == 2) {
$queryLib = new queryLibrary($server['game_query']);
$queryLib->connect($server['location_ip'], $server['server_port']);
$query = $queryLib->getInfo();
$queryLib->disconnect();
$sysload = $this->serversModel->getServerSystemLoad($serverid);
$ssd = round($sysload['ssd']);
$ssd_all = $server['game_ssd'];
$this->data['ssd'] = (int)(($ssd * 100) / $ssd_all);
$this->data['cpu'] = $sysload['cpu'] > 100 ? 100 : round($sysload['cpu']);
$this->data['ram'] = $sysload['ram'] > 100 ? 100 : round($sysload['ram']);
$this->data['players'] = $query['players'];
} else if($server['server_status'] == 3 || $server['server_status'] == 4) {
$this->data['ssd'] = 'N/A';
$this->data['cpu'] = 'N/A';
$this->data['ram'] = 'N/A';
$this->data['players'] = 'N/A';
} else {
$ssd = $this->serversModel->getHDD($serverid);
$ssd = round($ssd);
$ssd_all = $server['game_ssd'];
$this->data['ssd'] = (int)(($ssd * 100) / $ssd_all);
$this->data['cpu'] = 0;
$this->data['ram'] = 0;
$this->data['players'] = 0;
}
return json_encode($this->data);
}
private function validate($serverid) {
$result = null;
$userid = $this->user->getId();
if(!$this->serversModel->getTotalServerOwners(array('server_id' => (int)$serverid, 'user_id' => (int)$userid, 'owner_status' => 1))) {
if(!$this->serversModel->getTotalServers(array('server_id' => (int)$serverid, 'user_id' => (int)$userid))) {
$result = "Запрашиваемый сервер не существует!";
}
}
return $result;
}
}
?>
@@ -0,0 +1,216 @@
<?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)
*/
class tasksController extends Controller {
public function index($serverid = null) {
$this->document->setActiveSection('servers');
$this->document->setActiveItem('tasks');
$this->data['activesection'] = $this->document->getActiveSection();
$this->data['activeitem'] = $this->document->getActiveItem();
if(!$this->user->isLogged()) {
$this->session->data['error'] = "Вы не авторизированы!";
$this->response->redirect($this->config->url . 'account/login');
}
if($this->user->getAccessLevel() < 0) {
$this->session->data['error'] = "У вас нет доступа к данному разделу!";
$this->response->redirect($this->config->url);
}
$this->load->model('servers');
$error = $this->validate($serverid);
if($error) {
$this->session->data['error'] = $error;
$this->response->redirect($this->config->url . 'servers/index');
}
$server = $this->serversModel->getServerById($serverid, array('games', 'locations'));
$this->data['server'] = $server;
$tasks = $this->serversModel->getTasks(array("server_id" => $serverid, "isSystemTask" => 0), array(), array("task_id" => "DESC"));
$this->data["tasks"] = $tasks;
include_once 'application/controllers/common/main.php';
$this->getChild(array('common/header', 'common/footer'));
return $this->load->view('servers/tasks', $this->data);
}
public function createTask($serverid = null) {
if(!$this->user->isLogged()) {
$this->session->data['error'] = "Вы не авторизированы!";
$this->response->redirect($this->config->url . 'news/index');
}
if($this->user->getAccessLevel() < 0) {
$this->session->data['error'] = "У вас нет доступа к данному разделу!";
$this->response->redirect($this->config->url);
}
$this->load->model('servers');
$server = $this->serversModel->getServerById($serverid, array('games', 'locations'));
$error = $this->validate($serverid);
if($error) {
$this->data['status'] = "error";
$this->data['error'] = $error;
return json_encode($this->data);
}
if($server['server_status'] == 3) {
$this->data["status"] = "error";
$this->data["error"] = "Идет установка сервера!";
return json_encode($this->data);
} else if($server['server_status'] == 4) {
$this->data["status"] = "error";
$this->data["error"] = "Идет переустановка сервера!";
return json_encode($this->data);
} else if($server['server_status'] == 5) {
$this->data["status"] = "error";
$this->data["error"] = "Идет создание BackUP сервера!";
return json_encode($this->data);
} else if($server['server_status'] == 6) {
$this->data["status"] = "error";
$this->data["error"] = "Идет восстанновление сервера из BackUP!";
return json_encode($this->data);
} else if($server['server_status'] == 7) {
$this->data["status"] = "error";
$this->data["error"] = "Идет обновление сервера!";
return json_encode($this->data);
} else if($server["server_status"] == 0) {
$this->data["status"] = "error";
$this->data["error"] = "Сервер заблокирован!";
return json_encode($this->data);
}
if($this->request->server['REQUEST_METHOD'] == 'POST') {
$tasks = $this->serversModel->getTasks(array("server_id" => $serverid));
if(count($tasks) < 4) {
$task = @$this->request->post['task'];
$type = @$this->request->post['type'];
$time = @$this->request->post['time'];
if(!in_array($task, array("enable", "disable", "restart"))) {
$this->data["status"] = "error";
$this->data["error"] = "Вы указали несуществующую задачу!";
} else if(($task == 'enable' && $server['server_status'] != 1) || ($task == 'diable' && $server['server_status'] != 2) || ($task == 'restart' && $server['server_status'] != 2)) {
$this->data["status"] = "error";
$this->data["error"] = "Вы не можете создать данную задачу!";
} else if(!empty($this->serversModel->getTasks(array("server_id" => $serverid, "task_name" => $task)))) {
$this->data["status"] = "error";
$this->data["error"] = "Данная задача уже создана!";
} else if(!in_array($type, array('repeating', 'single'))) {
$this->data["status"] = "error";
$this->data["error"] = "Вы указали несуществующий тип задачи!";
} else if($task == 'repeating' && ($task == 'enable' || $task == 'diable')) {
$this->data["status"] = "error";
$this->data["error"] = "Данный тип задачи недоступен для задачи!";
} else if(!in_array($time, array("15min", "30min", "1hour", "12hours", "24hours"))) {
$this->data["status"] = "error";
$this->data["error"] = "Вы указали недопустимое время выполнения!";
} else {
if($time == '15min') {
$lead_time = "NOW() + INTERVAL 15 MINUTE";
} else if($time == '30min') {
$lead_time = "NOW() + INTERVAL 30 MINUTE";
} else if($time == '1hour') {
$lead_time = "NOW() + INTERVAL 1 HOUR";
} else if($time == '12hours') {
$lead_time = "NOW() + INTERVAL 12 HOUR";
} else if($time == '24hours') {
$lead_time = "NOW() + INTERVAL 24 HOUR";
}
$task = $this->serversModel->getTaskById($this->serversModel->createTask(array("server_id" => $serverid, "task_name" => $task, "task_type" => $type, "task_time" => $time, "task_lead_time" => $lead_time)));
$this->data['task'] = array("task_id" => $task['task_id'], "task_name" => $task['task_name'], "task_type" => $task['task_type'], "task_time" => $task['task_time'], "task_lead_time" => date("d.m.Y в H:i", strtotime($task['task_lead_time'])));
$this->data["status"] = "success";
$this->data["success"] = "Задача успешно создана!";
}
} else {
$this->data["status"] = "error";
$this->data["error"] = "Вы не можете создавать больше 4-х задач!";
}
}
return json_encode($this->data);
}
public function deleteTask($serverid = null) {
if(!$this->user->isLogged()) {
$this->session->data['error'] = "Вы не авторизированы!";
$this->response->redirect($this->config->url . 'news/index');
}
if($this->user->getAccessLevel() < 0) {
$this->session->data['error'] = "У вас нет доступа к данному разделу!";
$this->response->redirect($this->config->url);
}
$this->load->model('servers');
$server = $this->serversModel->getServerById($serverid, array('games', 'locations'));
$error = $this->validate($serverid);
if($error) {
$this->data['status'] = "error";
$this->data['error'] = $error;
return json_encode($this->data);
}
if($server['server_status'] == 3) {
$this->data["status"] = "error";
$this->data["error"] = "Идет установка сервера!";
return json_encode($this->data);
} else if($server['server_status'] == 4) {
$this->data["status"] = "error";
$this->data["error"] = "Идет переустановка сервера!";
return json_encode($this->data);
} else if($server['server_status'] == 5) {
$this->data["status"] = "error";
$this->data["error"] = "Идет создание BackUP сервера!";
return json_encode($this->data);
} else if($server['server_status'] == 6) {
$this->data["status"] = "error";
$this->data["error"] = "Идет восстанновление сервера из BackUP!";
return json_encode($this->data);
} else if($server['server_status'] == 7) {
$this->data["status"] = "error";
$this->data["error"] = "Идет обновление сервера!";
return json_encode($this->data);
} else if($server["server_status"] == 0) {
$this->data["status"] = "error";
$this->data["error"] = "Сервер заблокирован!";
return json_encode($this->data);
}
if($this->request->server['REQUEST_METHOD'] == 'POST') {
$task_id = @$this->request->post['task_id'];
$task = $this->serversModel->getTaskById($serverid);
if($task['server_id'] == $server_id) {
$this->serversModel->deleteTask(array('task_id' => $task_id));
$this->data["status"] = "success";
$this->data["success"] = "Задача успешно удалена!";
} else {
$this->data["status"] = "error";
$this->data["error"] = "Задача не найдена!";
}
}
return json_encode($this->data);
}
private function validate($serverid) {
$result = null;
$userid = $this->user->getId();
if(!$this->serversModel->getTotalServerOwners(array('server_id' => (int)$serverid, 'user_id' => (int)$userid, 'owner_status' => 1))) {
if(!$this->serversModel->getTotalServers(array('server_id' => (int)$serverid, 'user_id' => (int)$userid))) {
$result = "Запрашиваемый сервер не существует!";
}
}
return $result;
}
}
?>