public function load()
 {
     require_once HM_LIMIT_LOGIN_DIR . 'inc/class-options.php';
     require_once HM_LIMIT_LOGIN_DIR . 'inc/class-errors.php';
     require_once HM_LIMIT_LOGIN_DIR . 'inc/class-cookies.php';
     require_once HM_LIMIT_LOGIN_DIR . 'inc/class-validation.php';
     require_once HM_LIMIT_LOGIN_DIR . 'inc/class-notifications.php';
     if (HM_LIMIT_LOGIN_VERSION !== get_option('hm_limit_login_version')) {
         $this->set_default_variables();
     }
     load_plugin_textdomain('limit-login-attempts', false, dirname(plugin_basename(__FILE__)));
     Options::get_instance();
     Errors::get_instance();
     Cookies::get_instance();
     Validation::get_instance();
     Notifications::get_instance();
 }
 /**
  * Filter: allow login attempt? (called from wp_authenticate())
  *
  * @param \WP_User|\WP_Error $user
  * @return \WP_User|\WP_Error
  */
 public function authenticate($user)
 {
     if ($this->is_ok_to_login()) {
         if ($user instanceof \WP_User) {
             $this->cleanup_on_login();
         }
         return $user;
     }
     $error = new \WP_Error();
     // This error should be the same as in "shake it" filter below
     $errors_object = Errors::get_instance();
     $errors_object->show_error();
     $error->add('too_many_retries', $errors_object->error_msg());
     return $error;
 }