Files
redl-gamepanel/panel/application/controllers/servers/control.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

1258 lines
50 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?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 controlController extends Controller {
public function index($serverid = null) {
$this->document->setActiveSection('servers');
$this->document->setActiveItem('control');
$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->library('query');
$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'] == 2) {
$queryLib = new queryLibrary($server['game_query']);
$queryLib->connect($server['location_ip'], $server['server_port']);
$query = $queryLib->getInfo();
$queryLib->disconnect();
$this->data['query'] = $query;
}
$datenow = date_create('now');
$dateend = date_create($server['server_date_end']);
$diff = date_diff($datenow, $dateend);
if ($diff->invert) {
$days = 1;
} else {
$days = $diff->days;
}
if($server['server_status'] == 2 AND $server['game_code'] == "cs" || $server['game_code'] == "css" || $server['game_code'] == "csgo") {
$this->load->library('ssh2');
$ssh = new ssh2Library();
$connect = $ssh->connect($server['location_ip'], $server['location_user'], $pass = $server['location_password']);
$output = $ssh->execute($connect, "cd /home/gs".$server['server_id']."/cstrike/maps/; ls | grep .bsp;");
$disconnect = $ssh->disconnect($connect);
$data = $output . $disconnect;
$data = explode("\n", $data);
$maps = '<option selected="selected" value="' . $query['mapname'] . '">' . $query['mapname'] . '</option>';
foreach ($data as $map) {
if (!preg_match('/\.(bsp.ztmp)/', $map)) {
$map = str_replace(".bsp", "", $map);
$maps .= '<option value="' . $map . '">' . $map . '</option>';
}
}
$this->data['maps'] = $maps;
}
if($server['game_code'] == "mcpe" || $server['game_code'] == "mine") {
$cores = @array_reverse(@$this->game_settings->cores[$server['game_code']]);
$this->data["cores"] = $cores;
$no_core = @array_reverse(@$this->game_settings->cores[$server['game_code']]['latest_core']);
$this->data["no_core"] = $no_core;
}
if($server['game_code'] == "cs") {
$builds = @array_reverse(@$this->game_settings->builds[$server['game_code']]);
$this->data["builds"] = $builds;
$no_build = @array_reverse(@$this->game_settings->builds[$server['game_code']]['latest_build']);
$this->data["no_build"] = $no_build;
}
if($server['server_status'] == 1 AND $server['game_code'] == "ragemp") {
$node_modules = @array_reverse(@$this->game_settings->node_modules[$server['game_code']]);
$this->data["node_modules"] = $node_modules;
}
if($server['server_status'] == 1 AND $server['game_code'] == "cs" || $server['game_code'] == "css" || $server['game_code'] == "csgo") {
if($server["game_code"] == "cs") {
$fps = array("300", "500", "1100");
$this->data["fps"] = $fps;
}
if($server["game_code"] == "csgo") {
$tickrate = array("64", "128");
$this->data["tickrate"] = $tickrate;
}
if($server["game_code"] == "css") {
$tickrate = array("66", "100");
$this->data["tickrate"] = $tickrate;
}
}
$this->data['server'] = $server;
$this->data['days'] = $days;
$this->data['portPrice'] = $portPrice = round($this->config->portPrice);
include_once 'application/controllers/common/main.php';
$this->getChild(array('common/header', 'common/footer'));
return $this->load->view('servers/control', $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('waste');
$this->load->model('users');
$this->load->model('servers');
$server = $this->serversModel->getServerById($serverid, array('games'));
$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($serverid);
if(!$errorPOST) {
if($server["server_status"] == 1) {
$slots = $this->request->post['slots'];
$userid = $this->user->getId();
$balance = $this->user->getBalance();
$user = $this->usersModel->getUserById($userid, array(), array(), array());
$datenow = date_create('now');
$dateend = date_create($server['server_date_end']);
$diff = date_diff($datenow, $dateend);
if ($diff->invert) {
$days = 1;
}
else {
$days = $diff->days;
}
$price = $server['game_price'] * ($slots-$server['server_slots']);
if ($days != NULL) {
$price = ($price / 30) * $days;
}
if ($server['server_slots'] == $slots) {
$price = '0';
}
if (($slots - $server['server_slots']) <= 0) {
$price = '0';
}
if($slots < $server['server_slots'])
{
$this->data['status'] = "error";
$this->data['error'] = "Невозможно установить слоты ниже заданных.";
return json_encode($this->data);
}
if($slots == $server['server_slots'])
{
$this->data['status'] = "success";
$this->data['success'] = "Слоты не были изменены.";
return json_encode($this->data);
}
if($balance >= $price) {
$this->serversModel->slotsServer($serverid, $slots);
$this->usersModel->downUserBalance($userid, round($price, 2));
$wasteData = array(
'user_id' => $userid,
'waste_ammount' => round($price, 2),
'waste_status' => 1,
'waste_usluga' => "Увеличено до $slots слотов для сервера 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);
}
$logData = array(
'server_id' => $serverid,
'reason' => 'Увеличено до '.$slots.' слотов.',
'status' => 1
);
$this->serversModel->createLog($logData);
$this->data['status'] = "success";
$this->data['success'] = "Вы успешно установили $slots слотов! С Вашего счета снято ".(round($price, 2))." руб.";
} else {
$this->data['status'] = "error";
$logData = array(
'server_id' => $serverid,
'reason' => '[SLOTS] Не достаточно средств!',
'status' => 3
);
$this->serversModel->createLog($logData);
$this->data['error'] = "На Вашем счету не хватает ". round($price - $balance, 2) ." руб.";
}
} 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($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');
$this->load->model('users');
$this->load->library('ssh2');
$ssh2Lib = new ssh2Library();
$server = $this->serversModel->getServerById($serverid, array('users', 'locations', 'games'));
$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($action == "start" || $action == "stop" || $action == "restart" || $action == "reinstall" || $action == "backup" || $action == "unbackup" || $action == "delete_backup") {
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 "reinstall": {
if($server["server_status"] == 1) {
$logData = array(
'server_id' => $serverid,
'reason' => 'Сервер успешно поставлен на переустановку!',
'status' => 2
);
$this->serversModel->createLog($logData);
$this->serversModel->updateServer($serverid, array('server_status' => 4, 'server_work' => 1));
$this->data["status"] = "success";
$this->data["success"] = "Сервер успешно поставлен на переустановку!";
} 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;
}
case 'backup': {
if($server['server_status'] == 1) {
$stats = $this->serversModel->getHDD($server['server_id']);
if((int)$stats < $server['game_ssd']) {
$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));
$this->serversModel->updateServer($serverid, array('server_status' => 5, 'server_work' => 1));
$logData = array(
'server_id' => $serverid,
'reason' => 'Успешное начало создания BackUP сервера.',
'status' => 1
);
$this->serversModel->createLog($logData);
$this->data['status'] = "success";
$this->data['success'] = "Вы успешно начали создание BackUP сервера!";
} else {
$this->data["status"] = "error";
$this->data["error"] = "Вы привысили ограничение размера директории на ". round($stats - $server['game_ssd'], 2) ."МБ, создание бекапа сервера невозможено!";
}
} else {
$this->data['status'] = "error";
$this->data['error'] = "Сервер должен быть выключен!";
}
break;
}
case 'unbackup': {
if($server['server_status'] == 1) {
if (file_exists('ssh2.sftp://'.$server['location_user'].':'.$server['location_password'].'@'.$server['location_ip'].':22/home/cp/backups/gs'.$serverid.'.tar')) {
$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));
$this->serversModel->updateServer($serverid, array('server_status' => 6, 'server_work' => 1));
$logData = array(
'server_id' => $serverid,
'reason' => 'Успешное начало восстановление BackUP сервера.',
'status' => 1
);
$this->serversModel->createLog($logData);
$this->data['status'] = "success";
$this->data['success'] = "Вы успешно восстановили BackUP сервера!";
} else {
$this->data['status'] = "error";
$this->data['error'] = "У вас нет BackUP сервера!";
}
} else {
$this->data['status'] = "error";
$this->data['error'] = "Сервер должен быть выключен!";
}
break;
}
case 'delete_backup': {
if($server['server_status'] == 1) {
if (file_exists('ssh2.sftp://'.$server['location_user'].':'.$server['location_password'].'@'.$server['location_ip'].':22/home/cp/backups/gs'.$serverid.'.tar')) {
$result = $this->serversModel->action($serverid, 'delete_backup');
if($result["status"] == "success") {
$logData = array(
'server_id' => $serverid,
'reason' => 'Успешное удаление BackUP сервера',
'status' => 1
);
$this->serversModel->createLog($logData);
$this->data["status"] = "success";
$this->data["success"] = "Вы успешно удалили BackUP сервера!";
} else {
$this->data["status"] = "error";
$this->data["error"] = $result["description"];
}
} else {
$this->data['status'] = "error";
$this->data['error'] = "У вас нет BackUP сервера!";
}
} else {
$this->data['status'] = "error";
$this->data['error'] = "Сервер должен быть выключен!";
}
break;
}
case 'promised': {
$this->load->model('users');
$this->load->model('waste');
$userid = $this->user->getId();
$user = $this->usersModel->getUserById($userid, array(), array(), array());
if($user['user_promised_pay'] == 0){
$result = $this->serversModel->promisedServer($serverid);
if($result["status"] == "success") {
$this->usersModel->updateUser($userid, array('user_promised_pay' => 1));
$this->usersModel->downUserBalance($userid, 15);
$wasteData = array(
'user_id' => $userid,
'waste_ammount' => 15,
'waste_status' => 1,
'waste_usluga' => "Услуга обещанный платеж для сервера gs$serverid"
);
$this->wasteModel->createWaste($wasteData);
$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;
}
default: {
$logData = array(
'server_id' => $serverid,
'reason' => 'Вы выбрали несуществующее действие!',
'status' => 3
);
$this->serversModel->createLog($logData);
$this->data['status'] = "error";
$this->data['error'] = "Вы выбрали несуществующее действие!";
break;
}
}
return json_encode($this->data);
}
public function ajax_port($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);
}
$userid = $this->user->getId();
$balance = $this->user->getBalance();
$portPrice = round($this->config->portPrice);
$this->load->model('waste');
$this->load->model('users');
$this->load->model('servers');
$gameServer = $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($gameServer['server_status'] == 3) {
$this->data["status"] = "error";
$this->data["error"] = "Идет установка сервера!";
return json_encode($this->data);
} else if($gameServer['server_status'] == 4) {
$this->data["status"] = "error";
$this->data["error"] = "Идет переустановка сервера!";
return json_encode($this->data);
} else if($gameServer['server_status'] == 5) {
$this->data["status"] = "error";
$this->data["error"] = "Идет создание BackUP сервера!";
return json_encode($this->data);
} else if($gameServer['server_status'] == 6) {
$this->data["status"] = "error";
$this->data["error"] = "Идет восстанновление сервера из BackUP!";
return json_encode($this->data);
} else if($gameServer['server_status'] == 7) {
$this->data["status"] = "error";
$this->data["error"] = "Идет обновление сервера!";
return json_encode($this->data);
} else if($gameServer["server_status"] == 0) {
$this->data["status"] = "error";
$this->data["error"] = "Сервер заблокирован!";
return json_encode($this->data);
}
if($this->request->server['REQUEST_METHOD'] == 'POST') {
$port = @(int)$this->request->post['port'];
if($gameServer['server_status'] == 1){
if($balance >= $portPrice){
if(!$this->serversModel->getTotalFirewalls(array('server_id' => $serverid))){
if(!$this->serversModel->getTotalServers(array('location_id' => $gameServer['location_id'], 'server_port' => $port))){
$gameServerPorts = $this->serversModel->getGameServerPortList($gameServer['location_id'], $gameServer['game_min_port'], $gameServer['game_max_port']);
if (in_array($port, $gameServerPorts)) {
$this->serversModel->updateServer($serverid, array('server_port' => $port));
$this->usersModel->downUserBalance($userid, $portPrice);
$wasteData = array(
'user_id' => $userid,
'waste_ammount' => $portPrice,
'waste_status' => 1,
'waste_usluga' => "Установлен порт $port для сервера gs$serverid"
);
$this->wasteModel->createWaste($wasteData);
$user = $this->usersModel->getUserById($userid, array(), array(), array());
if($user['ref'] != 0) {
$ref_percent = $this->config->ref_percent;
$getpref = ($portPrice * (1 + $ref_percent / 100)) - $portPrice;
$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'] = "Вы успешно сменили порт сервера на ".$port;
} else {
$this->data['status'] = 'error';
$this->data['error'] = 'Выбранный порт не может быть использован!';
}
} else {
$this->data['status'] = "error";
$this->data['error'] = "Выбранный порт уже занят другим сервером!";
}
} else {
$this->data['status'] = "error";
$this->data['error'] = "Необходимо удалить все заблокированные IP адреса!";
}
} else {
$this->data['status'] = "error";
$this->data['error'] = "На Вашем счету не хватает ".(round($portPrice-$balance, 2))." руб";
}
} else {
$this->data['status'] = "error";
$this->data['error'] = "Сервер должен быть выключен!";
}
}
return json_encode($this->data);
}
public function changemap_go($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($server['server_status'] == 2){
$command = str_replace("'", "&#039;", "changelevel ".$_POST['map']."");
$this->serversModel->action($serverid, 'sendcommand', array('command' => $command));
$this->data['status'] = "success";
$this->data['success'] = "Вы успешно сменили карту на ".$_POST['map']."!";
}else{
$this->data['status'] = "error";
$this->data['error'] = "Сервер должен быть включен!";
}
return json_encode($this->data);
}
public function changecore($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') {
if($server['server_status'] == 1){
if($server["game_code"] == "mine" || $server["game_code"] == "mcpe") {
$core = @$this->request->post['core'];
$coreInfo = $this->game_settings->cores[$server['game_code']][$core];
if(is_array($coreInfo)) {
$result = $this->serversModel->action($serverid, 'sendcommand', array('command' => 'unsetFiles'));
if($result['status'] == "success") {
$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));
$this->serversModel->updateServer($serverid, array('server_status' => 7, 'server_work' => 1, 'server_binary' => $core, 'server_binary_version' => $this->game_settings->cores[$server['game_code']][$core]['corebinary']));
$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"] = "Вы указали неверное ядро!";
}
} else {
$this->data["status"] = "error";
$this->data["error"] = "Не для Вашей игры!";
}
} else {
$this->data['status'] = "error";
$this->data['error'] = "Сервер должен быть выключен!";
}
}
return json_encode($this->data);
}
public function changebuild($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') {
if($server['server_status'] == 1){
if($server["game_code"] == "cs") {
$build = @$this->request->post['build'];
$buildInfo = $this->game_settings->builds[$server['game_code']][$build];
if(is_array($buildInfo)) {
$result = $this->serversModel->action($serverid, 'sendcommand', array('command' => 'unsetFiles'));
if($result['status'] == "success") {
$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));
$this->serversModel->updateServer($serverid, array('server_status' => 7, 'server_work' => 1, 'server_binary' => $build));
$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"] = "Вы указали неверный билд!";
}
} else {
$this->data["status"] = "error";
$this->data["error"] = "Не для Вашей игры!";
}
} else {
$this->data['status'] = "error";
$this->data['error'] = "Сервер должен быть выключен!";
}
}
return json_encode($this->data);
}
public function loadModuleJS($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') {
if($server['server_status'] == 1){
if($server["game_code"] == "ragemp") {
$stats = $this->serversModel->getHDD($server['server_id']);
if((int)$stats < $server['game_ssd']) {
$module = @$this->request->post['module'];
$moduleInfo = $this->game_settings->node_modules[$server['game_code']][$module];
if(is_array($moduleInfo)) {
$result = $this->serversModel->action($serverid, 'sendcommand', array('command' => 'loadModuleJS', 'module' => $module));
if($result['status'] == "success") {
$this->data["status"] = "success";
$this->data["success"] = "Вы успешно загрузили на сервер модуль ".$this->game_settings->node_modules[$server['game_code']][$module]['module_name']."!";
} 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"] = "Вы привысили ограничение размера директории на ". round($stats - $server['game_ssd'], 2) ."МБ, загрузка модулей невозможна!";
}
} else {
$this->data["status"] = "error";
$this->data["error"] = "Не для Вашей игры!";
}
} else {
$this->data['status'] = "error";
$this->data['error'] = "Сервер должен быть выключен!";
}
}
return json_encode($this->data);
}
public function settingStart($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') {
if($server['server_status'] == 1){
if($server["game_code"] == "cs" || $server["game_code"] == "css" || $server["game_code"] == "csgo" || $server["game_query"] == "samp") {
$rcon_password = @$this->request->post['rcon_password'];
if(mb_strlen($rcon_password) < 2 || mb_strlen($rcon_password) > 18) {
$this->data["status"] = "error";
$this->data["error"] = "RCON Пароль должен содержать от 2 до 18 символов!";
return json_encode($this->data);
}
$this->serversModel->updateServer($serverid, array('rcon_password' => $rcon_password));
if($server["game_code"] == "cs" || $server["game_code"] == "css" || $server["game_code"] == "csgo") {
$vac = @$this->request->post['vac'];
if(!in_array($vac, array("0", "1"))) {
$this->data["status"] = "error";
$this->data["error"] = "Статус античита VAC указан неверно!";
return json_encode($this->data);
}
$this->serversModel->updateServer($serverid, array('server_vac' => $vac));
$fastdl = @$this->request->post['fastdl'];
if(!in_array($fastdl, array("0", "1"))) {
$this->data["status"] = "error";
$this->data["error"] = "Статус FastDL указан неверно!";
return json_encode($this->data);
}
$this->serversModel->updateServer($serverid, array('fastdl_status' => $fastdl));
if($server["game_code"] == "cs") {
$fps = @$this->request->post['fps'];
if(!in_array($fps, array("300", "500", "1100"))) {
$this->data["status"] = "error";
$this->data["error"] = "Параметр FPS указан неверно!";
return json_encode($this->data);
} else {
$this->serversModel->updateServer($serverid, array('server_fps' => $fps));
}
}
if($server["game_code"] == "csgo") {
$tickrate = @$this->request->post['tickrate'];
if(!in_array($tickrate, array("64", "128"))) {
$this->data["status"] = "error";
$this->data["error"] = "Параметр Tickrate указан неверно!";
return json_encode($this->data);
} else {
$this->serversModel->updateServer($serverid, array('server_tickrate' => $tickrate));
}
}
if($server["game_code"] == "css") {
$tickrate = @$this->request->post['tickrate'];
if(!in_array($tickrate, array("66", "100"))) {
$this->data["status"] = "error";
$this->data["error"] = "Параметр Tickrate указан неверно!";
return json_encode($this->data);
} else {
$this->serversModel->updateServer($serverid, array('server_tickrate' => $tickrate));
}
}
}
$this->data["status"] = "success";
$this->data["success"] = "Параметры запуска успешно изменены!";
} else {
$this->data["status"] = "error";
$this->data["error"] = "Не для Вашей игры!";
}
} else {
$this->data['status'] = "error";
$this->data['error'] = "Сервер должен быть выключен!";
}
}
return json_encode($this->data);
}
public function buy_months($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('waste');
$this->load->model('users');
$this->load->model('servers');
$error = $this->validate($serverid);
if($error) {
$this->data['status'] = "error";
$this->data['error'] = $error;
return json_encode($this->data);
}
if($this->request->server['REQUEST_METHOD'] == 'POST') {
$days = @$this->request->post['days'];
if($days != "30" && $days != "60" && $days != "90" && $days != "180" && $days != "360" && $days != "15") {
$this->data['status'] = "error";
$this->data['error'] = "Вы указали недопустимый период оплаты!";
return json_encode($this->data);
}
$userid = $this->user->getId();
$balance = $this->user->getBalance();
$server = $this->serversModel->getServerById($serverid, array('games'));
$price = $server['server_slots'] * $server['game_price'];
switch($days) {
case "15":
$price = $price / 2;
break;
case "30":
break;
case "60":
$price = $price * 2;
break;
case "90":
$price = 3 * $price * 0.95;
break;
case "180":
$price = 6 * $price * 0.90;
break;
case "360":
$price = 12 * $price * 0.85;
break;
}
if($balance >= $price) {
if($server['server_status'] == 0) {
$this->serversModel->updateServer($serverid, array('server_status' => 1));
$this->serversModel->extendServer($serverid,$days,true);
$this->serversModel->action($serverid, "updatepassm");
$this->serversModel->action($serverid, "updatepass");
} else {
$this->serversModel->extendServer($serverid,$days,false);
}
$this->usersModel->downUserBalance($userid, $price);
$wasteData = array(
'user_id' => $userid,
'waste_ammount' => $price,
'waste_status' => 1,
'waste_usluga' => "Продление сервера gs$serverid на $days дней"
);
$this->wasteModel->createWaste($wasteData);
$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);
}
$logData = array(
'server_id' => $serverid,
'reason' => 'Сервер успешно продлен!',
'status' => 1
);
$this->serversModel->createLog($logData);
$this->data['status'] = "success";
$this->data['success'] = "Вы успешно оплатили сервер на $days дней. С Вашего счета снято ".(round($price, 2))." руб";
} else {
$logData = array(
'server_id' => $serverid,
'reason' => '[PAY] На счету не достаточно средств для продления сервера!',
'status' => 3
);
$this->serversModel->createLog($logData);
$this->data['status'] = "error";
$this->data['error'] = "На Вашем счету не хватает ".(round($price-$balance, 2))." руб";
}
}
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 validatePOST($serverid)
{
$this->load->library('validate');
$this->load->model('games');
$validateLib = new validateLibrary();
$result = NULL;
$server = $this->serversModel->getServerById($serverid, array('games', 'locations'));
$gameid = $server['game_id'];
$slots = $this->request->post['slots'];
if (!$this->gamesModel->validateSlots($gameid, $slots)) {
$result = 'Вы указали недопустимое количество слотов!';
}
elseif(!$validateLib->money($slots)) {
$result = "Укажите количество слотов в допустимом формате!";
}
return $result;
}
}
?>