You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

214 lines
9.4 KiB

8 years ago
<?php
include_once(dirname(__FILE__) . '/wp-security-configure-settings.php');//Allows activating via wp-cli
class AIOWPSecurity_Installer
{
static function run_installer()
{
global $wpdb;
if (function_exists('is_multisite') && is_multisite()) {
// check if it is a network activation - if so, run the activation function for each blog id
if (isset($_GET['networkwide']) && ($_GET['networkwide'] == 1)) {
$old_blog = $wpdb->blogid;
// Get all blog ids
$blogids = $wpdb->get_col("SELECT blog_id FROM $wpdb->blogs");
foreach ($blogids as $blog_id) {
switch_to_blog($blog_id);
AIOWPSecurity_Installer::create_db_tables();
AIOWPSecurity_Configure_Settings::add_option_values();
}
AIOWPSecurity_Installer::create_db_backup_dir(); //Create a backup dir in the WP uploads directory
switch_to_blog($old_blog);
return;
}
}
AIOWPSecurity_Installer::create_db_tables();
AIOWPSecurity_Configure_Settings::add_option_values();
AIOWPSecurity_Installer::create_db_backup_dir(); //Create a backup dir in the WP uploads directory
AIOWPSecurity_Installer::miscellaneous_tasks();
}
static function create_db_tables()
{
global $wpdb;
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
//"User Login" related tables
$lockdown_tbl_name = AIOWPSEC_TBL_LOGIN_LOCKDOWN;
$failed_login_tbl_name = AIOWPSEC_TBL_FAILED_LOGINS;
$user_login_activity_tbl_name = AIOWPSEC_TBL_USER_LOGIN_ACTIVITY;
$aiowps_global_meta_tbl_name = AIOWPSEC_TBL_GLOBAL_META_DATA;
$aiowps_event_tbl_name = AIOWPSEC_TBL_EVENTS;
$perm_block_tbl_name = AIOWPSEC_TBL_PERM_BLOCK;
$charset_collate = '';
if (!empty($wpdb->charset)) {
$charset_collate = "DEFAULT CHARACTER SET $wpdb->charset";
} else {
$charset_collate = "DEFAULT CHARSET=utf8";
}
if (!empty($wpdb->collate)) {
$charset_collate .= " COLLATE $wpdb->collate";
}
$ld_tbl_sql = "CREATE TABLE " . $lockdown_tbl_name . " (
id bigint(20) NOT NULL AUTO_INCREMENT,
user_id bigint(20) NOT NULL,
user_login VARCHAR(150) NOT NULL,
lockdown_date datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
release_date datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
failed_login_ip varchar(100) NOT NULL DEFAULT '',
lock_reason varchar(128) NOT NULL DEFAULT '',
unlock_key varchar(128) NOT NULL DEFAULT '',
PRIMARY KEY (id)
)" . $charset_collate . ";";
dbDelta($ld_tbl_sql);
$fl_tbl_sql = "CREATE TABLE " . $failed_login_tbl_name . " (
id bigint(20) NOT NULL AUTO_INCREMENT,
user_id bigint(20) NOT NULL,
user_login VARCHAR(150) NOT NULL,
failed_login_date datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
login_attempt_ip varchar(100) NOT NULL DEFAULT '',
PRIMARY KEY (id)
)" . $charset_collate . ";";
dbDelta($fl_tbl_sql);
$ula_tbl_sql = "CREATE TABLE " . $user_login_activity_tbl_name . " (
id bigint(20) NOT NULL AUTO_INCREMENT,
user_id bigint(20) NOT NULL,
user_login VARCHAR(150) NOT NULL,
login_date datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
logout_date datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
login_ip varchar(100) NOT NULL DEFAULT '',
login_country varchar(150) NOT NULL DEFAULT '',
browser_type varchar(150) NOT NULL DEFAULT '',
PRIMARY KEY (id)
)" . $charset_collate . ";";
dbDelta($ula_tbl_sql);
$gm_tbl_sql = "CREATE TABLE " . $aiowps_global_meta_tbl_name . " (
meta_id bigint(20) NOT NULL auto_increment,
date_time datetime NOT NULL default '0000-00-00 00:00:00',
meta_key1 varchar(255) NOT NULL,
meta_key2 varchar(255) NOT NULL,
meta_key3 varchar(255) NOT NULL,
meta_key4 varchar(255) NOT NULL,
meta_key5 varchar(255) NOT NULL,
meta_value1 varchar(255) NOT NULL,
meta_value2 text NOT NULL,
meta_value3 text NOT NULL,
meta_value4 longtext NOT NULL,
meta_value5 longtext NOT NULL,
PRIMARY KEY (meta_id)
)" . $charset_collate . ";";
dbDelta($gm_tbl_sql);
$evt_tbl_sql = "CREATE TABLE " . $aiowps_event_tbl_name . " (
id bigint(20) NOT NULL AUTO_INCREMENT,
event_type VARCHAR(150) NOT NULL DEFAULT '',
username VARCHAR(150),
user_id bigint(20),
event_date datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
ip_or_host varchar(100),
referer_info varchar(255),
url varchar(255),
country_code varchar(50),
event_data longtext,
PRIMARY KEY (id)
)" . $charset_collate . ";";
dbDelta($evt_tbl_sql);
$pb_tbl_sql = "CREATE TABLE " . $perm_block_tbl_name . " (
id bigint(20) NOT NULL AUTO_INCREMENT,
blocked_ip varchar(100) NOT NULL DEFAULT '',
block_reason varchar(128) NOT NULL DEFAULT '',
country_origin varchar(50) NOT NULL DEFAULT '',
blocked_date datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY (id)
)" . $charset_collate . ";";
dbDelta($pb_tbl_sql);
update_option("aiowpsec_db_version", AIO_WP_SECURITY_DB_VERSION);
}
static function create_db_backup_dir()
{
global $aio_wp_security;
//Create our folder in the "wp-content" directory
$aiowps_dir = WP_CONTENT_DIR . '/' . AIO_WP_SECURITY_BACKUPS_DIR_NAME;
if (!is_dir($aiowps_dir)) {
mkdir($aiowps_dir, 0755, true);
//Let's also create an empty index.html file in this folder
$index_file = $aiowps_dir . '/index.html';
$handle = fopen($index_file, 'w'); //or die('Cannot open file: '.$index_file);
fclose($handle);
}
$server_type = AIOWPSecurity_Utility::get_server_type();
//Only create .htaccess if server is the right type
if ($server_type == 'apache' || $server_type == 'litespeed') {
$file = $aiowps_dir . '/.htaccess';
if (!file_exists($file)) {
//Create an .htacces file
//Write some rules which will only allow people originating from wp admin page to download the DB backup
$rules = '';
$rules .= 'order deny,allow' . PHP_EOL;
$rules .= 'deny from all' . PHP_EOL;
$write_result = file_put_contents($file, $rules);
if ($write_result === false) {
$aio_wp_security->debug_logger->log_debug("Creation of .htaccess file in " . AIO_WP_SECURITY_BACKUPS_DIR_NAME . " directory failed!", 4);
}
}
}
}
static function reactivation_tasks()
{
global $aio_wp_security;
$temp_cfgs = get_option('aiowps_temp_configs');
if ($temp_cfgs !== FALSE) {
//Case where previously installed plugin was reactivated
//Let's copy the original configs back to the options table
$updated = update_option('aio_wp_security_configs', $temp_cfgs);
if ($updated === FALSE) {
$aio_wp_security->debug_logger->log_debug("AIOWPSecurity_Installer::run_installer() - Update of option settings failed upon plugin activation!", 4);
}
$aio_wp_security->configs->configs = $temp_cfgs; //copy the original configs to memory
//Now let's write any rules to the .htaccess file if necessary
$res = AIOWPSecurity_Utility_Htaccess::write_to_htaccess();
if ( !$res ) {
$aio_wp_security->debug_logger->log_debug("AIOWPSecurity_Deactivation::run_deactivation_tasks() - Could not write to the .htaccess file. Please check the file permissions.", 4);
return false;
}
delete_option('aiowps_temp_configs');
return true;
} else {
$aio_wp_security->debug_logger->log_debug("AIOWPSecurity_Deactivation::run_deactivation_tasks() - Original config settings not found!", 4);
return false;
}
}
static function miscellaneous_tasks()
{
}
// //Read entire contents of file at activation time and store serialized contents in our global_meta table
// static function backup_file_contents_to_db_at_activation($src_file, $key_description)
// {
// //First check if a backup entry already exists in the global_meta table
// global $wpdb;
// $aiowps_global_meta_tbl_name = AIOWPSEC_TBL_GLOBAL_META_DATA;
// $resultset = $wpdb->get_row("SELECT * FROM $aiowps_global_meta_tbl_name WHERE meta_key1 = '$key_description'", OBJECT);
// if($resultset){
// return; //Don't override original backup if one exists - so just return
// }
//
// //Otherwise read the contents of the file and store in global_meta table
// AIOWPSecurity_Utility_File::backup_file_contents_to_db($src_file, $key_description);
// return;
// }
}