| @@ -1,10 +1,11 @@ | ||
| 1 | 1 | <?php |
| 2 | 2 | /** |
| 3 | 3 | * Plugin Name: Patchstack Security |
| 4 | - * Plugin URI: https://patchstack.com | |
| 4 | + * Plugin URI: https://patchstack.com/?utm_medium=wp&utm_source=dashboard&utm_campaign=patchstack%20plugin | |
| 5 | + * Author URI: https://patchstack.com/?utm_medium=wp&utm_source=dashboard&utm_campaign=patchstack%20plugin | |
| 5 | 6 | * Description: Patchstack identifies security vulnerabilities in WordPress plugins, themes, and core. |
| 6 | - * Version: 2.1.25 | |
| 7 | + * Version: 2.2.7 | |
| 7 | 8 | * Author: Patchstack |
| 8 | 9 | * License: GPLv3 |
| 9 | 10 | * Text Domain: patchstack |
| 10 | 11 | * Domain Path: /languages |
| @@ -32,9 +33,9 @@ | ||
| 32 | 33 | |
| 33 | 34 | // Set up our filename. |
| 34 | 35 | $file_name = strtolower( str_replace( '_', '-', substr( $class_name, strlen( 'P_' ) ) ) ); |
| 35 | 36 | $dir = trailingslashit( dirname( __FILE__ ) ) . 'includes/'; |
| 36 | - $target = array( $dir . $file_name . '.php', $dir . 'admin/' . str_replace( 'admin-', '', $file_name ) . '.php' ); | |
| 37 | + $target = [ $dir . $file_name . '.php', $dir . 'admin/' . str_replace( 'admin-', '', $file_name ) . '.php' ]; | |
| 37 | 38 | |
| 38 | 39 | // Attempt each target and load if it exists. |
| 39 | 40 | foreach ( $target as $file ) { |
| 40 | 41 | if ( file_exists( $file ) ) { |
| @@ -57,9 +58,9 @@ | ||
| 57 | 58 | * The plugin version. |
| 58 | 59 | * |
| 59 | 60 | * @var string |
| 60 | 61 | */ |
| 61 | - const VERSION = '2.1.25'; | |
| 62 | + const VERSION = '2.2.7'; | |
| 62 | 63 | |
| 63 | 64 | /** |
| 64 | 65 | * API URL of Patchstack to communicate with. |
| 65 | 66 | * |
| @@ -113,9 +114,9 @@ | ||
| 113 | 114 | * Detailed activation error messages. |
| 114 | 115 | * |
| 115 | 116 | * @var array |
| 116 | 117 | */ |
| 117 | - protected $activation_errors = array(); | |
| 118 | + protected $activation_errors = []; | |
| 118 | 119 | |
| 119 | 120 | /** |
| 120 | 121 | * Singleton instance of plugin. |
| 121 | 122 | * |
| @@ -183,9 +184,9 @@ | ||
| 183 | 184 | * @return void |
| 184 | 185 | */ |
| 185 | 186 | public function plugin_classes() { |
| 186 | 187 | // Define the array of the classes. |
| 187 | - foreach ( array( | |
| 188 | + foreach ( [ | |
| 188 | 189 | 'admin_options' => 'P_Admin_Options', |
| 189 | 190 | 'cron' => 'P_Cron', |
| 190 | 191 | 'api' => 'P_Api', |
| 191 | 192 | 'login' => 'P_Login', |
| @@ -203,12 +204,13 @@ | ||
| 203 | 204 | 'notice' => 'P_Cookie_Notice', |
| 204 | 205 | 'admin_ajax' => 'P_Admin_Ajax', |
| 205 | 206 | 'admin_general' => 'P_Admin_General', |
| 206 | 207 | 'admin_menu' => 'P_Admin_Menu', |
| 207 | - ) as $var => $class ) { | |
| 208 | + ] as $var => $class ) { | |
| 208 | 209 | $this->$var = new $class( $this ); |
| 209 | 210 | } |
| 210 | 211 | |
| 212 | + // Load firewall base functionality. | |
| 211 | 213 | $this->firewall_base = new P_Firewall( true, $this, true ); |
| 212 | 214 | } |
| 213 | 215 | |
| 214 | 216 | /** |
| @@ -262,21 +264,12 @@ | ||
| 262 | 264 | $this->activation->deactivate(); |
| 263 | 265 | } |
| 264 | 266 | |
| 265 | 267 | /** |
| 266 | - * Boot Patchstack and its classes. | |
| 268 | + * Boot Patchstack. | |
| 267 | 269 | * |
| 268 | 270 | * @return void |
| 269 | 271 | */ |
| 270 | - public function hooks() { | |
| 271 | - add_action( 'init', array( $this, 'init' ), ~PHP_INT_MAX ); | |
| 272 | - } | |
| 273 | - | |
| 274 | - /** | |
| 275 | - * Boot Patchstack | |
| 276 | - * | |
| 277 | - * @return void | |
| 278 | - */ | |
| 279 | 272 | public function init() { |
| 280 | 273 | // Load translated strings for plugin. |
| 281 | 274 | load_plugin_textdomain( 'patchstack', false, dirname( $this->basename ) . '/languages/' ); |
| 282 | 275 | |
| @@ -290,9 +283,9 @@ | ||
| 290 | 283 | if ( get_option( 'patchstack_api_token', '' ) == '' && get_option( 'patchstack_license_expiry', '' ) == '' ) { |
| 291 | 284 | $this->api->update_license_status(); |
| 292 | 285 | } |
| 293 | 286 | |
| 294 | - // Determine if the license is activated and not expired. | |
| 287 | + // Run firewall if not disabled and license activated. | |
| 295 | 288 | if ( get_option( 'patchstack_license_activated', 0 ) == 1 && get_option( 'patchstack_basic_firewall', 0 ) == 1 && get_option( 'patchstack_license_free', 0 ) == 0 ) { |
| 296 | 289 | $this->firewall = new P_Firewall( true, $this ); |
| 297 | 290 | } |
| 298 | 291 | } |
| @@ -347,9 +340,9 @@ | ||
| 347 | 340 | * @return void |
| 348 | 341 | */ |
| 349 | 342 | function patchstack_uninstall() { |
| 350 | 343 | // Delete most of the Patchstack options. |
| 351 | - $options = array( 'patchstack_eventlog_lastid', 'patchstack_api_token', 'patchstack_dashboardlock', 'patchstack_pluginedit', 'patchstack_move_logs', 'patchstack_userenum', 'patchstack_basicscanblock', 'patchstack_hidewpcontent', 'patchstack_hidewpversionk', 'patchstack_prevent_default_file_access', 'patchstack_basic_firewall', 'patchstack_known_blacklist', 'patchstack_block_debug_log_access', 'patchstack_block_fake_bots', 'patchstack_index_views', 'patchstack_proxy_comment_posting', 'patchstack_bad_query_strings', 'patchstack_advanced_character_string_filter', 'patchstack_advanced_blacklist_firewall', 'patchstack_forbid_rfi', 'patchstack_image_hotlinking', 'patchstack_add_security_headers', 'patchstack_firewall_log_lastid', 'patchstack_user_log_lastid', 'patchstack_captcha_public_key', 'patchstack_captcha_private_key', 'patchstack_scan_interval', 'patchstack_scan_day', 'patchstack_scan_time', 'patchstack_hackers_log', 'patchstack_users_log', 'patchstack_visitors_log', 'external_updates-webarx', 'patchstack_wp_stats', 'patchstack_captcha_login_form', 'patchstack_license_activated', 'patchstack_license_expiry', 'patchstack_software_data_hash', 'patchstack_mv_wp_login', 'patchstack_rename_wp_login', 'patchstack_googledrive_backup_is_running', 'patchstack_googledrive_upload_state', 'patchstack_googledrive_access_token', 'patchstack_googledrive_refresh_token', 'patchstack_cron_offset', 'patchstack_htaccess_rules_hash' ); | |
| 344 | + $options = [ 'patchstack_eventlog_lastid', 'patchstack_api_token', 'patchstack_dashboardlock', 'patchstack_pluginedit', 'patchstack_move_logs', 'patchstack_userenum', 'patchstack_basicscanblock', 'patchstack_hidewpcontent', 'patchstack_hidewpversionk', 'patchstack_prevent_default_file_access', 'patchstack_basic_firewall', 'patchstack_known_blacklist', 'patchstack_block_debug_log_access', 'patchstack_block_fake_bots', 'patchstack_index_views', 'patchstack_proxy_comment_posting', 'patchstack_bad_query_strings', 'patchstack_advanced_character_string_filter', 'patchstack_advanced_blacklist_firewall', 'patchstack_forbid_rfi', 'patchstack_image_hotlinking', 'patchstack_add_security_headers', 'patchstack_firewall_log_lastid', 'patchstack_user_log_lastid', 'patchstack_captcha_public_key', 'patchstack_captcha_private_key', 'patchstack_scan_interval', 'patchstack_scan_day', 'patchstack_scan_time', 'patchstack_hackers_log', 'patchstack_users_log', 'patchstack_visitors_log', 'external_updates-webarx', 'patchstack_wp_stats', 'patchstack_captcha_login_form', 'patchstack_license_activated', 'patchstack_license_expiry', 'patchstack_software_data_hash', 'patchstack_mv_wp_login', 'patchstack_rename_wp_login', 'patchstack_googledrive_backup_is_running', 'patchstack_googledrive_upload_state', 'patchstack_googledrive_access_token', 'patchstack_googledrive_refresh_token', 'patchstack_cron_offset', 'patchstack_htaccess_rules_hash' ]; | |
| 352 | 345 | foreach ( $options as $option ) { |
| 353 | 346 | delete_option( $option ); |
| 354 | 347 | |
| 355 | 348 | if ( is_multisite() ) { |
| @@ -358,9 +351,9 @@ | ||
| 358 | 351 | } |
| 359 | 352 | |
| 360 | 353 | // Drop all Patchstack tables. |
| 361 | 354 | global $wpdb; |
| 362 | - $tables = array( 'patchstack_user_log', 'patchstack_visitor_log', 'patchstack_firewall_log', 'patchstack_file_hashes', 'patchstack_logic', 'patchstack_ip', 'patchstack_event_log' ); | |
| 355 | + $tables = [ 'patchstack_user_log', 'patchstack_visitor_log', 'patchstack_firewall_log', 'patchstack_file_hashes', 'patchstack_logic', 'patchstack_ip', 'patchstack_event_log' ]; | |
| 363 | 356 | foreach ( $tables as $table ) { |
| 364 | 357 | $wpdb->query( 'DROP TABLE IF EXISTS ' . $wpdb->prefix . $table ); |
| 365 | 358 | } |
| 366 | 359 | } |
| @@ -377,10 +370,10 @@ | ||
| 377 | 370 | } |
| 378 | 371 | } |
| 379 | 372 | |
| 380 | 373 | // Kick it off. |
| 381 | -add_action( 'plugins_loaded', array( patchstack(), 'hooks' ) ); | |
| 374 | +add_action( 'plugins_loaded', [ patchstack(), 'init' ] ); | |
| 382 | 375 | |
| 383 | 376 | // Activation and deactivation hooks. |
| 384 | -register_activation_hook( __FILE__, array( patchstack(), 'activate' ) ); | |
| 385 | -register_deactivation_hook( __FILE__, array( patchstack(), 'deactivate' ) ); | |
| 377 | +register_activation_hook( __FILE__, [ patchstack(), 'activate' ] ); | |
| 378 | +register_deactivation_hook( __FILE__, [ patchstack(), 'deactivate' ] ); | |
| 386 | 379 | register_uninstall_hook( __FILE__, 'patchstack_uninstall' ); |