EngineGP/system/library/cron/server_delete.php
Sergei Solovev 276ec7f3eb Updating the server name reference in code
This change replaces the use of $_SERVER['SERVER_NAME'] with $_SERVER['HTTP_HOST'] throughout the codebase. The modification ensures consistency and compliance with best practices, since $_SERVER['HTTP_HOST'] is often used to extract the host header from an HTTP request. This update may improve compatibility and security, especially in scenarios where the Host header plays a key role in proper server configuration and routing. Please review and test the changes carefully to ensure smooth functionality in different environments.
2023-12-23 04:50:14 +03:00

143 lines
6.7 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
if (!DEFINED('EGP'))
exit(header('Refresh: 0; URL=http://' . $_SERVER['HTTP_HOST'] . '/404'));
class server_delete extends cron
{
function __construct()
{
global $cfg, $sql, $argv;
$sql->query('SELECT `id`, `uid`, `user`, `unit`, `tarif`, `game`, `slots`, `address`, `ddos` FROM `servers` WHERE `id`="' . $argv[3] . '" AND `user`="-1" LIMIT 1');
if (!$sql->num())
return NULL;
$server = $sql->get();
if (!$server['uid'])
return NULL;
$sql->query('SELECT `install` FROM `tarifs` WHERE `id`="' . $server['tarif'] . '" LIMIT 1');
$tarif = $sql->get();
$sql->query('SELECT `address`, `passwd`, `sql_login`, `sql_passwd`, `sql_port`, `sql_ftp` FROM `units` WHERE `id`="' . $server['unit'] . '" LIMIT 1');
$unit = $sql->get();
include(LIB . 'ssh.php');
// Проверка ssh соединения с локацией
if (!$ssh->auth($unit['passwd'], $unit['address']))
return NULL;
// Убить процессы
$ssh->set('kill -9 `ps aux | grep s_' . $server['uid'] . ' | grep -v grep | awk ' . "'{print $2}'" . ' | xargs;'
. 'lsof -i@:' . $server['address'] . ' | awk ' . "'{print $2}'" . ' | xargs`; sudo -u server' . $server['uid'] . ' screen -wipe');
// Директория игрового сервера
$install = $tarif['install'] . $server['uid'];
$copys = 'screen -dmS r_copy_' . $server['uid'] . ' sh -c "';
$scopy = $sql->query('SELECT `id`, `name` FROM `copy` WHERE `server`="' . $server['id'] . '"');
while ($copy = $sql->get($scopy)) {
$copys .= 'rm /copy/' . $copy['name'] . '.tar;';
$sql->query('DELETE FROM `copy` WHERE `id`="' . $copy['id'] . '" LIMIT 1');
}
$copys .= '";';
$ssh->set($copys // Удаление резервных копий
. 'screen -dmS r_' . $server['uid'] . ' sh -c "rm -r ' . $install . ';' // Удаление директории сервера
. 'userdel server' . $server['uid'] . '"'); // Удаление пользователя сервера c локации
// Удаление ftp доступа
$qSql = 'DELETE FROM users WHERE username=\'' . $server['uid'] . '\';'
. 'DELETE FROM quotalimits WHERE name=\'' . $server['uid'] . '\';'
. 'DELETE FROM quotatallies WHERE name=\'' . $server['uid'] . '\'';
$ssh->set('screen -dmS ftp' . $server['uid'] . ' mysql -P ' . $unit['sql_port'] . ' -u' . $unit['sql_login'] . ' -p' . $unit['sql_passwd'] . ' --database ' . $unit['sql_ftp'] . ' -e "' . $qSql . '"');
include(LIB . 'games/games.php');
// Очистка правил FireWall
games::iptables($server['id'], 'remove', NULL, NULL, NULL, false, $ssh);
// Очистка правил FireWall GEO
if ($server['ddos']) {
$geo = $cfg['iptables'] . '_geo';
$country = $server['ddos'] == 2 ? 'AM,BY,UA,RU,KZ' : 'UA,RU';
$ssh->set('iptables -D INPUT -p udp -d ' . $ip . ' --dport ' . $port . ' -m geoip ! --source-country ' . $country . ' -j DROP;'
. 'sed "`nl ' . $geo . ' | grep \"#' . $id . '\" | awk \'{print $1","$1+1}\'`d" ' . $geo . ' > ' . $geo . '_temp; cat ' . $geo . '_temp > ' . $geo . '; rm ' . $geo . '_temp;');
}
// Удаление заданий из crontab
$sql->query('SELECT `address`, `passwd` FROM `panel` LIMIT 1');
$panel = $sql->get();
if (!$ssh->auth($panel['passwd'], $panel['address']))
return NULL;
$crons = $sql->query('SELECT `id`, `cron` FROM `crontab` WHERE `server`="' . $server['id'] . '"');
while ($cron = $sql->get($crons)) {
$ssh->set('echo "" >> /etc/crontab && cat /etc/crontab');
$crontab = str_replace($cron['cron'], '', $ssh->get());
// Временный файл
$temp = sys::temp($crontab);
$ssh->setfile($temp, '/etc/crontab', 0644);
$ssh->set("sed -i '/^$/d' /etc/crontab");
$ssh->set('crontab -u root /etc/crontab');
unlink($temp);
$sql->query('DELETE FROM `crontab` WHERE `id`="' . $cron['id'] . '" LIMIT 1');
}
// Обновление данных выделенного адреса
$sql->query('SELECT `id`, `aid` FROM `address_buy` WHERE `server`="' . $server['id'] . '" LIMIT 1');
if ($sql->num()) {
$add = $sql->get();
$sql->query('UPDATE `address` set `buy`="0" WHERE `id`="' . $add['aid'] . '" LIMIT 1');
$sql->query('DELETE FROM `address_buy` WHERE `id`="' . $add['id'] . '" LIMIT 1');
}
include(DATA . 'web.php');
$sql->query('SELECT `id` FROM `servers` WHERE `id`!="' . $server['id'] . '" AND `user`="' . $server['user'] . '" AND `unit`="' . $server['unit'] . '" LIMIT 1');
if ($sql->num()) {
$server_sec = $sql->get();
// Подготовка к удалению доп. услуги или обновление данных
$webs = $sql->query('SELECT `id`, `type` FROM `web` WHERE `server`="' . $server['id'] . '"');
while ($web = $sql->get($webs)) {
if ($aWebInstall[$server['game']][$web['type']] == ('unit' || 'user'))
$sql->query('UPDATE `web` set `server`="' . $server_sec['id'] . '" WHERE `id`="' . $web['id'] . '" LIMIT 1');
else
$sql->query('UPDATE `web` set `user`="0" WHERE `id`="' . $web['id'] . '" LIMIT 1');
}
} else
$sql->query('UPDATE `web` set `user`="0" WHERE `server`="' . $server['id'] . '"');
// Удаление различной информации игрового сервера
$sql->query('DELETE FROM `admins_' . $server['game'] . '` WHERE `server`="' . $server['id'] . '"');
$sql->query('DELETE FROM `plugins_install` WHERE `server`="' . $server['id'] . '"');
$sql->query('DELETE FROM `owners` WHERE `server`="' . $server['id'] . '"');
$sql->query('DELETE FROM `graph` WHERE `server`="' . $server['id'] . '"');
$sql->query('DELETE FROM `graph_day` WHERE `server`="' . $server['id'] . '"');
$sql->query('DELETE FROM `graph_hour` WHERE `server`="' . $server['id'] . '"');
$sql->query('DELETE FROM `servers` WHERE `id`="' . $server['id'] . '" LIMIT 1');
$sql->query('INSERT INTO `logs_sys` set `user`="0", `server`="' . $argv[3] . '", `text`="Удаление игрового сервера #' . $argv[3] . ' (' . $server['game'] . ') unit: #' . $server['unit'] . ', tarif: #' . $server['tarif'] . ', slots: #' . $server['slots'] . '", `time`="' . $start_point . '"');
return NULL;
}
}
?>