256
+ − 1
<?php
+ − 2
+ − 3
/*
+ − 4
* Enano - an open-source CMS capable of wiki functions, Drupal-like sidebar blocks, and everything in between
204
473cc747022a
You know what folks, a lot of Mercurial merges failed, and I just now figured out why. So now all changes from stable are permanently synced in.
Dan
diff
changeset
+ − 5
* Version 1.1.1
256
+ − 6
* Copyright (C) 2006-2007 Dan Fuhry
+ − 7
* install.php - handles everything related to installation and initial configuration
+ − 8
*
+ − 9
* This program is Free Software; you can redistribute and/or modify it under the terms of the GNU General Public License
+ − 10
* as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
+ − 11
*
+ − 12
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
+ − 13
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for details.
+ − 14
*/
+ − 15
+ − 16
@include('config.php');
276
acfdccf7a2bf
Re-sync Oxygen and Mint and Oxygen simple with Oxygen main; a couple improvements to the redirect-on-no-config code
Dan
diff
changeset
+ − 17
if( ( defined('ENANO_INSTALLED') || defined('MIDGET_INSTALLED') ) && ((isset($_GET['mode']) && ($_GET['mode']!='finish' && $_GET['mode']!='css') && $_GET['mode']!='showlicense') || !isset($_GET['mode'])))
256
+ − 18
{
+ − 19
$_GET['title'] = 'Enano:Installation_locked';
+ − 20
require('includes/common.php');
+ − 21
die_friendly('Installation locked', '<p>The Enano installer has found a Enano installation in this directory. You MUST delete config.php if you want to re-install Enano.</p><p>If you wish to upgrade an older Enano installation to this version, please use the <a href="upgrade.php">upgrade script</a>.</p>');
+ − 22
exit;
+ − 23
}
+ − 24
+ − 25
define('IN_ENANO_INSTALL', 'true');
+ − 26
204
473cc747022a
You know what folks, a lot of Mercurial merges failed, and I just now figured out why. So now all changes from stable are permanently synced in.
Dan
diff
changeset
+ − 27
define('ENANO_VERSION', '1.1.1');
243
+ − 28
define('ENANO_CODE_NAME', 'Germination');
256
+ − 29
// In beta versions, define ENANO_BETA_VERSION here
+ − 30
240
f0149a27df5f
Localized default sidebar; installer should work now including the lang import; l10n in installer to follow
Dan
diff
changeset
+ − 31
// This is required to make installation work right
f0149a27df5f
Localized default sidebar; installer should work now including the lang import; l10n in installer to follow
Dan
diff
changeset
+ − 32
define("ENANO_ALLOW_LOAD_NOLANG", 1);
f0149a27df5f
Localized default sidebar; installer should work now including the lang import; l10n in installer to follow
Dan
diff
changeset
+ − 33
256
+ − 34
if(!defined('scriptPath')) {
+ − 35
$sp = dirname($_SERVER['REQUEST_URI']);
+ − 36
if($sp == '/' || $sp == '\\') $sp = '';
+ − 37
define('scriptPath', $sp);
+ − 38
}
+ − 39
+ − 40
if(!defined('contentPath')) {
+ − 41
$sp = dirname($_SERVER['REQUEST_URI']);
+ − 42
if($sp == '/' || $sp == '\\') $sp = '';
+ − 43
define('contentPath', $sp);
+ − 44
}
+ − 45
global $_starttime, $this_page, $sideinfo;
+ − 46
$_starttime = microtime(true);
+ − 47
+ − 48
// Determine directory (special case for development servers)
+ − 49
if ( strpos(__FILE__, '/repo/') && file_exists('.enanodev') )
+ − 50
{
+ − 51
$filename = str_replace('/repo/', '/', __FILE__);
+ − 52
}
+ − 53
else
+ − 54
{
+ − 55
$filename = __FILE__;
+ − 56
}
+ − 57
+ − 58
define('ENANO_ROOT', dirname($filename));
+ − 59
+ − 60
function is_page($p)
+ − 61
{
+ − 62
return true;
+ − 63
}
+ − 64
+ − 65
require('includes/wikiformat.php');
+ − 66
require('includes/constants.php');
+ − 67
require('includes/rijndael.php');
+ − 68
require('includes/functions.php');
243
+ − 69
require('includes/dbal.php');
+ − 70
require('includes/lang.php');
+ − 71
require('includes/json.php');
256
+ − 72
+ − 73
strip_magic_quotes_gpc();
+ − 74
+ − 75
//
+ − 76
// INSTALLER LIBRARY
+ − 77
//
+ − 78
243
+ − 79
$neutral_color = 'C';
+ − 80
256
+ − 81
function run_installer_stage($stage_id, $stage_name, $function, $failure_explanation, $allow_skip = true)
+ − 82
{
+ − 83
static $resumed = false;
+ − 84
static $resume_stack = array();
+ − 85
+ − 86
if ( empty($resume_stack) && isset($_POST['resume_stack']) && preg_match('/[a-z_]+((\|[a-z_]+)+)/', $_POST['resume_stack']) )
+ − 87
{
+ − 88
$resume_stack = explode('|', $_POST['resume_stack']);
+ − 89
}
+ − 90
+ − 91
$already_run = false;
+ − 92
if ( in_array($stage_id, $resume_stack) )
+ − 93
{
+ − 94
$already_run = true;
+ − 95
}
+ − 96
+ − 97
if ( !$resumed )
+ − 98
{
+ − 99
if ( !isset($_GET['stage']) )
+ − 100
$resumed = true;
+ − 101
if ( isset($_GET['stage']) && $_GET['stage'] == $stage_id )
+ − 102
{
+ − 103
$resumed = true;
+ − 104
}
+ − 105
}
+ − 106
if ( !$resumed && $allow_skip )
+ − 107
{
267
+ − 108
echo_stage_success($stage_id, $stage_name);
256
+ − 109
return false;
+ − 110
}
+ − 111
if ( !function_exists($function) )
+ − 112
die('libenanoinstall: CRITICAL: function "' . $function . '" for ' . $stage_id . ' doesn\'t exist');
+ − 113
$result = @call_user_func($function, false, $already_run);
+ − 114
if ( $result )
+ − 115
{
+ − 116
echo_stage_success($stage_id, $stage_name);
+ − 117
$resume_stack[] = $stage_id;
+ − 118
return true;
+ − 119
}
+ − 120
else
+ − 121
{
+ − 122
echo_stage_failure($stage_id, $stage_name, $failure_explanation, $resume_stack);
+ − 123
return false;
+ − 124
}
+ − 125
}
+ − 126
+ − 127
function start_install_table()
+ − 128
{
254
+ − 129
echo '<table border="0" cellspacing="0" cellpadding="0" style="margin-top: 10px;">' . "\n";
270
5bcdee999015
Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
diff
changeset
+ − 130
ob_start();
256
+ − 131
}
+ − 132
+ − 133
function close_install_table()
+ − 134
{
+ − 135
echo '</table>' . "\n\n";
270
5bcdee999015
Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
diff
changeset
+ − 136
ob_end_flush();
256
+ − 137
}
+ − 138
+ − 139
function echo_stage_success($stage_id, $stage_name)
+ − 140
{
+ − 141
global $neutral_color;
+ − 142
$neutral_color = ( $neutral_color == 'A' ) ? 'C' : 'A';
+ − 143
echo '<tr><td style="width: 500px; background-color: #' . "{$neutral_color}{$neutral_color}FF{$neutral_color}{$neutral_color}" . '; padding: 0 5px;">' . htmlspecialchars($stage_name) . '</td><td style="padding: 0 5px;"><img alt="Done" src="images/good.gif" /></td></tr>' . "\n";
270
5bcdee999015
Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
diff
changeset
+ − 144
ob_flush();
256
+ − 145
}
+ − 146
+ − 147
function echo_stage_failure($stage_id, $stage_name, $failure_explanation, $resume_stack)
+ − 148
{
+ − 149
global $neutral_color;
254
+ − 150
global $lang;
256
+ − 151
+ − 152
$neutral_color = ( $neutral_color == 'A' ) ? 'C' : 'A';
+ − 153
echo '<tr><td style="width: 500px; background-color: #' . "FF{$neutral_color}{$neutral_color}{$neutral_color}{$neutral_color}" . '; padding: 0 5px;">' . htmlspecialchars($stage_name) . '</td><td style="padding: 0 5px;"><img alt="Failed" src="images/bad.gif" /></td></tr>' . "\n";
270
5bcdee999015
Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
diff
changeset
+ − 154
ob_flush();
256
+ − 155
close_install_table();
+ − 156
$post_data = '';
+ − 157
$mysql_error = mysql_error();
+ − 158
foreach ( $_POST as $key => $value )
+ − 159
{
269
+ − 160
// FIXME: These should really also be sanitized for double quotes
256
+ − 161
$value = htmlspecialchars($value);
+ − 162
$key = htmlspecialchars($key);
+ − 163
$post_data .= " <input type=\"hidden\" name=\"$key\" value=\"$value\" />\n";
+ − 164
}
+ − 165
echo '<form action="install.php?mode=install&stage=' . $stage_id . '" method="post">
+ − 166
' . $post_data . '
+ − 167
<input type="hidden" name="resume_stack" value="' . htmlspecialchars(implode('|', $resume_stack)) . '" />
254
+ − 168
<h3>' . $lang->get('meta_msg_err_stagefailed_title') . '</h3>
256
+ − 169
<p>' . $failure_explanation . '</p>
254
+ − 170
' . ( !empty($mysql_error) ? "<p>" . $lang->get('meta_msg_err_stagefailed_mysqlerror') . " $mysql_error</p>" : '' ) . '
+ − 171
<p>' . $lang->get('meta_msg_err_stagefailed_body') . '</p>
+ − 172
<p style="text-align: center;"><input type="submit" value="' . $lang->get('meta_btn_retry_installation') . '" /></p>
256
+ − 173
</form>';
+ − 174
global $template, $template_bak;
+ − 175
if ( is_object($template_bak) )
+ − 176
$template_bak->footer();
+ − 177
else
+ − 178
$template->footer();
+ − 179
exit;
+ − 180
}
+ − 181
+ − 182
//
+ − 183
// INSTALLER STAGES
+ − 184
//
+ − 185
+ − 186
function stg_mysql_connect($act_get = false)
+ − 187
{
+ − 188
static $conn = false;
+ − 189
if ( $act_get )
+ − 190
return $conn;
+ − 191
258
+ − 192
$db_user =& $_POST['db_user'];
+ − 193
$db_pass =& $_POST['db_pass'];
+ − 194
$db_name =& $_POST['db_name'];
256
+ − 195
258
+ − 196
if ( !preg_match('/^[a-z0-9_-]+$/', $db_name) )
+ − 197
{
+ − 198
$db_name = htmlspecialchars($db_name);
+ − 199
die("<p>SECURITY: malformed database name \"$db_name\"</p>");
+ − 200
}
256
+ − 201
+ − 202
// First, try to connect using the normal credentials
+ − 203
$conn = @mysql_connect($_POST['db_host'], $_POST['db_user'], $_POST['db_pass']);
+ − 204
if ( !$conn )
+ − 205
{
+ − 206
// Connection failed. Do we have the root username and password?
+ − 207
if ( !empty($_POST['db_root_user']) && !empty($_POST['db_root_pass']) )
+ − 208
{
+ − 209
$conn_root = @mysql_connect($_POST['db_host'], $_POST['db_root_user'], $_POST['db_root_pass']);
+ − 210
if ( !$conn_root )
+ − 211
{
+ − 212
// Couldn't connect using either set of credentials. Bail out.
+ − 213
return false;
+ − 214
}
258
+ − 215
unset($db_user, $db_pass);
+ − 216
$db_user = mysql_real_escape_string($_POST['db_user']);
+ − 217
$db_pass = mysql_real_escape_string($_POST['db_pass']);
256
+ − 218
// Create the user account
+ − 219
$q = @mysql_query("GRANT ALL PRIVILEGES ON test.* TO '{$db_user}'@'localhost' IDENTIFIED BY '$db_pass' WITH GRANT OPTION;", $conn_root);
+ − 220
if ( !$q )
+ − 221
{
+ − 222
return false;
+ − 223
}
+ − 224
// Revoke privileges from test, we don't need them
+ − 225
$q = @mysql_query("REVOKE ALL PRIVILEGES ON test.* FROM '{$db_user}'@'localhost';", $conn_root);
+ − 226
if ( !$q )
+ − 227
{
+ − 228
return false;
+ − 229
}
+ − 230
if ( $_POST['db_host'] != 'localhost' && $_POST['db_host'] != '127.0.0.1' && $_POST['db_host'] != '::1' )
+ − 231
{
+ − 232
// If not connecting to a server running on localhost, allow from any host
+ − 233
// this is safer than trying to detect the hostname of the webserver, but less secure
+ − 234
$q = @mysql_query("GRANT ALL PRIVILEGES ON test.* TO '{$db_user}'@'%' IDENTIFIED BY '$db_pass' WITH GRANT OPTION;", $conn_root);
+ − 235
if ( !$q )
+ − 236
{
+ − 237
return false;
+ − 238
}
+ − 239
// Revoke privileges from test, we don't need them
+ − 240
$q = @mysql_query("REVOKE ALL PRIVILEGES ON test.* FROM '{$db_user}'@'%';", $conn_root);
+ − 241
if ( !$q )
+ − 242
{
+ − 243
return false;
+ − 244
}
+ − 245
}
258
+ − 246
mysql_close($conn_root);
+ − 247
$conn = @mysql_connect($_POST['db_host'], $_POST['db_user'], $_POST['db_pass']);
+ − 248
if ( !$conn )
+ − 249
{
+ − 250
// This should honestly never happen.
+ − 251
return false;
+ − 252
}
256
+ − 253
}
+ − 254
}
258
+ − 255
$q = @mysql_query("USE `$db_name`;", $conn);
256
+ − 256
if ( !$q )
+ − 257
{
+ − 258
// access denied to the database; try the whole root schenanegan again
+ − 259
if ( !empty($_POST['db_root_user']) && !empty($_POST['db_root_pass']) )
+ − 260
{
+ − 261
$conn_root = @mysql_connect($_POST['db_host'], $_POST['db_root_user'], $_POST['db_root_pass']);
+ − 262
if ( !$conn_root )
+ − 263
{
+ − 264
// Couldn't connect as root; bail out
+ − 265
return false;
+ − 266
}
+ − 267
// create the database, if it doesn't exist
258
+ − 268
$q = @mysql_query("CREATE DATABASE IF NOT EXISTS `$db_name`;", $conn_root);
256
+ − 269
if ( !$q )
+ − 270
{
+ − 271
// this really should never fail, so don't give any tolerance to it
+ − 272
return false;
+ − 273
}
258
+ − 274
unset($db_user, $db_pass);
+ − 275
$db_user = mysql_real_escape_string($_POST['db_user']);
+ − 276
$db_pass = mysql_real_escape_string($_POST['db_pass']);
256
+ − 277
// we're in with root rights; grant access to the database
258
+ − 278
$q = @mysql_query("GRANT ALL PRIVILEGES ON `$db_name`.* TO '{$db_user}'@'localhost';", $conn_root);
256
+ − 279
if ( !$q )
+ − 280
{
+ − 281
return false;
+ − 282
}
+ − 283
if ( $_POST['db_host'] != 'localhost' && $_POST['db_host'] != '127.0.0.1' && $_POST['db_host'] != '::1' )
+ − 284
{
258
+ − 285
$q = @mysql_query("GRANT ALL PRIVILEGES ON `$db_name`.* TO '{$db_user}'@'%';", $conn_root);
256
+ − 286
if ( !$q )
+ − 287
{
+ − 288
return false;
+ − 289
}
+ − 290
}
258
+ − 291
mysql_close($conn_root);
+ − 292
// grant tables have hopefully been flushed, kill and reconnect our regular user connection
+ − 293
mysql_close($conn);
+ − 294
$conn = @mysql_connect($_POST['db_host'], $_POST['db_user'], $_POST['db_pass']);
+ − 295
if ( !$conn )
+ − 296
{
+ − 297
return false;
+ − 298
}
256
+ − 299
}
+ − 300
else
+ − 301
{
+ − 302
return false;
+ − 303
}
+ − 304
// try again
258
+ − 305
$q = @mysql_query("USE `$db_name`;", $conn);
256
+ − 306
if ( !$q )
+ − 307
{
+ − 308
// really failed this time; bail out
+ − 309
return false;
+ − 310
}
+ − 311
}
+ − 312
// connected and database exists
+ − 313
return true;
+ − 314
}
+ − 315
+ − 316
function stg_drop_tables()
+ − 317
{
+ − 318
$conn = stg_mysql_connect(true);
+ − 319
if ( !$conn )
+ − 320
return false;
+ − 321
// Our list of tables included in Enano
272
e0ec986c0af3
Searching sucks, and Enano's search algorithm was complete bullcrap. So I rewrote it. No, it does not use Google search technology. Like they have a patent for using the Arial font on search result pages anyway.
Dan
diff
changeset
+ − 322
$tables = Array( 'categories', 'comments', 'config', 'logs', 'page_text', 'session_keys', 'pages', 'users', 'users_extra', 'themes', 'buddies', 'banlist', 'files', 'privmsgs', 'sidebar', 'hits', 'search_index', 'groups', 'group_members', 'acl', 'tags', 'page_groups', 'page_group_members' );
256
+ − 323
+ − 324
// Drop each table individually; if it fails, it probably means we're trying to drop a
+ − 325
// table that didn't exist in the Enano version we're deleting the database for.
+ − 326
foreach ( $tables as $table )
+ − 327
{
+ − 328
// Remember that table_prefix is sanitized.
+ − 329
$table = "{$_POST['table_prefix']}$table";
+ − 330
@mysql_query("DROP TABLE $table;", $conn);
+ − 331
}
+ − 332
return true;
+ − 333
}
+ − 334
+ − 335
function stg_decrypt_admin_pass($act_get = false)
+ − 336
{
+ − 337
static $decrypted_pass = false;
+ − 338
if ( $act_get )
+ − 339
return $decrypted_pass;
+ − 340
+ − 341
$aes = new AESCrypt(AES_BITS, AES_BLOCKSIZE);
+ − 342
+ − 343
if ( !empty($_POST['crypt_data']) )
+ − 344
{
+ − 345
require('config.new.php');
+ − 346
if ( !isset($cryptkey) )
+ − 347
{
+ − 348
return false;
+ − 349
}
+ − 350
define('_INSTRESUME_AES_KEYBACKUP', $key);
+ − 351
$key = hexdecode($cryptkey);
+ − 352
+ − 353
$decrypted_pass = $aes->decrypt($_POST['crypt_data'], $key, ENC_HEX);
+ − 354
+ − 355
}
+ − 356
else
+ − 357
{
+ − 358
$decrypted_pass = $_POST['admin_pass'];
+ − 359
}
+ − 360
if ( empty($decrypted_pass) )
+ − 361
return false;
+ − 362
return true;
+ − 363
}
+ − 364
+ − 365
function stg_generate_aes_key($act_get = false)
+ − 366
{
+ − 367
static $key = false;
+ − 368
if ( $act_get )
+ − 369
return $key;
+ − 370
+ − 371
$aes = new AESCrypt(AES_BITS, AES_BLOCKSIZE);
+ − 372
$key = $aes->gen_readymade_key();
+ − 373
return true;
+ − 374
}
+ − 375
+ − 376
function stg_parse_schema($act_get = false)
+ − 377
{
+ − 378
static $schema;
+ − 379
if ( $act_get )
+ − 380
return $schema;
+ − 381
+ − 382
$admin_pass = stg_decrypt_admin_pass(true);
+ − 383
$key = stg_generate_aes_key(true);
+ − 384
$aes = new AESCrypt(AES_BITS, AES_BLOCKSIZE);
+ − 385
$key = $aes->hextostring($key);
+ − 386
$admin_pass = $aes->encrypt($admin_pass, $key, ENC_HEX);
+ − 387
+ − 388
$cacheonoff = is_writable(ENANO_ROOT.'/cache/') ? '1' : '0';
+ − 389
270
5bcdee999015
Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
diff
changeset
+ − 390
$admin_user = $_POST['admin_user'];
5bcdee999015
Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
diff
changeset
+ − 391
$admin_user = str_replace('_', ' ', $admin_user);
5bcdee999015
Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
diff
changeset
+ − 392
$admin_user = mysql_real_escape_string($admin_user);
5bcdee999015
Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
diff
changeset
+ − 393
256
+ − 394
$schema = file_get_contents('schema.sql');
+ − 395
$schema = str_replace('{{SITE_NAME}}', mysql_real_escape_string($_POST['sitename'] ), $schema);
+ − 396
$schema = str_replace('{{SITE_DESC}}', mysql_real_escape_string($_POST['sitedesc'] ), $schema);
+ − 397
$schema = str_replace('{{COPYRIGHT}}', mysql_real_escape_string($_POST['copyright'] ), $schema);
270
5bcdee999015
Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
diff
changeset
+ − 398
$schema = str_replace('{{ADMIN_USER}}', $admin_user , $schema);
256
+ − 399
$schema = str_replace('{{ADMIN_PASS}}', mysql_real_escape_string($admin_pass ), $schema);
+ − 400
$schema = str_replace('{{ADMIN_EMAIL}}', mysql_real_escape_string($_POST['admin_email']), $schema);
+ − 401
$schema = str_replace('{{ENABLE_CACHE}}', mysql_real_escape_string($cacheonoff ), $schema);
+ − 402
$schema = str_replace('{{REAL_NAME}}', '', $schema);
+ − 403
$schema = str_replace('{{TABLE_PREFIX}}', $_POST['table_prefix'], $schema);
+ − 404
$schema = str_replace('{{VERSION}}', ENANO_VERSION, $schema);
+ − 405
$schema = str_replace('{{ADMIN_EMBED_PHP}}', $_POST['admin_embed_php'], $schema);
+ − 406
// Not anymore!! :-D
+ − 407
// $schema = str_replace('{{BETA_VERSION}}', ENANO_BETA_VERSION, $schema);
+ − 408
+ − 409
if(isset($_POST['wiki_mode']))
+ − 410
{
+ − 411
$schema = str_replace('{{WIKI_MODE}}', '1', $schema);
+ − 412
}
+ − 413
else
+ − 414
{
+ − 415
$schema = str_replace('{{WIKI_MODE}}', '0', $schema);
+ − 416
}
+ − 417
+ − 418
// Build an array of queries
+ − 419
$schema = explode("\n", $schema);
+ − 420
+ − 421
foreach ( $schema as $i => $sql )
+ − 422
{
+ − 423
$query =& $schema[$i];
+ − 424
$t = trim($query);
+ − 425
if ( empty($t) || preg_match('/^(\#|--)/i', $t) )
+ − 426
{
+ − 427
unset($schema[$i]);
+ − 428
unset($query);
+ − 429
}
+ − 430
}
+ − 431
+ − 432
$schema = array_values($schema);
+ − 433
$schema = implode("\n", $schema);
+ − 434
$schema = explode(";\n", $schema);
+ − 435
+ − 436
foreach ( $schema as $i => $sql )
+ − 437
{
+ − 438
$query =& $schema[$i];
+ − 439
if ( substr($query, ( strlen($query) - 1 ), 1 ) != ';' )
+ − 440
{
+ − 441
$query .= ';';
+ − 442
}
+ − 443
}
+ − 444
+ − 445
return true;
+ − 446
}
+ − 447
+ − 448
function stg_install($_unused, $already_run)
+ − 449
{
+ − 450
// This one's pretty easy.
+ − 451
$conn = stg_mysql_connect(true);
+ − 452
if ( !is_resource($conn) )
+ − 453
return false;
+ − 454
$schema = stg_parse_schema(true);
+ − 455
if ( !is_array($schema) )
+ − 456
return false;
+ − 457
+ − 458
// If we're resuming installation, the encryption key was regenerated.
+ − 459
// This means we'll have to update the encrypted password in the database.
+ − 460
if ( $already_run )
+ − 461
{
+ − 462
$admin_pass = stg_decrypt_admin_pass(true);
+ − 463
$key = stg_generate_aes_key(true);
+ − 464
$aes = new AESCrypt(AES_BITS, AES_BLOCKSIZE);
+ − 465
$key = $aes->hextostring($key);
+ − 466
$admin_pass = $aes->encrypt($admin_pass, $key, ENC_HEX);
+ − 467
$admin_user = mysql_real_escape_string($_POST['admin_user']);
270
5bcdee999015
Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
diff
changeset
+ − 468
$admin_user = str_replace('_', ' ', $admin_user);
256
+ − 469
+ − 470
$q = @mysql_query("UPDATE {$_POST['table_prefix']}users SET password='$admin_pass' WHERE username='$admin_user';");
+ − 471
if ( !$q )
+ − 472
{
+ − 473
echo '<p><tt>MySQL return: ' . mysql_error() . '</tt></p>';
+ − 474
return false;
+ − 475
}
+ − 476
+ − 477
return true;
+ − 478
}
+ − 479
+ − 480
// OK, do the loop, baby!!!
+ − 481
foreach($schema as $q)
+ − 482
{
+ − 483
$r = mysql_query($q, $conn);
+ − 484
if ( !$r )
+ − 485
{
+ − 486
echo '<p><tt>MySQL return: ' . mysql_error() . '</tt></p>';
+ − 487
return false;
+ − 488
}
+ − 489
}
+ − 490
+ − 491
return true;
+ − 492
}
+ − 493
+ − 494
function stg_write_config()
+ − 495
{
+ − 496
$privkey = stg_generate_aes_key(true);
+ − 497
+ − 498
switch($_POST['urlscheme'])
+ − 499
{
+ − 500
case "ugly":
+ − 501
default:
+ − 502
$cp = scriptPath.'/index.php?title=';
+ − 503
break;
+ − 504
case "short":
+ − 505
$cp = scriptPath.'/index.php/';
+ − 506
break;
+ − 507
case "tiny":
+ − 508
$cp = scriptPath.'/';
+ − 509
break;
+ − 510
}
+ − 511
+ − 512
if ( $_POST['urlscheme'] == 'tiny' )
+ − 513
{
+ − 514
$contents = '# Begin Enano rules
+ − 515
RewriteEngine on
+ − 516
RewriteCond %{REQUEST_FILENAME} !-d
+ − 517
RewriteCond %{REQUEST_FILENAME} !-f
+ − 518
RewriteRule ^(.+) '.scriptPath.'/index.php?title=$1 [L,QSA]
+ − 519
RewriteRule \.(php|html|gif|jpg|png|css|js)$ - [L]
+ − 520
# End Enano rules
+ − 521
';
+ − 522
if ( file_exists('./.htaccess') )
+ − 523
$ht = fopen(ENANO_ROOT.'/.htaccess', 'a+');
+ − 524
else
+ − 525
$ht = fopen(ENANO_ROOT.'/.htaccess.new', 'w');
+ − 526
if ( !$ht )
+ − 527
return false;
+ − 528
fwrite($ht, $contents);
+ − 529
fclose($ht);
+ − 530
}
+ − 531
+ − 532
$config_file = '<?php
+ − 533
/* Enano auto-generated configuration file - editing not recommended! */
+ − 534
$dbhost = \''.addslashes($_POST['db_host']).'\';
+ − 535
$dbname = \''.addslashes($_POST['db_name']).'\';
+ − 536
$dbuser = \''.addslashes($_POST['db_user']).'\';
+ − 537
$dbpasswd = \''.addslashes($_POST['db_pass']).'\';
+ − 538
if ( !defined(\'ENANO_CONSTANTS\') )
+ − 539
{
+ − 540
define(\'ENANO_CONSTANTS\', \'\');
+ − 541
define(\'table_prefix\', \''.addslashes($_POST['table_prefix']).'\');
+ − 542
define(\'scriptPath\', \''.scriptPath.'\');
+ − 543
define(\'contentPath\', \''.$cp.'\');
+ − 544
define(\'ENANO_INSTALLED\', \'true\');
+ − 545
}
+ − 546
$crypto_key = \''.$privkey.'\';
+ − 547
?>';
+ − 548
+ − 549
$cf_handle = fopen(ENANO_ROOT.'/config.new.php', 'w');
+ − 550
if ( !$cf_handle )
+ − 551
return false;
+ − 552
fwrite($cf_handle, $config_file);
+ − 553
+ − 554
fclose($cf_handle);
+ − 555
+ − 556
return true;
+ − 557
}
+ − 558
+ − 559
function _stg_rename_config_revert()
+ − 560
{
+ − 561
if ( file_exists('./config.php') )
+ − 562
{
+ − 563
@rename('./config.php', './config.new.php');
+ − 564
}
+ − 565
+ − 566
$handle = @fopen('./config.php.new', 'w');
+ − 567
if ( !$handle )
+ − 568
return false;
+ − 569
$contents = '<?php $cryptkey = \'' . _INSTRESUME_AES_KEYBACKUP . '\'; ?>';
+ − 570
fwrite($handle, $contents);
+ − 571
fclose($handle);
+ − 572
return true;
+ − 573
}
+ − 574
272
e0ec986c0af3
Searching sucks, and Enano's search algorithm was complete bullcrap. So I rewrote it. No, it does not use Google search technology. Like they have a patent for using the Arial font on search result pages anyway.
Dan
diff
changeset
+ − 575
function stg_build_index()
e0ec986c0af3
Searching sucks, and Enano's search algorithm was complete bullcrap. So I rewrote it. No, it does not use Google search technology. Like they have a patent for using the Arial font on search result pages anyway.
Dan
diff
changeset
+ − 576
{
e0ec986c0af3
Searching sucks, and Enano's search algorithm was complete bullcrap. So I rewrote it. No, it does not use Google search technology. Like they have a patent for using the Arial font on search result pages anyway.
Dan
diff
changeset
+ − 577
global $db, $session, $paths, $template, $plugins; // Common objects;
e0ec986c0af3
Searching sucks, and Enano's search algorithm was complete bullcrap. So I rewrote it. No, it does not use Google search technology. Like they have a patent for using the Arial font on search result pages anyway.
Dan
diff
changeset
+ − 578
if ( $paths->rebuild_search_index() )
e0ec986c0af3
Searching sucks, and Enano's search algorithm was complete bullcrap. So I rewrote it. No, it does not use Google search technology. Like they have a patent for using the Arial font on search result pages anyway.
Dan
diff
changeset
+ − 579
return true;
e0ec986c0af3
Searching sucks, and Enano's search algorithm was complete bullcrap. So I rewrote it. No, it does not use Google search technology. Like they have a patent for using the Arial font on search result pages anyway.
Dan
diff
changeset
+ − 580
return false;
e0ec986c0af3
Searching sucks, and Enano's search algorithm was complete bullcrap. So I rewrote it. No, it does not use Google search technology. Like they have a patent for using the Arial font on search result pages anyway.
Dan
diff
changeset
+ − 581
}
e0ec986c0af3
Searching sucks, and Enano's search algorithm was complete bullcrap. So I rewrote it. No, it does not use Google search technology. Like they have a patent for using the Arial font on search result pages anyway.
Dan
diff
changeset
+ − 582
256
+ − 583
function stg_rename_config()
+ − 584
{
+ − 585
if ( !@rename('./config.new.php', './config.php') )
+ − 586
{
+ − 587
echo '<p>Can\'t rename config.php</p>';
+ − 588
_stg_rename_config_revert();
+ − 589
return false;
+ − 590
}
+ − 591
+ − 592
if ( $_POST['urlscheme'] == 'tiny' && !file_exists('./.htaccess') )
+ − 593
{
+ − 594
if ( !@rename('./.htaccess.new', './.htaccess') )
+ − 595
{
+ − 596
echo '<p>Can\'t rename .htaccess</p>';
+ − 597
_stg_rename_config_revert();
+ − 598
return false;
+ − 599
}
+ − 600
}
+ − 601
return true;
+ − 602
}
+ − 603
+ − 604
function stg_start_api_success()
+ − 605
{
+ − 606
return true;
+ − 607
}
+ − 608
+ − 609
function stg_start_api_failure()
+ − 610
{
+ − 611
return false;
+ − 612
}
+ − 613
240
f0149a27df5f
Localized default sidebar; installer should work now including the lang import; l10n in installer to follow
Dan
diff
changeset
+ − 614
function stg_import_language()
f0149a27df5f
Localized default sidebar; installer should work now including the lang import; l10n in installer to follow
Dan
diff
changeset
+ − 615
{
f0149a27df5f
Localized default sidebar; installer should work now including the lang import; l10n in installer to follow
Dan
diff
changeset
+ − 616
global $db, $session, $paths, $template, $plugins; // Common objects
f0149a27df5f
Localized default sidebar; installer should work now including the lang import; l10n in installer to follow
Dan
diff
changeset
+ − 617
f0149a27df5f
Localized default sidebar; installer should work now including the lang import; l10n in installer to follow
Dan
diff
changeset
+ − 618
$lang_file = ENANO_ROOT . "/language/english/enano.json";
f0149a27df5f
Localized default sidebar; installer should work now including the lang import; l10n in installer to follow
Dan
diff
changeset
+ − 619
install_language("eng", "English", "English", $lang_file);
f0149a27df5f
Localized default sidebar; installer should work now including the lang import; l10n in installer to follow
Dan
diff
changeset
+ − 620
f0149a27df5f
Localized default sidebar; installer should work now including the lang import; l10n in installer to follow
Dan
diff
changeset
+ − 621
return true;
f0149a27df5f
Localized default sidebar; installer should work now including the lang import; l10n in installer to follow
Dan
diff
changeset
+ − 622
}
f0149a27df5f
Localized default sidebar; installer should work now including the lang import; l10n in installer to follow
Dan
diff
changeset
+ − 623
256
+ − 624
function stg_init_logs()
+ − 625
{
+ − 626
global $db, $session, $paths, $template, $plugins; // Common objects
+ − 627
+ − 628
$q = $db->sql_query('INSERT INTO ' . table_prefix . 'logs(log_type,action,time_id,date_string,author,page_text,edit_summary) VALUES(\'security\', \'install_enano\', ' . time() . ', \'' . date('d M Y h:i a') . '\', \'' . mysql_real_escape_string($_POST['admin_user']) . '\', \'' . mysql_real_escape_string(ENANO_VERSION) . '\', \'' . mysql_real_escape_string($_SERVER['REMOTE_ADDR']) . '\');');
+ − 629
if ( !$q )
+ − 630
{
+ − 631
echo '<p><tt>MySQL return: ' . mysql_error() . '</tt></p>';
+ − 632
return false;
+ − 633
}
+ − 634
+ − 635
if ( !$session->get_permissions('clear_logs') )
+ − 636
{
+ − 637
echo '<p><tt>$session: denied clear_logs</tt></p>';
+ − 638
return false;
+ − 639
}
+ − 640
+ − 641
PageUtils::flushlogs('Main_Page', 'Article');
+ − 642
+ − 643
return true;
+ − 644
}
+ − 645
+ − 646
//die('Key size: ' . AES_BITS . '<br />Block size: ' . AES_BLOCKSIZE);
+ − 647
+ − 648
if(!function_exists('wikiFormat'))
+ − 649
{
+ − 650
function wikiFormat($message, $filter_links = true)
+ − 651
{
+ − 652
$wiki = & Text_Wiki::singleton('Mediawiki');
+ − 653
$wiki->setRenderConf('Xhtml', 'code', 'css_filename', 'codefilename');
+ − 654
$wiki->setRenderConf('Xhtml', 'wikilink', 'view_url', contentPath);
+ − 655
$result = $wiki->transform($message, 'Xhtml');
+ − 656
+ − 657
// HTML fixes
+ − 658
$result = preg_replace('#<tr>([\s]*?)<\/tr>#is', '', $result);
+ − 659
$result = preg_replace('#<p>([\s]*?)<\/p>#is', '', $result);
+ − 660
$result = preg_replace('#<br />([\s]*?)<table#is', '<table', $result);
+ − 661
+ − 662
return $result;
+ − 663
}
+ − 664
}
+ − 665
+ − 666
global $failed, $warned;
+ − 667
+ − 668
$failed = false;
+ − 669
$warned = false;
+ − 670
+ − 671
function not($var)
+ − 672
{
+ − 673
if($var)
+ − 674
{
+ − 675
return false;
+ − 676
}
+ − 677
else
+ − 678
{
+ − 679
return true;
+ − 680
}
+ − 681
}
+ − 682
+ − 683
function run_test($code, $desc, $extended_desc, $warn = false)
+ − 684
{
+ − 685
global $failed, $warned;
+ − 686
static $cv = true;
+ − 687
$cv = not($cv);
+ − 688
$val = eval($code);
+ − 689
if($val)
+ − 690
{
+ − 691
if($cv) $color='CCFFCC'; else $color='AAFFAA';
243
+ − 692
echo "<tr><td style='background-color: #$color; width: 500px; padding: 5px;'>$desc</td><td style='padding-left: 10px;'><img alt='Test passed' src='images/good.gif' /></td></tr>";
256
+ − 693
} elseif(!$val && $warn) {
+ − 694
if($cv) $color='FFFFCC'; else $color='FFFFAA';
243
+ − 695
echo "<tr><td style='background-color: #$color; width: 500px; padding: 5px;'>$desc<br /><b>$extended_desc</b></td><td style='padding-left: 10px;'><img alt='Test passed with warning' src='images/unknown.gif' /></td></tr>";
256
+ − 696
$warned = true;
+ − 697
} else {
+ − 698
if($cv) $color='FFCCCC'; else $color='FFAAAA';
243
+ − 699
echo "<tr><td style='background-color: #$color; width: 500px; padding: 5px;'>$desc<br /><b>$extended_desc</b></td><td style='padding-left: 10px;'><img alt='Test failed' src='images/bad.gif' /></td></tr>";
256
+ − 700
$failed = true;
+ − 701
}
+ − 702
}
+ − 703
function is_apache() { $r = strstr($_SERVER['SERVER_SOFTWARE'], 'Apache') ? true : false; return $r; }
+ − 704
276
acfdccf7a2bf
Re-sync Oxygen and Mint and Oxygen simple with Oxygen main; a couple improvements to the redirect-on-no-config code
Dan
diff
changeset
+ − 705
function show_license($fb = false)
acfdccf7a2bf
Re-sync Oxygen and Mint and Oxygen simple with Oxygen main; a couple improvements to the redirect-on-no-config code
Dan
diff
changeset
+ − 706
{
acfdccf7a2bf
Re-sync Oxygen and Mint and Oxygen simple with Oxygen main; a couple improvements to the redirect-on-no-config code
Dan
diff
changeset
+ − 707
?>
acfdccf7a2bf
Re-sync Oxygen and Mint and Oxygen simple with Oxygen main; a couple improvements to the redirect-on-no-config code
Dan
diff
changeset
+ − 708
<div style="height: 500px; clip: rect(0px,auto,500px,auto); overflow: auto; padding: 10px; border: 1px dashed #456798; margin: 1em;">
279
+ − 709
<?php
+ − 710
if ( !file_exists('./GPL') || !file_exists('./language/english/install/license-deed.html') )
+ − 711
{
+ − 712
echo 'Cannot find the license files.';
+ − 713
}
+ − 714
echo file_get_contents('./language/english/install/license-deed.html');
+ − 715
if ( defined('ENANO_BETA_VERSION') || $branch == 'unstable' )
+ − 716
{
+ − 717
?>
+ − 718
<h3><?php echo $lang->get('license_info_unstable_title'); ?></h3>
+ − 719
<p><?php echo $lang->get('license_info_unstable_body'); ?></p>
+ − 720
<?php
+ − 721
}
+ − 722
?>
+ − 723
<h3><?php echo $lang->get('license_section_gpl_heading'); ?></h3>
+ − 724
<?php if ( $lang->lang_code != 'eng' ): ?>
+ − 725
<p><i><?php echo $lang->get('license_gpl_blurb_inenglish'); ?></i></p>
+ − 726
<?php endif; ?>
+ − 727
<?php echo wikiFormat(file_get_contents(ENANO_ROOT . '/GPL')); ?>
276
acfdccf7a2bf
Re-sync Oxygen and Mint and Oxygen simple with Oxygen main; a couple improvements to the redirect-on-no-config code
Dan
diff
changeset
+ − 728
<?php
acfdccf7a2bf
Re-sync Oxygen and Mint and Oxygen simple with Oxygen main; a couple improvements to the redirect-on-no-config code
Dan
diff
changeset
+ − 729
global $template;
acfdccf7a2bf
Re-sync Oxygen and Mint and Oxygen simple with Oxygen main; a couple improvements to the redirect-on-no-config code
Dan
diff
changeset
+ − 730
if ( $fb )
acfdccf7a2bf
Re-sync Oxygen and Mint and Oxygen simple with Oxygen main; a couple improvements to the redirect-on-no-config code
Dan
diff
changeset
+ − 731
{
acfdccf7a2bf
Re-sync Oxygen and Mint and Oxygen simple with Oxygen main; a couple improvements to the redirect-on-no-config code
Dan
diff
changeset
+ − 732
echo '<p style="text-align: center;">Because I could never find the Create a Page button in PHP-Nuke.</p>';
acfdccf7a2bf
Re-sync Oxygen and Mint and Oxygen simple with Oxygen main; a couple improvements to the redirect-on-no-config code
Dan
diff
changeset
+ − 733
echo '<p>' . str_replace('http://enanocms.org/', 'http://www.2robots.com/2003/10/15/web-portals-suck/', $template->fading_button) . '</p>';
acfdccf7a2bf
Re-sync Oxygen and Mint and Oxygen simple with Oxygen main; a couple improvements to the redirect-on-no-config code
Dan
diff
changeset
+ − 734
echo '<p style="text-align: center;">It\'s not a portal, my friends.</p>';
acfdccf7a2bf
Re-sync Oxygen and Mint and Oxygen simple with Oxygen main; a couple improvements to the redirect-on-no-config code
Dan
diff
changeset
+ − 735
}
acfdccf7a2bf
Re-sync Oxygen and Mint and Oxygen simple with Oxygen main; a couple improvements to the redirect-on-no-config code
Dan
diff
changeset
+ − 736
?>
acfdccf7a2bf
Re-sync Oxygen and Mint and Oxygen simple with Oxygen main; a couple improvements to the redirect-on-no-config code
Dan
diff
changeset
+ − 737
</div>
acfdccf7a2bf
Re-sync Oxygen and Mint and Oxygen simple with Oxygen main; a couple improvements to the redirect-on-no-config code
Dan
diff
changeset
+ − 738
<?php
acfdccf7a2bf
Re-sync Oxygen and Mint and Oxygen simple with Oxygen main; a couple improvements to the redirect-on-no-config code
Dan
diff
changeset
+ − 739
}
acfdccf7a2bf
Re-sync Oxygen and Mint and Oxygen simple with Oxygen main; a couple improvements to the redirect-on-no-config code
Dan
diff
changeset
+ − 740
256
+ − 741
require_once('includes/template.php');
+ − 742
279
+ − 743
if(!isset($_GET['mode']))
+ − 744
{
243
+ − 745
$_GET['mode'] = 'welcome';
279
+ − 746
}
256
+ − 747
switch($_GET['mode'])
+ − 748
{
+ − 749
case 'mysql_test':
+ − 750
error_reporting(0);
+ − 751
$dbhost = rawurldecode($_POST['host']);
+ − 752
$dbname = rawurldecode($_POST['name']);
+ − 753
$dbuser = rawurldecode($_POST['user']);
+ − 754
$dbpass = rawurldecode($_POST['pass']);
+ − 755
$dbrootuser = rawurldecode($_POST['root_user']);
+ − 756
$dbrootpass = rawurldecode($_POST['root_pass']);
+ − 757
if($dbrootuser != '')
+ − 758
{
+ − 759
$conn = mysql_connect($dbhost, $dbrootuser, $dbrootpass);
+ − 760
if(!$conn)
+ − 761
{
+ − 762
$e = mysql_error();
+ − 763
if(strstr($e, "Lost connection"))
+ − 764
die('host'.$e);
+ − 765
else
+ − 766
die('root'.$e);
+ − 767
}
+ − 768
$rsp = 'good';
257
+ − 769
$q = mysql_query('USE `' . mysql_real_escape_string($dbname) . '`;', $conn);
256
+ − 770
if(!$q)
+ − 771
{
+ − 772
$e = mysql_error();
+ − 773
if(strstr($e, 'Unknown database'))
+ − 774
{
+ − 775
$rsp .= '_creating_db';
+ − 776
}
+ − 777
}
+ − 778
mysql_close($conn);
+ − 779
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
+ − 780
if(!$conn)
+ − 781
{
+ − 782
$e = mysql_error();
+ − 783
if(strstr($e, "Lost connection"))
+ − 784
die('host'.$e);
+ − 785
else
+ − 786
$rsp .= '_creating_user';
+ − 787
}
+ − 788
mysql_close($conn);
+ − 789
die($rsp);
+ − 790
}
+ − 791
else
+ − 792
{
+ − 793
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
+ − 794
if(!$conn)
+ − 795
{
+ − 796
$e = mysql_error();
+ − 797
if(strstr($e, "Lost connection"))
+ − 798
die('host'.$e);
+ − 799
else
+ − 800
die('auth'.$e);
+ − 801
}
257
+ − 802
$q = mysql_query('USE `' . mysql_real_escape_string($dbname) . '`;', $conn);
256
+ − 803
if(!$q)
+ − 804
{
+ − 805
$e = mysql_error();
+ − 806
if(strstr($e, 'Unknown database'))
+ − 807
{
+ − 808
die('name'.$e);
+ − 809
}
+ − 810
else
+ − 811
{
+ − 812
die('perm'.$e);
+ − 813
}
+ − 814
}
+ − 815
}
+ − 816
$v = mysql_get_server_info();
+ − 817
if(version_compare($v, '4.1.17', '<')) die('vers'.$v);
+ − 818
mysql_close($conn);
+ − 819
die('good');
+ − 820
break;
+ − 821
case 'pophelp':
+ − 822
$topic = ( isset($_GET['topic']) ) ? $_GET['topic'] : 'invalid';
+ − 823
switch($topic)
+ − 824
{
+ − 825
case 'admin_embed_php':
249
+ − 826
$title = $lang->get('pophelp_admin_embed_php_title');
+ − 827
$content = $lang->get('pophelp_admin_embed_php_body');
256
+ − 828
break;
+ − 829
default:
+ − 830
$title = 'Invalid topic';
+ − 831
$content = 'Invalid help topic.';
+ − 832
break;
+ − 833
}
249
+ − 834
$close_window = $lang->get('pophelp_btn_close_window');
256
+ − 835
echo <<<EOF
+ − 836
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+ − 837
<html>
+ − 838
<head>
+ − 839
<title>Enano installation quick help • {$title}</title>
+ − 840
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
+ − 841
<style type="text/css">
+ − 842
body {
+ − 843
font-family: trebuchet ms, verdana, arial, helvetica, sans-serif;
+ − 844
font-size: 9pt;
+ − 845
}
+ − 846
h2 { border-bottom: 1px solid #90B0D0; margin-bottom: 0; }
+ − 847
h3 { font-size: 11pt; font-weight: bold; }
+ − 848
li { list-style: url(../images/bullet.gif); }
+ − 849
p { margin: 1.0em; }
+ − 850
blockquote { background-color: #F4F4F4; border: 1px dotted #406080; margin: 1em; padding: 10px; max-height: 250px; overflow: auto; }
+ − 851
a { color: #7090B0; }
+ − 852
a:hover { color: #90B0D0; }
+ − 853
</style>
+ − 854
</head>
+ − 855
<body>
+ − 856
<h2>{$title}</h2>
+ − 857
{$content}
+ − 858
<p style="text-align: right;">
249
+ − 859
<a href="#" onclick="window.close(); return false;">{$close_window}</a>
256
+ − 860
</p>
+ − 861
</body>
+ − 862
</html>
+ − 863
EOF;
+ − 864
exit;
+ − 865
break;
243
+ − 866
case 'langjs':
+ − 867
header('Content-type: text/javascript');
+ − 868
$json = new Services_JSON(SERVICES_JSON_LOOSE_TYPE);
+ − 869
$lang_js = $json->encode($lang->strings);
+ − 870
// use EEOF here because jEdit misinterprets "typ'eof'"
+ − 871
echo <<<EEOF
+ − 872
if ( typeof(enano_lang) != 'object' )
+ − 873
var enano_lang = new Object();
+ − 874
+ − 875
enano_lang[1] = $lang_js;
+ − 876
+ − 877
EEOF;
+ − 878
exit;
+ − 879
break;
256
+ − 880
default:
+ − 881
break;
+ − 882
}
+ − 883
+ − 884
$template = new template_nodb();
204
473cc747022a
You know what folks, a lot of Mercurial merges failed, and I just now figured out why. So now all changes from stable are permanently synced in.
Dan
diff
changeset
+ − 885
$template->load_theme('stpatty', 'shamrock', false);
256
+ − 886
+ − 887
$modestrings = Array(
243
+ − 888
'welcome' => $lang->get('welcome_modetitle'),
+ − 889
'license' => $lang->get('license_modetitle'),
+ − 890
'sysreqs' => $lang->get('sysreqs_modetitle'),
+ − 891
'database'=> $lang->get('database_modetitle'),
+ − 892
'website' => $lang->get('website_modetitle'),
+ − 893
'login' => $lang->get('login_modetitle'),
+ − 894
'confirm' => $lang->get('confirm_modetitle'),
+ − 895
'install' => $lang->get('install_modetitle'),
280
+ − 896
'finish' => $lang->get('finish_modetitle'),
276
acfdccf7a2bf
Re-sync Oxygen and Mint and Oxygen simple with Oxygen main; a couple improvements to the redirect-on-no-config code
Dan
diff
changeset
+ − 897
'_hiddenstages' => '...', // all stages below this line are hidden
279
+ − 898
'showlicense' => $lang->get('license_modetitle')
256
+ − 899
);
+ − 900
+ − 901
$sideinfo = '';
+ − 902
$vars = $template->extract_vars('elements.tpl');
+ − 903
$p = $template->makeParserText($vars['sidebar_button']);
276
acfdccf7a2bf
Re-sync Oxygen and Mint and Oxygen simple with Oxygen main; a couple improvements to the redirect-on-no-config code
Dan
diff
changeset
+ − 904
$hidden = false;
256
+ − 905
foreach ( $modestrings as $id => $str )
+ − 906
{
+ − 907
if ( $_GET['mode'] == $id )
+ − 908
{
+ − 909
$flags = 'style="font-weight: bold; text-decoration: underline;"';
+ − 910
$this_page = $str;
+ − 911
}
+ − 912
else
+ − 913
{
+ − 914
$flags = '';
+ − 915
}
276
acfdccf7a2bf
Re-sync Oxygen and Mint and Oxygen simple with Oxygen main; a couple improvements to the redirect-on-no-config code
Dan
diff
changeset
+ − 916
if ( $id == '_hiddenstages' )
acfdccf7a2bf
Re-sync Oxygen and Mint and Oxygen simple with Oxygen main; a couple improvements to the redirect-on-no-config code
Dan
diff
changeset
+ − 917
$hidden = true;
acfdccf7a2bf
Re-sync Oxygen and Mint and Oxygen simple with Oxygen main; a couple improvements to the redirect-on-no-config code
Dan
diff
changeset
+ − 918
if ( !$hidden )
acfdccf7a2bf
Re-sync Oxygen and Mint and Oxygen simple with Oxygen main; a couple improvements to the redirect-on-no-config code
Dan
diff
changeset
+ − 919
{
acfdccf7a2bf
Re-sync Oxygen and Mint and Oxygen simple with Oxygen main; a couple improvements to the redirect-on-no-config code
Dan
diff
changeset
+ − 920
$p->assign_vars(Array(
acfdccf7a2bf
Re-sync Oxygen and Mint and Oxygen simple with Oxygen main; a couple improvements to the redirect-on-no-config code
Dan
diff
changeset
+ − 921
'HREF' => '#',
acfdccf7a2bf
Re-sync Oxygen and Mint and Oxygen simple with Oxygen main; a couple improvements to the redirect-on-no-config code
Dan
diff
changeset
+ − 922
'FLAGS' => $flags . ' onclick="return false;"',
acfdccf7a2bf
Re-sync Oxygen and Mint and Oxygen simple with Oxygen main; a couple improvements to the redirect-on-no-config code
Dan
diff
changeset
+ − 923
'TEXT' => $str
acfdccf7a2bf
Re-sync Oxygen and Mint and Oxygen simple with Oxygen main; a couple improvements to the redirect-on-no-config code
Dan
diff
changeset
+ − 924
));
acfdccf7a2bf
Re-sync Oxygen and Mint and Oxygen simple with Oxygen main; a couple improvements to the redirect-on-no-config code
Dan
diff
changeset
+ − 925
$sideinfo .= $p->run();
acfdccf7a2bf
Re-sync Oxygen and Mint and Oxygen simple with Oxygen main; a couple improvements to the redirect-on-no-config code
Dan
diff
changeset
+ − 926
}
256
+ − 927
}
+ − 928
+ − 929
$template->init_vars();
+ − 930
+ − 931
if(isset($_GET['mode']) && $_GET['mode'] == 'css')
+ − 932
{
+ − 933
header('Content-type: text/css');
+ − 934
echo $template->get_css();
+ − 935
exit;
+ − 936
}
+ − 937
243
+ − 938
if ( defined('ENANO_IS_STABLE') )
+ − 939
$branch = 'stable';
+ − 940
else if ( defined('ENANO_IS_UNSTABLE') )
+ − 941
$branch = 'unstable';
+ − 942
else
276
acfdccf7a2bf
Re-sync Oxygen and Mint and Oxygen simple with Oxygen main; a couple improvements to the redirect-on-no-config code
Dan
diff
changeset
+ − 943
{
243
+ − 944
$version = explode('.', ENANO_VERSION);
+ − 945
if ( !isset($version[1]) )
+ − 946
// unknown branch, really
+ − 947
$branch = 'unstable';
+ − 948
else
+ − 949
{
+ − 950
$version[1] = intval($version[1]);
+ − 951
if ( $version[1] % 2 == 1 )
+ − 952
$branch = 'unstable';
+ − 953
else
+ − 954
$branch = 'stable';
+ − 955
}
276
acfdccf7a2bf
Re-sync Oxygen and Mint and Oxygen simple with Oxygen main; a couple improvements to the redirect-on-no-config code
Dan
diff
changeset
+ − 956
}
243
+ − 957
256
+ − 958
switch($_GET['mode'])
+ − 959
{
+ − 960
default:
+ − 961
case 'welcome':
+ − 962
?>
+ − 963
<div style="text-align: center; margin-top: 10px;">
204
473cc747022a
You know what folks, a lot of Mercurial merges failed, and I just now figured out why. So now all changes from stable are permanently synced in.
Dan
diff
changeset
+ − 964
<img alt="[ Enano CMS Project logo ]" src="images/enano-artwork/installer-greeting-green.png" style="display: block; margin: 0 auto; padding-left: 100px;" />
243
+ − 965
<h2><?php echo $lang->get('welcome_heading'); ?></h2>
+ − 966
<h3>
+ − 967
<?php
+ − 968
$branch_l = $lang->get("welcome_branch_$branch");
+ − 969
+ − 970
$v_string = sprintf('%s %s – %s', $lang->get('welcome_version'), ENANO_VERSION, $branch_l);
+ − 971
echo $v_string;
+ − 972
?>
+ − 973
</h3>
256
+ − 974
<?php
243
+ − 975
if ( defined('ENANO_CODE_NAME') )
+ − 976
{
+ − 977
echo '<p>';
+ − 978
echo $lang->get('welcome_aka', array(
+ − 979
'codename' => strtolower(ENANO_CODE_NAME)
+ − 980
));
+ − 981
echo '</p>';
+ − 982
}
256
+ − 983
?>
+ − 984
<form action="install.php?mode=license" method="post">
243
+ − 985
<input type="submit" value="<?php echo $lang->get('welcome_btn_start'); ?>" />
256
+ − 986
</form>
+ − 987
</div>
+ − 988
<?php
+ − 989
break;
+ − 990
case "license":
+ − 991
?>
243
+ − 992
<h3><?php echo $lang->get('license_heading'); ?></h3>
+ − 993
<p><?php echo $lang->get('license_blurb_thankyou'); ?></p>
+ − 994
<p><?php echo $lang->get('license_blurb_pleaseread'); ?></p>
276
acfdccf7a2bf
Re-sync Oxygen and Mint and Oxygen simple with Oxygen main; a couple improvements to the redirect-on-no-config code
Dan
diff
changeset
+ − 995
<?php show_license(); ?>
256
+ − 996
<div class="pagenav">
+ − 997
<form action="install.php?mode=sysreqs" method="post">
+ − 998
<table border="0">
+ − 999
<tr>
243
+ − 1000
<td>
+ − 1001
<input type="submit" value="<?php echo $lang->get('license_btn_i_agree'); ?>" />
+ − 1002
</td>
+ − 1003
<td>
+ − 1004
<p>
+ − 1005
<span style="font-weight: bold;"><?php echo $lang->get('meta_lbl_before_continue'); ?></span><br />
+ − 1006
• <?php echo $lang->get('license_objective_ensure_agree'); ?><br />
+ − 1007
• <?php echo $lang->get('license_objective_have_db_info'); ?>
+ − 1008
</p>
+ − 1009
</td>
256
+ − 1010
</tr>
+ − 1011
</table>
+ − 1012
</form>
+ − 1013
</div>
+ − 1014
<?php
+ − 1015
break;
+ − 1016
case "sysreqs":
+ − 1017
error_reporting(E_ALL);
+ − 1018
?>
243
+ − 1019
<h3><?php echo $lang->get('sysreqs_heading'); ?></h3>
+ − 1020
<p><?php echo $lang->get('sysreqs_blurb'); ?></p>
256
+ − 1021
<table border="0" cellspacing="0" cellpadding="0">
+ − 1022
<?php
243
+ − 1023
run_test('return version_compare(\'4.3.0\', PHP_VERSION, \'<\');', $lang->get('sysreqs_req_php'), $lang->get('sysreqs_req_desc_php') );
+ − 1024
run_test('return function_exists(\'mysql_connect\');', $lang->get('sysreqs_req_mysql'), $lang->get('sysreqs_req_desc_mysql') );
+ − 1025
run_test('return @ini_get(\'file_uploads\');', $lang->get('sysreqs_req_uploads'), $lang->get('sysreqs_req_desc_uploads') );
+ − 1026
run_test('return is_apache();', $lang->get('sysreqs_req_apache'), $lang->get('sysreqs_req_desc_apache'), true);
+ − 1027
run_test('return is_writable(ENANO_ROOT.\'/config.new.php\');', $lang->get('sysreqs_req_config'), $lang->get('sysreqs_req_desc_config') );
+ − 1028
run_test('return file_exists(\'/usr/bin/convert\');', $lang->get('sysreqs_req_magick'), $lang->get('sysreqs_req_desc_magick'), true);
+ − 1029
run_test('return is_writable(ENANO_ROOT.\'/cache/\');', $lang->get('sysreqs_req_cachewriteable'), $lang->get('sysreqs_req_desc_cachewriteable'), true);
+ − 1030
run_test('return is_writable(ENANO_ROOT.\'/files/\');', $lang->get('sysreqs_req_fileswriteable'), $lang->get('sysreqs_req_desc_fileswriteable'), true);
256
+ − 1031
echo '</table>';
+ − 1032
if(!$failed)
+ − 1033
{
+ − 1034
?>
+ − 1035
+ − 1036
<div class="pagenav">
+ − 1037
<?php
+ − 1038
if($warned) {
+ − 1039
echo '<table border="0" cellspacing="0" cellpadding="0">';
243
+ − 1040
run_test('return false;', $lang->get('sysreqs_summary_warn_title'), $lang->get('sysreqs_summary_warn_body'), true);
256
+ − 1041
echo '</table>';
+ − 1042
} else {
+ − 1043
echo '<table border="0" cellspacing="0" cellpadding="0">';
243
+ − 1044
run_test('return true;', '<b>' . $lang->get('sysreqs_summary_success_title') . '</b><br />' . $lang->get('sysreqs_summary_success_body'), 'You should never see this text. Congratulations for being an Enano hacker!');
256
+ − 1045
echo '</table>';
+ − 1046
}
+ − 1047
?>
244
+ − 1048
<form action="install.php?mode=database" method="post">
+ − 1049
<table border="0">
+ − 1050
<tr>
+ − 1051
<td>
+ − 1052
<input type="submit" value="<?php echo $lang->get('meta_btn_continue'); ?>" />
+ − 1053
</td>
+ − 1054
<td>
+ − 1055
<p>
+ − 1056
<span style="font-weight: bold;"><?php echo $lang->get('meta_lbl_before_continue'); ?></span><br />
+ − 1057
• <?php echo $lang->get('sysreqs_objective_scalebacks'); ?><br />
+ − 1058
• <?php echo $lang->get('license_objective_have_db_info'); ?>
+ − 1059
</p>
+ − 1060
</td>
+ − 1061
</tr>
+ − 1062
</table>
+ − 1063
</form>
+ − 1064
</div>
+ − 1065
<?php
+ − 1066
}
+ − 1067
else
+ − 1068
{
+ − 1069
if ( $failed )
+ − 1070
{
256
+ − 1071
echo '<div class="pagenav"><table border="0" cellspacing="0" cellpadding="0">';
243
+ − 1072
run_test('return false;', $lang->get('sysreqs_summary_fail_title'), $lang->get('sysreqs_summary_fail_body'));
256
+ − 1073
echo '</table></div>';
+ − 1074
}
+ − 1075
}
+ − 1076
?>
+ − 1077
<?php
+ − 1078
break;
+ − 1079
case "database":
+ − 1080
?>
+ − 1081
<script type="text/javascript">
+ − 1082
function ajaxGet(uri, f) {
+ − 1083
if (window.XMLHttpRequest) {
+ − 1084
ajax = new XMLHttpRequest();
+ − 1085
} else {
+ − 1086
if (window.ActiveXObject) {
+ − 1087
ajax = new ActiveXObject("Microsoft.XMLHTTP");
+ − 1088
} else {
+ − 1089
alert('Enano client-side runtime error: No AJAX support, unable to continue');
+ − 1090
return;
+ − 1091
}
+ − 1092
}
+ − 1093
ajax.onreadystatechange = f;
+ − 1094
ajax.open('GET', uri, true);
+ − 1095
ajax.send(null);
+ − 1096
}
+ − 1097
+ − 1098
function ajaxPost(uri, parms, f) {
+ − 1099
if (window.XMLHttpRequest) {
+ − 1100
ajax = new XMLHttpRequest();
+ − 1101
} else {
+ − 1102
if (window.ActiveXObject) {
+ − 1103
ajax = new ActiveXObject("Microsoft.XMLHTTP");
+ − 1104
} else {
+ − 1105
alert('Enano client-side runtime error: No AJAX support, unable to continue');
+ − 1106
return;
+ − 1107
}
+ − 1108
}
+ − 1109
ajax.onreadystatechange = f;
+ − 1110
ajax.open('POST', uri, true);
+ − 1111
ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
+ − 1112
ajax.setRequestHeader("Content-length", parms.length);
+ − 1113
ajax.setRequestHeader("Connection", "close");
+ − 1114
ajax.send(parms);
+ − 1115
}
+ − 1116
function ajaxTestConnection()
+ − 1117
{
+ − 1118
v = verify();
+ − 1119
if(!v)
+ − 1120
{
244
+ − 1121
alert($lang.get('meta_msg_err_verification'));
256
+ − 1122
return false;
+ − 1123
}
+ − 1124
var frm = document.forms.dbinfo;
+ − 1125
db_host = escape(frm.db_host.value.replace('+', '%2B'));
+ − 1126
db_name = escape(frm.db_name.value.replace('+', '%2B'));
+ − 1127
db_user = escape(frm.db_user.value.replace('+', '%2B'));
+ − 1128
db_pass = escape(frm.db_pass.value.replace('+', '%2B'));
+ − 1129
db_root_user = escape(frm.db_root_user.value.replace('+', '%2B'));
+ − 1130
db_root_pass = escape(frm.db_root_pass.value.replace('+', '%2B'));
+ − 1131
+ − 1132
parms = 'host='+db_host+'&name='+db_name+'&user='+db_user+'&pass='+db_pass+'&root_user='+db_root_user+'&root_pass='+db_root_pass;
+ − 1133
ajaxPost('<?php echo scriptPath; ?>/install.php?mode=mysql_test', parms, function() {
+ − 1134
if(ajax.readyState==4)
+ − 1135
{
+ − 1136
s = ajax.responseText.substr(0, 4);
+ − 1137
t = ajax.responseText.substr(4, ajax.responseText.length);
+ − 1138
if(s.substr(0, 4)=='good')
+ − 1139
{
+ − 1140
document.getElementById('s_db_host').src='images/good.gif';
+ − 1141
document.getElementById('s_db_name').src='images/good.gif';
+ − 1142
document.getElementById('s_db_auth').src='images/good.gif';
+ − 1143
document.getElementById('s_db_root').src='images/good.gif';
244
+ − 1144
if(t.match(/_creating_db/)) document.getElementById('e_db_name').innerHTML = $lang.get('database_msg_warn_creating_db');
+ − 1145
if(t.match(/_creating_user/)) document.getElementById('e_db_auth').innerHTML = $lang.get('database_msg_warn_creating_user');
256
+ − 1146
document.getElementById('s_mysql_version').src='images/good.gif';
244
+ − 1147
document.getElementById('e_mysql_version').innerHTML = $lang.get('database_msg_info_mysql_good');
256
+ − 1148
}
+ − 1149
else
+ − 1150
{
+ − 1151
switch(s)
+ − 1152
{
+ − 1153
case 'host':
+ − 1154
document.getElementById('s_db_host').src='images/bad.gif';
+ − 1155
document.getElementById('s_db_name').src='images/unknown.gif';
+ − 1156
document.getElementById('s_db_auth').src='images/unknown.gif';
+ − 1157
document.getElementById('s_db_root').src='images/unknown.gif';
244
+ − 1158
document.getElementById('e_db_host').innerHTML = $lang.get('database_msg_err_mysql_connect', { db_host: document.forms.dbinfo.db_host.value, mysql_error: t });
+ − 1159
document.getElementById('e_mysql_version').innerHTML = $lang.get('database_msg_warn_mysql_version');
256
+ − 1160
break;
+ − 1161
case 'auth':
+ − 1162
document.getElementById('s_db_host').src='images/good.gif';
+ − 1163
document.getElementById('s_db_name').src='images/unknown.gif';
+ − 1164
document.getElementById('s_db_auth').src='images/bad.gif';
+ − 1165
document.getElementById('s_db_root').src='images/unknown.gif';
244
+ − 1166
document.getElementById('e_db_auth').innerHTML = $lang.get('database_msg_err_mysql_auth', { mysql_error: t });
+ − 1167
document.getElementById('e_mysql_version').innerHTML = $lang.get('database_msg_warn_mysql_version');
256
+ − 1168
break;
+ − 1169
case 'perm':
+ − 1170
document.getElementById('s_db_host').src='images/good.gif';
+ − 1171
document.getElementById('s_db_name').src='images/bad.gif';
+ − 1172
document.getElementById('s_db_auth').src='images/good.gif';
+ − 1173
document.getElementById('s_db_root').src='images/unknown.gif';
244
+ − 1174
document.getElementById('e_db_name').innerHTML = $lang.get('database_msg_err_mysql_dbperm', { mysql_error: t });
+ − 1175
document.getElementById('e_mysql_version').innerHTML = $lang.get('database_msg_warn_mysql_version');
256
+ − 1176
break;
+ − 1177
case 'name':
+ − 1178
document.getElementById('s_db_host').src='images/good.gif';
+ − 1179
document.getElementById('s_db_name').src='images/bad.gif';
+ − 1180
document.getElementById('s_db_auth').src='images/good.gif';
+ − 1181
document.getElementById('s_db_root').src='images/unknown.gif';
244
+ − 1182
document.getElementById('e_db_name').innerHTML = $lang.get('database_msg_err_mysql_dbexist', { mysql_error: t });
+ − 1183
document.getElementById('e_mysql_version').innerHTML = $lang.get('database_msg_warn_mysql_version');
256
+ − 1184
break;
+ − 1185
case 'root':
+ − 1186
document.getElementById('s_db_host').src='images/good.gif';
+ − 1187
document.getElementById('s_db_name').src='images/unknown.gif';
+ − 1188
document.getElementById('s_db_auth').src='images/unknown.gif';
+ − 1189
document.getElementById('s_db_root').src='images/bad.gif';
244
+ − 1190
document.getElementById('e_db_root').innerHTML = $lang.get('database_msg_err_mysql_auth', { mysql_error: t });
+ − 1191
document.getElementById('e_mysql_version').innerHTML = $lang.get('database_msg_warn_mysql_version');
256
+ − 1192
break;
+ − 1193
case 'vers':
+ − 1194
document.getElementById('s_db_host').src='images/good.gif';
+ − 1195
document.getElementById('s_db_name').src='images/good.gif';
+ − 1196
document.getElementById('s_db_auth').src='images/good.gif';
+ − 1197
document.getElementById('s_db_root').src='images/good.gif';
244
+ − 1198
if(t.match(/_creating_db/)) document.getElementById('e_db_name').innerHTML = $lang.get('database_msg_warn_creating_db');
+ − 1199
if(t.match(/_creating_user/)) document.getElementById('e_db_auth').innerHTML = $lang.get('database_msg_warn_creating_user');
256
+ − 1200
244
+ − 1201
document.getElementById('e_mysql_version').innerHTML = $lang.get('database_msg_err_mysql_version', { mysql_version: t });
256
+ − 1202
document.getElementById('s_mysql_version').src='images/bad.gif';
+ − 1203
default:
+ − 1204
alert(t);
+ − 1205
break;
+ − 1206
}
+ − 1207
}
+ − 1208
}
+ − 1209
});
+ − 1210
}
+ − 1211
function verify()
+ − 1212
{
+ − 1213
document.getElementById('e_db_host').innerHTML = '';
+ − 1214
document.getElementById('e_db_auth').innerHTML = '';
+ − 1215
document.getElementById('e_db_name').innerHTML = '';
+ − 1216
document.getElementById('e_db_root').innerHTML = '';
+ − 1217
var frm = document.forms.dbinfo;
+ − 1218
ret = true;
+ − 1219
if(frm.db_host.value != '')
+ − 1220
{
+ − 1221
document.getElementById('s_db_host').src='images/unknown.gif';
+ − 1222
}
+ − 1223
else
+ − 1224
{
+ − 1225
document.getElementById('s_db_host').src='images/bad.gif';
+ − 1226
ret = false;
+ − 1227
}
262
+ − 1228
if(frm.db_name.value.match(/^([a-z0-9_-]+)$/g))
256
+ − 1229
{
+ − 1230
document.getElementById('s_db_name').src='images/unknown.gif';
+ − 1231
}
+ − 1232
else
+ − 1233
{
+ − 1234
document.getElementById('s_db_name').src='images/bad.gif';
+ − 1235
ret = false;
+ − 1236
}
+ − 1237
if(frm.db_user.value != '')
+ − 1238
{
+ − 1239
document.getElementById('s_db_auth').src='images/unknown.gif';
+ − 1240
}
+ − 1241
else
+ − 1242
{
+ − 1243
document.getElementById('s_db_auth').src='images/bad.gif';
+ − 1244
ret = false;
+ − 1245
}
+ − 1246
if(frm.table_prefix.value.match(/^([a-z0-9_]*)$/g))
+ − 1247
{
+ − 1248
document.getElementById('s_table_prefix').src='images/good.gif';
+ − 1249
}
+ − 1250
else
+ − 1251
{
+ − 1252
document.getElementById('s_table_prefix').src='images/bad.gif';
+ − 1253
ret = false;
+ − 1254
}
+ − 1255
if(frm.db_root_user.value == '')
+ − 1256
{
+ − 1257
document.getElementById('s_db_root').src='images/good.gif';
+ − 1258
}
+ − 1259
else if(frm.db_root_user.value != '' && frm.db_root_pass.value == '')
+ − 1260
{
+ − 1261
document.getElementById('s_db_root').src='images/bad.gif';
+ − 1262
ret = false;
+ − 1263
}
+ − 1264
else
+ − 1265
{
+ − 1266
document.getElementById('s_db_root').src='images/unknown.gif';
+ − 1267
}
+ − 1268
if(ret) frm._cont.disabled = false;
+ − 1269
else frm._cont.disabled = true;
+ − 1270
return ret;
+ − 1271
}
+ − 1272
window.onload = verify;
+ − 1273
</script>
244
+ − 1274
<p><?php echo $lang->get('database_blurb_needdb'); ?></p>
+ − 1275
<p><?php echo $lang->get('database_blurb_howtomysql'); ?></p>
256
+ − 1276
<?php
204
473cc747022a
You know what folks, a lot of Mercurial merges failed, and I just now figured out why. So now all changes from stable are permanently synced in.
Dan
diff
changeset
+ − 1277
if ( file_exists('/etc/enano-is-virt-appliance') )
256
+ − 1278
{
244
+ − 1279
echo '<p>
+ − 1280
' . $lang->get('database_vm_login_info', array( 'host' => 'localhost', 'user' => 'enano', 'pass' => 'clurichaun', 'name' => 'enano_www1' )) . '
+ − 1281
</p>';
256
+ − 1282
}
+ − 1283
?>
+ − 1284
<form name="dbinfo" action="install.php?mode=website" method="post">
+ − 1285
<table border="0">
244
+ − 1286
<tr>
+ − 1287
<td colspan="3" style="text-align: center">
+ − 1288
<h3><?php echo $lang->get('database_table_title'); ?></h3>
+ − 1289
</td>
+ − 1290
</tr>
+ − 1291
<tr>
+ − 1292
<td>
+ − 1293
<b><?php echo $lang->get('database_field_hostname_title'); ?></b>
+ − 1294
<br /><?php echo $lang->get('database_field_hostname_body'); ?>
+ − 1295
<br /><span style="color: #993300" id="e_db_host"></span>
+ − 1296
</td>
+ − 1297
<td>
+ − 1298
<input onkeyup="verify();" name="db_host" size="30" type="text" />
+ − 1299
</td>
+ − 1300
<td>
+ − 1301
<img id="s_db_host" alt="Good/bad icon" src="images/bad.gif" />
+ − 1302
</td>
+ − 1303
</tr>
+ − 1304
<tr>
+ − 1305
<td>
+ − 1306
<b><?php echo $lang->get('database_field_dbname_title'); ?></b><br />
+ − 1307
<?php echo $lang->get('database_field_dbname_body'); ?><br />
+ − 1308
<span style="color: #993300" id="e_db_name"></span>
+ − 1309
</td>
+ − 1310
<td>
+ − 1311
<input onkeyup="verify();" name="db_name" size="30" type="text" />
+ − 1312
</td>
+ − 1313
<td>
+ − 1314
<img id="s_db_name" alt="Good/bad icon" src="images/bad.gif" />
+ − 1315
</td>
+ − 1316
</tr>
+ − 1317
<tr>
+ − 1318
<td rowspan="2">
+ − 1319
<b><?php echo $lang->get('database_field_dbauth_title'); ?></b><br />
+ − 1320
<?php echo $lang->get('database_field_dbauth_body'); ?><br />
+ − 1321
<span style="color: #993300" id="e_db_auth"></span>
+ − 1322
</td>
+ − 1323
<td>
+ − 1324
<input onkeyup="verify();" name="db_user" size="30" type="text" />
+ − 1325
</td>
+ − 1326
<td rowspan="2">
+ − 1327
<img id="s_db_auth" alt="Good/bad icon" src="images/bad.gif" />
+ − 1328
</td>
+ − 1329
</tr>
+ − 1330
<tr>
+ − 1331
<td>
+ − 1332
<input name="db_pass" size="30" type="password" />
+ − 1333
</td>
+ − 1334
</tr>
+ − 1335
<tr>
+ − 1336
<td colspan="3" style="text-align: center">
+ − 1337
<h3><?php echo $lang->get('database_heading_optionalinfo'); ?></h3>
+ − 1338
</td>
+ − 1339
</tr>
+ − 1340
<tr>
+ − 1341
<td>
+ − 1342
<b><?php echo $lang->get('database_field_tableprefix_title'); ?></b><br />
+ − 1343
<?php echo $lang->get('database_field_tableprefix_body'); ?>
+ − 1344
</td>
+ − 1345
<td>
+ − 1346
<input onkeyup="verify();" name="table_prefix" size="30" type="text" />
+ − 1347
</td>
+ − 1348
<td>
+ − 1349
<img id="s_table_prefix" alt="Good/bad icon" src="images/good.gif" />
+ − 1350
</td>
+ − 1351
</tr>
+ − 1352
<tr>
+ − 1353
<td rowspan="2">
+ − 1354
<b><?php echo $lang->get('database_field_rootauth_title'); ?></b><br />
+ − 1355
<?php echo $lang->get('database_field_rootauth_body'); ?><br />
+ − 1356
<span style="color: #993300" id="e_db_root"></span>
+ − 1357
</td>
+ − 1358
<td>
+ − 1359
<input onkeyup="verify();" name="db_root_user" size="30" type="text" />
+ − 1360
</td>
+ − 1361
<td rowspan="2">
+ − 1362
<img id="s_db_root" alt="Good/bad icon" src="images/good.gif" />
+ − 1363
</td>
+ − 1364
</tr>
+ − 1365
<tr>
+ − 1366
<td>
+ − 1367
<input onkeyup="verify();" name="db_root_pass" size="30" type="password" />
+ − 1368
</td>
+ − 1369
</tr>
+ − 1370
<tr>
+ − 1371
<td>
+ − 1372
<b><?php echo $lang->get('database_field_mysqlversion_title'); ?></b>
+ − 1373
</td>
+ − 1374
<td id="e_mysql_version">
+ − 1375
<?php echo $lang->get('database_field_mysqlversion_blurb_willbechecked'); ?>
+ − 1376
</td>
+ − 1377
<td>
+ − 1378
<img id="s_mysql_version" alt="Good/bad icon" src="images/unknown.gif" />
+ − 1379
</td>
+ − 1380
</tr>
+ − 1381
<tr>
+ − 1382
<td>
+ − 1383
<b><?php echo $lang->get('database_field_droptables_title'); ?></b><br />
+ − 1384
<?php echo $lang->get('database_field_droptables_body'); ?>
+ − 1385
</td>
+ − 1386
<td>
+ − 1387
<input type="checkbox" name="drop_tables" id="dtcheck" /> <label for="dtcheck"><?php echo $lang->get('database_field_droptables_lbl'); ?></label>
+ − 1388
</td>
+ − 1389
</tr>
+ − 1390
<tr>
+ − 1391
<td colspan="3" style="text-align: center">
+ − 1392
<input type="button" value="<?php echo $lang->get('database_btn_testconnection'); ?>" onclick="ajaxTestConnection();" />
+ − 1393
</td>
+ − 1394
</tr>
256
+ − 1395
</table>
+ − 1396
<div class="pagenav">
244
+ − 1397
<table border="0">
+ − 1398
<tr>
+ − 1399
<td>
+ − 1400
<input type="submit" value="<?php echo $lang->get('meta_btn_continue'); ?>" onclick="return verify();" name="_cont" />
+ − 1401
</td>
+ − 1402
<td>
+ − 1403
<p>
+ − 1404
<span style="font-weight: bold;"><?php echo $lang->get('meta_lbl_before_continue'); ?></span><br />
+ − 1405
• <?php echo $lang->get('database_objective_test'); ?><br />
+ − 1406
• <?php echo $lang->get('database_objective_uncrypt'); ?>
+ − 1407
</p>
+ − 1408
</td>
+ − 1409
</tr>
+ − 1410
</table>
+ − 1411
</div>
256
+ − 1412
</form>
+ − 1413
<?php
+ − 1414
break;
+ − 1415
case "website":
244
+ − 1416
if ( !isset($_POST['_cont']) )
+ − 1417
{
204
473cc747022a
You know what folks, a lot of Mercurial merges failed, and I just now figured out why. So now all changes from stable are permanently synced in.
Dan
diff
changeset
+ − 1418
echo 'No POST data signature found. Please <a href="install.php?mode=license">restart the installation</a>.';
256
+ − 1419
$template->footer();
+ − 1420
exit;
+ − 1421
}
+ − 1422
unset($_POST['_cont']);
+ − 1423
?>
+ − 1424
<script type="text/javascript">
+ − 1425
function verify()
+ − 1426
{
+ − 1427
var frm = document.forms.siteinfo;
+ − 1428
ret = true;
+ − 1429
if(frm.sitename.value.match(/^(.+)$/g) && frm.sitename.value != 'Enano')
+ − 1430
{
+ − 1431
document.getElementById('s_name').src='images/good.gif';
+ − 1432
}
+ − 1433
else
+ − 1434
{
+ − 1435
document.getElementById('s_name').src='images/bad.gif';
+ − 1436
ret = false;
+ − 1437
}
+ − 1438
if(frm.sitedesc.value.match(/^(.+)$/g))
+ − 1439
{
+ − 1440
document.getElementById('s_desc').src='images/good.gif';
+ − 1441
}
+ − 1442
else
+ − 1443
{
+ − 1444
document.getElementById('s_desc').src='images/bad.gif';
+ − 1445
ret = false;
+ − 1446
}
+ − 1447
if(frm.copyright.value.match(/^(.+)$/g))
+ − 1448
{
+ − 1449
document.getElementById('s_copyright').src='images/good.gif';
+ − 1450
}
+ − 1451
else
+ − 1452
{
+ − 1453
document.getElementById('s_copyright').src='images/bad.gif';
+ − 1454
ret = false;
+ − 1455
}
+ − 1456
if(ret) frm._cont.disabled = false;
+ − 1457
else frm._cont.disabled = true;
+ − 1458
return ret;
+ − 1459
}
+ − 1460
window.onload = verify;
+ − 1461
</script>
+ − 1462
<form name="siteinfo" action="install.php?mode=login" method="post">
+ − 1463
<?php
+ − 1464
$k = array_keys($_POST);
+ − 1465
for($i=0;$i<sizeof($_POST);$i++) {
+ − 1466
echo '<input type="hidden" name="'.htmlspecialchars($k[$i]).'" value="'.htmlspecialchars($_POST[$k[$i]]).'" />'."\n";
+ − 1467
}
+ − 1468
?>
249
+ − 1469
<p><?php echo $lang->get('website_header_blurb'); ?></p>
256
+ − 1470
<table border="0">
249
+ − 1471
<tr>
+ − 1472
<td>
+ − 1473
<b><?php echo $lang->get('website_field_name_title'); ?></b><br />
+ − 1474
<?php echo $lang->get('website_field_name_body'); ?>
+ − 1475
</td>
+ − 1476
<td>
+ − 1477
<input onkeyup="verify();" name="sitename" type="text" size="30" />
+ − 1478
</td>
+ − 1479
<td>
+ − 1480
<img id="s_name" alt="Good/bad icon" src="images/bad.gif" />
+ − 1481
</td>
+ − 1482
</tr>
+ − 1483
<tr>
+ − 1484
<td>
+ − 1485
<b><?php echo $lang->get('website_field_desc_title'); ?></b><br />
+ − 1486
<?php echo $lang->get('website_field_desc_body'); ?>
+ − 1487
</td>
+ − 1488
<td>
+ − 1489
<input onkeyup="verify();" name="sitedesc" type="text" size="30" />
+ − 1490
</td>
+ − 1491
<td>
+ − 1492
<img id="s_desc" alt="Good/bad icon" src="images/bad.gif" />
+ − 1493
</td>
+ − 1494
</tr>
+ − 1495
<tr>
+ − 1496
<td>
+ − 1497
<b><?php echo $lang->get('website_field_copyright_title'); ?></b><br />
+ − 1498
<?php echo $lang->get('website_field_copyright_body'); ?>
+ − 1499
</td>
+ − 1500
<td>
+ − 1501
<input onkeyup="verify();" name="copyright" type="text" size="30" />
+ − 1502
</td>
+ − 1503
<td>
+ − 1504
<img id="s_copyright" alt="Good/bad icon" src="images/bad.gif" />
+ − 1505
</td>
+ − 1506
</tr>
+ − 1507
<tr>
+ − 1508
<td>
+ − 1509
<b><?php echo $lang->get('website_field_wikimode_title'); ?></b><br />
+ − 1510
<?php echo $lang->get('website_field_wikimode_body'); ?>
+ − 1511
</td>
+ − 1512
<td>
+ − 1513
<input name="wiki_mode" type="checkbox" id="wmcheck" /> <label for="wmcheck"><?php echo $lang->get('website_field_wikimode_checkbox'); ?></label>
+ − 1514
</td>
+ − 1515
<td>
+ − 1516
+ − 1517
</td>
+ − 1518
</tr>
+ − 1519
<tr>
+ − 1520
<td>
+ − 1521
<b><?php echo $lang->get('website_field_urlscheme_title'); ?></b><br />
+ − 1522
<?php echo $lang->get('website_field_urlscheme_body'); ?>
+ − 1523
</td>
+ − 1524
<td colspan="2">
+ − 1525
<input type="radio" <?php if(!is_apache()) echo 'checked="checked" '; ?>name="urlscheme" value="ugly" id="ugly" /> <label for="ugly"><?php echo $lang->get('website_field_urlscheme_ugly'); ?></label><br />
+ − 1526
<input type="radio" <?php if(is_apache()) echo 'checked="checked" '; ?>name="urlscheme" value="short" id="short" /> <label for="short"><?php echo $lang->get('website_field_urlscheme_short'); ?></label><br />
+ − 1527
<input type="radio" name="urlscheme" value="tiny" id="petite"> <label for="petite"><?php echo $lang->get('website_field_urlscheme_tiny'); ?></label>
+ − 1528
</td>
+ − 1529
</tr>
256
+ − 1530
</table>
+ − 1531
<div class="pagenav">
+ − 1532
<table border="0">
249
+ − 1533
<tr>
+ − 1534
<td>
+ − 1535
<input type="submit" value="<?php echo $lang->get('meta_btn_continue'); ?>" onclick="return verify();" name="_cont" />
+ − 1536
</td>
+ − 1537
<td>
+ − 1538
<p>
+ − 1539
<span style="font-weight: bold;"><?php echo $lang->get('meta_lbl_before_continue'); ?></span><br />
+ − 1540
• <?php echo $lang->get('website_objective_verify'); ?>
+ − 1541
</p>
+ − 1542
</td>
+ − 1543
</tr>
256
+ − 1544
</table>
+ − 1545
</div>
+ − 1546
</form>
+ − 1547
<?php
+ − 1548
break;
+ − 1549
case "login":
+ − 1550
if(!isset($_POST['_cont'])) {
204
473cc747022a
You know what folks, a lot of Mercurial merges failed, and I just now figured out why. So now all changes from stable are permanently synced in.
Dan
diff
changeset
+ − 1551
echo 'No POST data signature found. Please <a href="install.php?mode=license">restart the installation</a>.';
256
+ − 1552
$template->footer();
+ − 1553
exit;
+ − 1554
}
+ − 1555
unset($_POST['_cont']);
+ − 1556
require('config.new.php');
+ − 1557
$aes = new AESCrypt(AES_BITS, AES_BLOCKSIZE);
+ − 1558
if ( isset($crypto_key) )
+ − 1559
{
+ − 1560
$cryptkey = $crypto_key;
+ − 1561
}
+ − 1562
if(!isset($cryptkey) || ( isset($cryptkey) && strlen($cryptkey) != AES_BITS / 4) )
+ − 1563
{
+ − 1564
$cryptkey = $aes->gen_readymade_key();
+ − 1565
$handle = @fopen(ENANO_ROOT.'/config.new.php', 'w');
+ − 1566
if(!$handle)
+ − 1567
{
249
+ − 1568
echo '<p>ERROR: Despite my repeated attempts to verify that the configuration file can be written, I was indeed prevented from opening it for writing. Maybe you\'re still on <del>crack</del> Windows?</p>';
256
+ − 1569
$template->footer();
+ − 1570
exit;
+ − 1571
}
+ − 1572
fwrite($handle, '<?php $cryptkey = \''.$cryptkey.'\'; ?>');
+ − 1573
fclose($handle);
+ − 1574
}
+ − 1575
// Sorry for the ugly hack, but this f***s up jEdit badly.
+ − 1576
echo '
+ − 1577
<script type="text/javascript">
+ − 1578
function verify()
+ − 1579
{
+ − 1580
var frm = document.forms.login;
+ − 1581
ret = true;
+ − 1582
if ( frm.admin_user.value.match(/^([A-z0-9 \\-\\.]+)$/) && !frm.admin_user.value.match(/^(?:(?:\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])\\.){3}(?:\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])$/) && frm.admin_user.value.toLowerCase() != \'anonymous\' )
+ − 1583
{
+ − 1584
document.getElementById(\'s_user\').src = \'images/good.gif\';
+ − 1585
}
+ − 1586
else
+ − 1587
{
+ − 1588
document.getElementById(\'s_user\').src = \'images/bad.gif\';
+ − 1589
ret = false;
+ − 1590
}
+ − 1591
if(frm.admin_pass.value.length >= 6 && frm.admin_pass.value == frm.admin_pass_confirm.value)
+ − 1592
{
+ − 1593
document.getElementById(\'s_password\').src = \'images/good.gif\';
+ − 1594
}
+ − 1595
else
+ − 1596
{
+ − 1597
document.getElementById(\'s_password\').src = \'images/bad.gif\';
+ − 1598
ret = false;
+ − 1599
}
+ − 1600
if(frm.admin_email.value.match(/^(?:[\\w\\d]+\\.?)+@(?:(?:[\\w\\d]\\-?)+\\.)+\\w{2,4}$/))
+ − 1601
{
+ − 1602
document.getElementById(\'s_email\').src = \'images/good.gif\';
+ − 1603
}
+ − 1604
else
+ − 1605
{
+ − 1606
document.getElementById(\'s_email\').src = \'images/bad.gif\';
+ − 1607
ret = false;
+ − 1608
}
+ − 1609
if(ret) frm._cont.disabled = false;
+ − 1610
else frm._cont.disabled = true;
+ − 1611
return ret;
+ − 1612
}
+ − 1613
window.onload = verify;
+ − 1614
+ − 1615
function cryptdata()
+ − 1616
{
+ − 1617
if(!verify()) return false;
+ − 1618
}
+ − 1619
</script>
+ − 1620
';
+ − 1621
?>
+ − 1622
<form name="login" action="install.php?mode=confirm" method="post" onsubmit="runEncryption();">
+ − 1623
<?php
+ − 1624
$k = array_keys($_POST);
+ − 1625
for($i=0;$i<sizeof($_POST);$i++) {
+ − 1626
echo '<input type="hidden" name="'.htmlspecialchars($k[$i]).'" value="'.htmlspecialchars($_POST[$k[$i]]).'" />'."\n";
+ − 1627
}
+ − 1628
?>
249
+ − 1629
<p><?php echo $lang->get('login_header_blurb'); ?></p>
256
+ − 1630
<table border="0">
249
+ − 1631
<tr>
+ − 1632
<td><b><?php echo $lang->get('login_field_username_title'); ?></b><br /><small><?php echo $lang->get('login_field_username_body'); ?></small></td>
+ − 1633
<td><input onkeyup="verify();" name="admin_user" type="text" size="30" /></td>
+ − 1634
<td><img id="s_user" alt="Good/bad icon" src="images/bad.gif" /></td>
+ − 1635
</tr>
+ − 1636
<tr>
+ − 1637
<td><?php echo $lang->get('login_field_password_title'); ?></td>
+ − 1638
<td><input onkeyup="verify();" name="admin_pass" type="password" size="30" /></td>
+ − 1639
<td rowspan="2"><img id="s_password" alt="Good/bad icon" src="images/bad.gif" /></td>
+ − 1640
</tr>
+ − 1641
<tr>
+ − 1642
<td><?php echo $lang->get('login_field_password_confirm'); ?></td>
+ − 1643
<td><input onkeyup="verify();" name="admin_pass_confirm" type="password" size="30" /></td>
+ − 1644
</tr>
+ − 1645
<tr>
+ − 1646
<td><?php echo $lang->get('login_field_email_title'); ?></td>
+ − 1647
<td><input onkeyup="verify();" name="admin_email" type="text" size="30" /></td>
+ − 1648
<td><img id="s_email" alt="Good/bad icon" src="images/bad.gif" /></td>
+ − 1649
</tr>
256
+ − 1650
<tr>
+ − 1651
<td>
249
+ − 1652
<?php echo $lang->get('login_field_allowphp_title'); ?><br />
+ − 1653
<small>
+ − 1654
<span style="color: #D84308">
+ − 1655
<?php
+ − 1656
echo $lang->get('login_field_allowphp_body',
+ − 1657
array(
+ − 1658
'important_notes' => '<a href="install.php?mode=pophelp&topic=admin_embed_php" onclick="window.open(this.href, \'pophelpwin\', \'width=550,height=400,status=no,toolbars=no,toolbar=no,address=no,scroll=yes\'); return false;" style="color: #D84308; text-decoration: underline;">' . $lang->get('login_field_allowphp_isi') . '</a>'
+ − 1659
)
+ − 1660
);
+ − 1661
?>
+ − 1662
</span>
+ − 1663
</small>
256
+ − 1664
</td>
+ − 1665
<td>
249
+ − 1666
<label><input type="radio" name="admin_embed_php" value="2" checked="checked" /> <?php echo $lang->get('login_field_allowphp_disabled'); ?></label>
+ − 1667
<label><input type="radio" name="admin_embed_php" value="4" /> <?php echo $lang->get('login_field_allowphp_enabled'); ?></label>
256
+ − 1668
</td>
+ − 1669
<td></td>
+ − 1670
</tr>
249
+ − 1671
<tr><td colspan="3"><?php echo $lang->get('login_aes_blurb'); ?></td></tr>
256
+ − 1672
</table>
+ − 1673
<div class="pagenav">
+ − 1674
<table border="0">
249
+ − 1675
<tr>
+ − 1676
<td>
+ − 1677
<input type="submit" value="<?php echo $lang->get('meta_btn_continue'); ?>" onclick="return cryptdata();" name="_cont" />
+ − 1678
</td>
+ − 1679
<td>
+ − 1680
<p>
+ − 1681
<span style="font-weight: bold;"><?php echo $lang->get('meta_lbl_before_continue'); ?></span><br />
+ − 1682
• <?php echo $lang->get('login_objective_remember'); ?>
+ − 1683
</p>
+ − 1684
</td>
+ − 1685
</tr>
256
+ − 1686
</table>
+ − 1687
</div>
+ − 1688
<div id="cryptdebug"></div>
249
+ − 1689
<input type="hidden" name="use_crypt" value="no" />
+ − 1690
<input type="hidden" name="crypt_key" value="<?php echo $cryptkey; ?>" />
+ − 1691
<input type="hidden" name="crypt_data" value="" />
256
+ − 1692
</form>
+ − 1693
<script type="text/javascript">
+ − 1694
// <![CDATA[
+ − 1695
var frm = document.forms.login;
+ − 1696
frm.admin_user.focus();
+ − 1697
function runEncryption()
+ − 1698
{
+ − 1699
str = '';
+ − 1700
for(i=0;i<keySizeInBits/4;i++) str+='0';
+ − 1701
var key = hexToByteArray(str);
+ − 1702
var pt = hexToByteArray(str);
+ − 1703
var ct = rijndaelEncrypt(pt, key, "ECB");
+ − 1704
var ect = byteArrayToHex(ct);
+ − 1705
switch(keySizeInBits)
+ − 1706
{
+ − 1707
case 128:
+ − 1708
v = '66e94bd4ef8a2c3b884cfa59ca342b2e';
+ − 1709
break;
+ − 1710
case 192:
+ − 1711
v = 'aae06992acbf52a3e8f4a96ec9300bd7aae06992acbf52a3e8f4a96ec9300bd7';
+ − 1712
break;
+ − 1713
case 256:
+ − 1714
v = 'dc95c078a2408989ad48a21492842087dc95c078a2408989ad48a21492842087';
+ − 1715
break;
+ − 1716
}
+ − 1717
var testpassed = ( ect == v && md5_vm_test() );
+ − 1718
var frm = document.forms.login;
+ − 1719
if(testpassed)
+ − 1720
{
+ − 1721
// alert('encryption self-test passed');
+ − 1722
frm.use_crypt.value = 'yes';
+ − 1723
var cryptkey = frm.crypt_key.value;
+ − 1724
frm.crypt_key.value = '';
+ − 1725
if(cryptkey != byteArrayToHex(hexToByteArray(cryptkey)))
+ − 1726
{
+ − 1727
alert('Byte array conversion SUCKS');
+ − 1728
testpassed = false;
+ − 1729
}
+ − 1730
cryptkey = hexToByteArray(cryptkey);
+ − 1731
if(!cryptkey || ( ( typeof cryptkey == 'string' || typeof cryptkey == 'object' ) ) && cryptkey.length != keySizeInBits / 8 )
+ − 1732
{
+ − 1733
frm._cont.disabled = true;
+ − 1734
len = ( typeof cryptkey == 'string' || typeof cryptkey == 'object' ) ? '\nLen: '+cryptkey.length : '';
+ − 1735
alert('The key is messed up\nType: '+typeof(cryptkey)+len);
+ − 1736
}
+ − 1737
}
+ − 1738
else
+ − 1739
{
+ − 1740
// alert('encryption self-test FAILED');
+ − 1741
}
+ − 1742
if(testpassed)
+ − 1743
{
+ − 1744
pass = frm.admin_pass.value;
+ − 1745
pass = stringToByteArray(pass);
+ − 1746
cryptstring = rijndaelEncrypt(pass, cryptkey, 'ECB');
+ − 1747
//decrypted = rijndaelDecrypt(cryptstring, cryptkey, 'ECB');
+ − 1748
//decrypted = byteArrayToString(decrypted);
+ − 1749
//return false;
+ − 1750
if(!cryptstring)
+ − 1751
{
+ − 1752
return false;
+ − 1753
}
+ − 1754
cryptstring = byteArrayToHex(cryptstring);
+ − 1755
// document.getElementById('cryptdebug').innerHTML = '<pre>Data: '+cryptstring+'<br />Key: '+byteArrayToHex(cryptkey)+'</pre>';
+ − 1756
frm.crypt_data.value = cryptstring;
+ − 1757
frm.admin_pass.value = '';
+ − 1758
frm.admin_pass_confirm.value = '';
+ − 1759
}
+ − 1760
return false;
+ − 1761
}
+ − 1762
// ]]>
+ − 1763
</script>
+ − 1764
<?php
+ − 1765
break;
+ − 1766
case "confirm":
+ − 1767
if(!isset($_POST['_cont'])) {
+ − 1768
echo 'No POST data signature found. Please <a href="install.php?mode=sysreqs">restart the installation</a>.';
+ − 1769
$template->footer();
+ − 1770
exit;
+ − 1771
}
+ − 1772
unset($_POST['_cont']);
+ − 1773
?>
+ − 1774
<form name="confirm" action="install.php?mode=install" method="post">
+ − 1775
<?php
+ − 1776
$k = array_keys($_POST);
+ − 1777
for($i=0;$i<sizeof($_POST);$i++) {
+ − 1778
echo '<input type="hidden" name="'.htmlspecialchars($k[$i]).'" value="'.htmlspecialchars($_POST[$k[$i]]).'" />'."\n";
+ − 1779
}
+ − 1780
?>
249
+ − 1781
<h3><?php echo $lang->get('confirm_header_blurb_title'); ?></h3>
+ − 1782
<p><?php echo $lang->get('confirm_header_blurb_body'); ?></p>
256
+ − 1783
<ul>
249
+ − 1784
<li><?php echo $lang->get('confirm_lbl_db_host'); ?> <?php echo $_POST['db_host']; ?></li>
+ − 1785
<li><?php echo $lang->get('confirm_lbl_db_name'); ?> <?php echo $_POST['db_name']; ?></li>
+ − 1786
<li><?php echo $lang->get('confirm_lbl_db_user'); ?> <?php echo $_POST['db_user']; ?></li>
+ − 1787
<li><?php echo $lang->get('confirm_lbl_db_pass'); ?></li>
+ − 1788
<li><?php echo $lang->get('confirm_lbl_sitename'); ?> <?php echo $_POST['sitename']; ?></li>
+ − 1789
<li><?php echo $lang->get('confirm_lbl_sitedesc'); ?> <?php echo $_POST['sitedesc']; ?></li>
+ − 1790
<li><?php echo $lang->get('confirm_lbl_adminuser'); ?> <?php echo $_POST['admin_user']; ?></li>
+ − 1791
<li><?php echo $lang->get('confirm_lbl_aesbits'); ?> <?php echo $lang->get('confirm_lbl_aes_strength', array( 'aes_bits' => AES_BITS )); ?><br /><small><?php echo $lang->get('confirm_lbl_aes_change'); ?></small></li>
256
+ − 1792
</ul>
+ − 1793
<div class="pagenav">
+ − 1794
<table border="0">
+ − 1795
<tr>
249
+ − 1796
<td>
+ − 1797
<input type="submit" value="<?php echo $lang->get('confirm_btn_install_enano'); ?>" name="_cont" />
+ − 1798
</td>
+ − 1799
<td>
+ − 1800
<p>
+ − 1801
<span style="font-weight: bold;"><?php echo $lang->get('meta_lbl_before_continue'); ?></span><br />
+ − 1802
<!-- Like this even needs to be localized. :-P -->
+ − 1803
• <?php echo $lang->get('confirm_objective_pray'); ?>
+ − 1804
</p>
+ − 1805
</td>
256
+ − 1806
</tr>
+ − 1807
</table>
+ − 1808
</div>
+ − 1809
</form>
+ − 1810
<?php
+ − 1811
break;
+ − 1812
case "install":
+ − 1813
if(!isset($_POST['db_host']) ||
+ − 1814
!isset($_POST['db_name']) ||
+ − 1815
!isset($_POST['db_user']) ||
+ − 1816
!isset($_POST['db_pass']) ||
+ − 1817
!isset($_POST['sitename']) ||
+ − 1818
!isset($_POST['sitedesc']) ||
+ − 1819
!isset($_POST['copyright']) ||
+ − 1820
!isset($_POST['admin_user']) ||
+ − 1821
!isset($_POST['admin_pass']) ||
+ − 1822
!isset($_POST['admin_embed_php']) || ( isset($_POST['admin_embed_php']) && !in_array($_POST['admin_embed_php'], array('2', '4')) ) ||
+ − 1823
!isset($_POST['urlscheme'])
+ − 1824
)
+ − 1825
{
204
473cc747022a
You know what folks, a lot of Mercurial merges failed, and I just now figured out why. So now all changes from stable are permanently synced in.
Dan
diff
changeset
+ − 1826
echo 'The installer has detected that one or more required form values is not set. Please <a href="install.php?mode=license">restart the installation</a>.';
256
+ − 1827
$template->footer();
+ − 1828
exit;
+ − 1829
}
+ − 1830
switch($_POST['urlscheme'])
+ − 1831
{
+ − 1832
case "ugly":
+ − 1833
default:
+ − 1834
$cp = scriptPath.'/index.php?title=';
+ − 1835
break;
+ − 1836
case "short":
+ − 1837
$cp = scriptPath.'/index.php/';
+ − 1838
break;
+ − 1839
case "tiny":
+ − 1840
$cp = scriptPath.'/';
+ − 1841
break;
+ − 1842
}
+ − 1843
function err($t) { global $template; echo $t; $template->footer(); exit; }
+ − 1844
+ − 1845
// $stages = array('connect', 'decrypt', 'genkey', 'parse', 'sql', 'writeconfig', 'renameconfig', 'startapi', 'initlogs');
+ − 1846
252
+ − 1847
if ( !preg_match('/^[a-z0-9_-]*$/', $_POST['table_prefix']) )
256
+ − 1848
err('Hacking attempt was detected in table_prefix.');
+ − 1849
+ − 1850
start_install_table();
269
+ − 1851
+ − 1852
// Are we just trying to auto-rename the config files? If so, skip everything else
270
5bcdee999015
Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
diff
changeset
+ − 1853
if ( !isset($_GET['stage']) || ( isset($_GET['stage']) && $_GET['stage'] != 'renameconfig' ) )
256
+ − 1854
{
+ − 1855
269
+ − 1856
// The stages connect, decrypt, genkey, and parse are preprocessing and don't do any actual data modification.
+ − 1857
// Thus, they need to be run on each retry, e.g. never skipped.
271
+ − 1858
run_installer_stage('connect', $lang->get('install_stg_connect_title'), 'stg_mysql_connect', $lang->get('install_stg_connect_body'), false);
269
+ − 1859
if ( isset($_POST['drop_tables']) )
+ − 1860
{
+ − 1861
// Are we supposed to drop any existing tables? If so, do it now
271
+ − 1862
run_installer_stage('drop', $lang->get('install_stg_drop_title'), 'stg_drop_tables', 'This step never returns failure');
269
+ − 1863
}
271
+ − 1864
run_installer_stage('decrypt', $lang->get('install_stg_decrypt_title'), 'stg_decrypt_admin_pass', $lang->get('install_stg_decrypt_body'), false);
+ − 1865
run_installer_stage('genkey', $lang->get('install_stg_genkey_title', array( 'aes_bits' => AES_BITS )), 'stg_generate_aes_key', $lang->get('install_stg_genkey_body'), false);
+ − 1866
run_installer_stage('parse', $lang->get('install_stg_parse_title'), 'stg_parse_schema', $lang->get('install_stg_parse_body'), false);
+ − 1867
run_installer_stage('sql', $lang->get('install_stg_sql_title'), 'stg_install', $lang->get('install_stg_sql_body'), false);
+ − 1868
run_installer_stage('writeconfig', $lang->get('install_stg_writeconfig_title'), 'stg_write_config', $lang->get('install_stg_writeconfig_body'));
269
+ − 1869
+ − 1870
// Mainstream installation complete - Enano should be usable now
+ − 1871
// The stage of starting the API is special because it has to be called out of function context.
+ − 1872
// To alleviate this, we have two functions, one that returns success and one that returns failure
+ − 1873
// If the Enano API load is successful, the success function is called to report the action to the user
+ − 1874
// If unsuccessful, the failure report is sent
+ − 1875
+ − 1876
$template_bak = $template;
+ − 1877
+ − 1878
$_GET['title'] = 'Main_Page';
+ − 1879
require('includes/common.php');
+ − 1880
+ − 1881
if ( is_object($db) && is_object($session) )
+ − 1882
{
271
+ − 1883
run_installer_stage('startapi', $lang->get('install_stg_startapi_title'), 'stg_start_api_success', '...', false);
269
+ − 1884
}
+ − 1885
else
+ − 1886
{
271
+ − 1887
run_installer_stage('startapi', $lang->get('install_stg_startapi_title'), 'stg_start_api_failure', $lang->get('install_stg_startapi_body'), false);
269
+ − 1888
}
+ − 1889
+ − 1890
// We need to be logged in (with admin rights) before logs can be flushed
+ − 1891
$admin_password = stg_decrypt_admin_pass(true);
+ − 1892
$session->login_without_crypto($_POST['admin_user'], $admin_password, false);
+ − 1893
+ − 1894
// Now that login cookies are set, initialize the session manager and ACLs
+ − 1895
$session->start();
+ − 1896
$paths->init();
+ − 1897
271
+ − 1898
run_installer_stage('importlang', $lang->get('install_stg_importlang_title'), 'stg_import_language', $lang->get('install_stg_importlang_body'));
+ − 1899
run_installer_stage('initlogs', $lang->get('install_stg_initlogs_title'), 'stg_init_logs', $lang->get('install_stg_initlogs_body'));
269
+ − 1900
272
e0ec986c0af3
Searching sucks, and Enano's search algorithm was complete bullcrap. So I rewrote it. No, it does not use Google search technology. Like they have a patent for using the Arial font on search result pages anyway.
Dan
diff
changeset
+ − 1901
run_installer_stage('buildindex', 'Initialize search index', 'stg_build_index', 'Something went wrong while the page manager was attempting to build a search index.');
e0ec986c0af3
Searching sucks, and Enano's search algorithm was complete bullcrap. So I rewrote it. No, it does not use Google search technology. Like they have a patent for using the Arial font on search result pages anyway.
Dan
diff
changeset
+ − 1902
270
5bcdee999015
Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
diff
changeset
+ − 1903
/*
5bcdee999015
Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
diff
changeset
+ − 1904
* HACKERS:
5bcdee999015
Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
diff
changeset
+ − 1905
* If you're making a custom distribution of Enano, put all your custom plugin-related code here.
5bcdee999015
Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
diff
changeset
+ − 1906
* You have access to the full Enano API as well as being logged in with complete admin rights.
5bcdee999015
Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
diff
changeset
+ − 1907
* Don't do anything horrendously fancy here, unless you add a new stage (or more than one) and
5bcdee999015
Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
diff
changeset
+ − 1908
* have the progress printed out properly.
5bcdee999015
Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
diff
changeset
+ − 1909
*/
5bcdee999015
Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
diff
changeset
+ − 1910
269
+ − 1911
} // check for stage == renameconfig
256
+ − 1912
else
+ − 1913
{
270
5bcdee999015
Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
diff
changeset
+ − 1914
// If we did skip the main installer routine, set $template_bak to make the reversal later work properly
269
+ − 1915
$template_bak = $template;
256
+ − 1916
}
268
58477ab3937f
Hopefully managed to put enough hacks in there to make renaming the config file the last step, so if it fails, it can be done manually
Dan
diff
changeset
+ − 1917
270
5bcdee999015
Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
diff
changeset
+ − 1918
// Final step is to rename the config file
5bcdee999015
Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
diff
changeset
+ − 1919
// In early revisions of 1.0.2, this step was performed prior to the initialization of the Enano API. It was decided to move
5bcdee999015
Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
diff
changeset
+ − 1920
// this stage to the end because it will fail more often than any other stage, thus making alternate routes imperative. If this
5bcdee999015
Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
diff
changeset
+ − 1921
// stage fails, then no big deal, we'll just have the user rename the files manually and then let them see the pretty success message.
252
+ − 1922
run_installer_stage('renameconfig', $lang->get('install_stg_rename_title'), 'stg_rename_config', $lang->get('install_stg_rename_body'));
268
58477ab3937f
Hopefully managed to put enough hacks in there to make renaming the config file the last step, so if it fails, it can be done manually
Dan
diff
changeset
+ − 1923
256
+ − 1924
close_install_table();
+ − 1925
+ − 1926
unset($template);
+ − 1927
$template =& $template_bak;
+ − 1928
252
+ − 1929
echo '<h3>' . $lang->get('install_msg_complete_title') . '</h3>';
+ − 1930
echo '<p>' . $lang->get('install_msg_complete_body', array('finish_link' => 'install.php?mode=finish')) . '</p>';
256
+ − 1931
+ − 1932
// echo '<script type="text/javascript">window.location="'.scriptPath.'/install.php?mode=finish";</script>';
+ − 1933
+ − 1934
break;
+ − 1935
case "finish":
252
+ − 1936
echo '<h3>' . $lang->get('finish_msg_congratulations') . '</h3>
+ − 1937
' . $lang->get('finish_body') . '
+ − 1938
<p>' . $lang->get('finish_link_mainpage', array('mainpage_link' => 'index.php')) . '</p>';
256
+ − 1939
break;
276
acfdccf7a2bf
Re-sync Oxygen and Mint and Oxygen simple with Oxygen main; a couple improvements to the redirect-on-no-config code
Dan
diff
changeset
+ − 1940
// this stage is never shown during the installation, but is provided for legal purposes
acfdccf7a2bf
Re-sync Oxygen and Mint and Oxygen simple with Oxygen main; a couple improvements to the redirect-on-no-config code
Dan
diff
changeset
+ − 1941
case "showlicense":
acfdccf7a2bf
Re-sync Oxygen and Mint and Oxygen simple with Oxygen main; a couple improvements to the redirect-on-no-config code
Dan
diff
changeset
+ − 1942
show_license(true);
acfdccf7a2bf
Re-sync Oxygen and Mint and Oxygen simple with Oxygen main; a couple improvements to the redirect-on-no-config code
Dan
diff
changeset
+ − 1943
break;
256
+ − 1944
}
+ − 1945
$template->footer();
+ − 1946
+ − 1947
?>