File: /volume1/web/qrcodesforeveryone/wp-content/plugins/login-lockdown/loginlockdown.php
<?php
/*
Plugin Name: Login Lockdown PRO
Plugin URI: https://wploginlockdown.com/
Description: Protect login form by banning IP after multiple failed login attempts.
Version: 5.63
Author: WebFactory Ltd
Author URI: https://www.webfactoryltd.com/
License: GNU General Public License v3.0
Text Domain: login-lockdown
Requires at least: 6.0
Tested up to: 6.9
Requires PHP: 7.4
Copyright 2022 - 2026 WebFactory Ltd (email: support@webfactoryltd.com)
Copyright 2007 - 2022 M. VanDeMar
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License, version 2, as
published by the Free Software Foundation.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
// include only file
if (!defined('ABSPATH')) {
wp_die(__('Do not open this file directly.', 'login-lockdown'));
}
define('LOGINLOCKDOWN_PLUGIN_FILE', __FILE__);
define('LOGINLOCKDOWN_PLUGIN_DIR', plugin_dir_path(__FILE__));
define('LOGINLOCKDOWN_PLUGIN_URL', plugin_dir_url(__FILE__));
define('LOGINLOCKDOWN_OPTIONS_KEY', 'loginlockdown_options');
define('LOGINLOCKDOWN_META_KEY', 'loginlockdown_meta');
define('LOGINLOCKDOWN_POINTERS_KEY', 'loginlockdown_pointers');
define('LOGINLOCKDOWN_NOTICES_KEY', 'loginlockdown_notices');
if ( ! class_exists( 'WFMaxMind\\Db\\Reader', false ) ) {
require_once LOGINLOCKDOWN_PLUGIN_DIR . 'libs/geoip/Reader/Decoder.php';
require_once LOGINLOCKDOWN_PLUGIN_DIR . 'libs/geoip/Reader/InvalidDatabaseException.php';
require_once LOGINLOCKDOWN_PLUGIN_DIR . 'libs/geoip/Reader/Metadata.php';
require_once LOGINLOCKDOWN_PLUGIN_DIR . 'libs/geoip/Reader/Util.php';
require_once LOGINLOCKDOWN_PLUGIN_DIR . 'libs/geoip/Reader.php';
}
require_once LOGINLOCKDOWN_PLUGIN_DIR . 'vendor/autoload.php';
require_once LOGINLOCKDOWN_PLUGIN_DIR . 'wf-licensing.php';
require_once LOGINLOCKDOWN_PLUGIN_DIR . 'libs/admin.php';
require_once LOGINLOCKDOWN_PLUGIN_DIR . 'libs/setup.php';
require_once LOGINLOCKDOWN_PLUGIN_DIR . 'libs/utility.php';
require_once LOGINLOCKDOWN_PLUGIN_DIR . 'libs/functions.php';
require_once LOGINLOCKDOWN_PLUGIN_DIR . 'libs/stats.php';
require_once LOGINLOCKDOWN_PLUGIN_DIR . 'libs/ajax.php';
require_once LOGINLOCKDOWN_PLUGIN_DIR . 'interface/tab_login_form.php';
require_once LOGINLOCKDOWN_PLUGIN_DIR . 'interface/tab_activity.php';
require_once LOGINLOCKDOWN_PLUGIN_DIR . 'interface/tab_temp_access.php';
require_once LOGINLOCKDOWN_PLUGIN_DIR . 'interface/tab_firewall.php';
require_once LOGINLOCKDOWN_PLUGIN_DIR . 'interface/tab_geoip.php';
require_once LOGINLOCKDOWN_PLUGIN_DIR . 'interface/tab_design.php';
require_once LOGINLOCKDOWN_PLUGIN_DIR . 'interface/tab_license.php';
// main plugin class
class LoginLockdown
{
static $version = 0;
static $pro = true;
static $licensing_servers = array('https://dashboard.wploginlockdown.com/api/');
static $type;
/**
* Setup Hooks
*
* @since 5.0
*
* @return null
*/
static function init()
{
// check if minimal required WP version is present
if (false === LoginLockdown_Setup::check_wp_version(4.6) || false === LoginLockdown_Setup::check_php_version('5.6.20')) {
return false;
}
LoginLockdown_Setup::maybe_upgrade();
LoginLockdown_Functions::handle_temporary_links();
LoginLockdown_Functions::handle_unblock();
LoginLockdown_Functions::handle_global_block();
$options = LoginLockdown_Setup::get_options();
if (is_admin()) {
// add Login Lockdown menu to admin tools menu group
add_action('admin_menu', array('LoginLockdown_Admin', 'admin_menu'));
// aditional links in plugin description and footer
add_filter('plugin_action_links_' . plugin_basename(__FILE__), array('LoginLockdown_Admin', 'plugin_action_links'));
add_filter('plugin_row_meta', array('LoginLockdown_Admin', 'plugin_meta_links'), 10, 2);
add_filter('admin_footer_text', array('LoginLockdown_Admin', 'admin_footer_text'));
if ($options['show_admin_menu'] == true) {
// add Login Lockdown menu to admin bar
add_action('wp_before_admin_bar_render', array('LoginLockdown_Admin', 'admin_bar'));
}
// settings registration
add_action('admin_init', array('LoginLockdown_Setup', 'register_settings'));
add_action('admin_notices', array('LoginLockdown_Admin', 'admin_notices'));
// enqueue admin scripts
add_action('admin_enqueue_scripts', array('LoginLockdown_Admin', 'admin_enqueue_scripts'));
// admin actions
add_action('admin_action_loginlockdown_export_settings', array('LoginLockdown_Functions', 'generate_export_file'));
add_action('admin_action_loginlockdown_install_template', array('LoginLockdown_Functions', 'install_template'));
// AJAX endpoints
add_action('wp_ajax_loginlockdown_run_tool', array('LoginLockdown_AJAX', 'ajax_run_tool'));
add_action('wp_ajax_loginlockdown_unsplash_download', array('LoginLockdown_AJAX', 'unsplash_download'));
add_action('wp_ajax_loginlockdown_unsplash_api', array('LoginLockdown_AJAX', 'unsplash_api'));
} else {
add_action('login_form', array('LoginLockdown_Functions', 'login_form_fields'));
add_action('woocommerce_login_form', array('LoginLockdown_Functions', 'login_form_fields'));
add_action('woocommerce_login_form', array('LoginLockdown_Functions', 'login_print_scripts'));
add_action('wp_login_failed', array('LoginLockdown_Functions', 'loginFailed' ), 10, 2);
add_filter('login_errors', array('LoginLockdown_Functions', 'login_error_message' ));
add_filter('wp_logout', array('LoginLockdown_Functions', 'wp_logout'), 10, 1);
add_filter('wp_login', array('LoginLockdown_Functions', 'wp_login'), 10, 2);
add_action('login_enqueue_scripts', array('LoginLockdown_Functions', 'login_enqueue_scripts' ));
add_action('login_head', array('LoginLockdown_Functions', 'login_head' ), 9999);
remove_filter('authenticate', 'wp_authenticate_username_password', 20, 3);
add_filter('authenticate', array('LoginLockdown_Functions', 'wp_authenticate_username_password'), 20, 3);
} // if not admin
if(!empty($options['login_url']) && LoginLockdown_Functions::login_compatibility_check() === true){
add_action('wp_loaded', array('LoginLockdown_Functions', 'wp_loaded' ) );
remove_action( 'template_redirect', 'wp_redirect_admin_locations', 1000 );
add_filter('login_url', array('LoginLockdown_Functions', 'login_url' ), 10, 3 );
add_filter('logout_url', array('LoginLockdown_Functions', 'logout_url' ), 10, 3 );
add_filter('site_url', array('LoginLockdown_Functions', 'site_url' ), 10, 4 );
add_filter('site_option_welcome_email', array('LoginLockdown_Functions', 'login_url_welcome_email' ) );
add_filter('site_status_tests', array('LoginLockdown_Functions', 'site_status_tests' ) );
add_filter('wp_redirect', array('LoginLockdown_Functions', 'wp_redirect' ), 10, 2 );
}
add_filter('auth_cookie_expiration', array('LoginLockdown_Functions', 'login_cookie_expiration' ));
LoginLockdown_Functions::check_2fa();
} // init
/**
* Get plugin version
*
* @since 5.0
*
* @return int plugin version
*
*/
static function get_plugin_version()
{
$plugin_data = get_file_data(__FILE__, array('version' => 'Version'), 'plugin');
self::$version = $plugin_data['version'];
return $plugin_data['version'];
} // get_plugin_version
/**
* Set plugin version and texdomain
*
* @since 5.0
*
* @return null
*/
static function plugins_loaded()
{
self::get_plugin_version();
load_plugin_textdomain('login-lockdown');
LoginLockdown_Functions::override_login_urls();
} // plugins_loaded
static function run()
{
self::plugins_loaded();
LoginLockdown_Setup::load_actions();
}
} // class LoginLockdown
/**
* Setup Hooks
*/
register_activation_hook(__FILE__, array('LoginLockdown_Setup', 'activate'));
register_deactivation_hook(__FILE__, array('LoginLockdown_Setup', 'deactivate'));
register_uninstall_hook(__FILE__, array('LoginLockdown_Setup', 'uninstall'));
add_action('plugins_loaded', array('loginlockdown', 'run'), -9999);
add_action('init', array('loginlockdown', 'init'), -1);