Plugin Directory

Changeset 2969897


Ignore:
Timestamp:
09/21/2023 03:54:28 PM (18 months ago)
Author:
invisnet
Message:

5.2.1

Location:
wp-fail2ban/trunk
Files:
5 added
39 deleted
20 edited

Legend:

Unmodified
Added
Removed
  • wp-fail2ban/trunk/admin/lib/about.php

    r2924284 r2969897  
    271271
    272272/**
     273 * li helper
     274 *
     275 * @since  5.2.1
     276 *
     277 * @param  string   $class_wpf2b
     278 * @param  string   $class_dashicon
     279 * @param  string   $blurb
     280 */
     281function li(string $class_wpf2b, string $class_dashicon, string $blurb): void
     282{
     283    echo <<<HTML
     284<li><span class="wpf2b-{$class_wpf2b}"><span class="dashicons dashicons-{$class_dashicon}"></span> {$blurb}</span></li>
     285HTML;
     286}
     287
     288/**
    273289 * About content
    274290 *
     
    345361                        case 'good':
    346362                            // OK
    347                             printf('<li><span class="wpf2b-ok"><span class="dashicons dashicons-yes"></span> %s</span></li>', __('Up to date.', 'wp-fail2ban'));
     363                            li('ok', 'yes', __('Up to date.', 'wp-fail2ban'));
    348364                            break;
    349365                        case 'recommended':
    350                             printf('<li><span class="wpf2b-warning"><span class="dashicons dashicons-warning"></span> %s</span></li>', __('Unknown.', 'wp-fail2ban'));
     366                            li('warning', 'warning', __('Status unknown.', 'wp-fail2ban'));
    351367                            $run_site_health = true;
    352368                            break;
    353369                        case 'critical':
    354                             printf('<li><span class="wpf2b-error"><span class="dashicons dashicons-no"></span> %s</span></li>', __('Obsolete filter(s) found.', 'wp-fail2ban'));
     370                            li('error', 'no', __('Obsolete filter(s) found.', 'wp-fail2ban'));
    355371                            $run_site_health = true;
     372                            break;
     373                        case 'old':
     374                            li('warning', 'warning', __('Outdated but compatible filter(s).', 'wp-fail2ban'));
    356375                            break;
    357376                    }
     
    362381                    } elseif ('good' == $mod['status']) {
    363382                        // OK
    364                         printf('<li><span class="wpf2b-ok"><span class="dashicons dashicons-yes"></span> %s</span></li>', __('Not modified.', 'wp-fail2ban'));
     383                        li('ok', 'yes', __('Not modified.', 'wp-fail2ban'));
    365384                    } else {
    366                         printf('<li><span class="wpf2b-warning"><span class="dashicons dashicons-warning"></span> %s</span></li>', __('Modified filter(s) found.', 'wp-fail2ban'));
     385                        li('warning', 'warning', __('Modified filter(s) found.', 'wp-fail2ban'));
    367386                        $run_site_health = true;
    368387                    }
     
    374393                    } elseif ('good' == $mis['status']) {
    375394                        // OK
    376                         printf('<li><span class="wpf2b-ok"><span class="dashicons dashicons-yes"></span> %s</span></li>', __('All present.', 'wp-fail2ban'));
     395                        li('ok', 'yes', __('All filters present.', 'wp-fail2ban'));
    377396                    } else {
    378                         printf('<li><span class="wpf2b-error"><span class="dashicons dashicons-no"></span> %s</span></li>', __('Incomplete.', 'wp-fail2ban'));
     397                        li('error', 'no', __('Incomplete.', 'wp-fail2ban'));
    379398                        $run_site_health = true;
    380399                    }
  • wp-fail2ban/trunk/constants.php

    r2950789 r2969897  
    1313
    1414if (!defined('WP_FAIL2BAN_VER')) {
    15     define('WP_FAIL2BAN_VER', '5.2.0');
     15    define('WP_FAIL2BAN_VER', '5.2.1');
    1616}
    1717if (!defined('WP_FAIL2BAN_VER_SHORT')) {
     
    3131}
    3232if (!defined('WP_FAIL2BAN_VER_PATCH')) {
    33     define('WP_FAIL2BAN_VER_PATCH', '0');
     33    define('WP_FAIL2BAN_VER_PATCH', '1');
    3434}
    3535if (!defined('WP_FAIL2BAN_DIR')) {
  • wp-fail2ban/trunk/filters.d/wordpress-extra.conf

    r2950789 r2969897  
    11# Fail2Ban filter for extra failures
    2 # Auto-generated: 2023-08-09T16:41:11+01:00
     2# Auto-generated: 2023-09-21T15:50:20+01:00
    33#
    44
  • wp-fail2ban/trunk/filters.d/wordpress-hard.conf

    r2950789 r2969897  
    11# Fail2Ban filter for hard failures
    2 # Auto-generated: 2023-08-09T16:41:11+01:00
     2# Auto-generated: 2023-09-21T15:50:20+01:00
    33#
    44
  • wp-fail2ban/trunk/filters.d/wordpress-soft.conf

    r2950789 r2969897  
    11# Fail2Ban filter for soft failures
    2 # Auto-generated: 2023-08-09T16:41:11+01:00
     2# Auto-generated: 2023-09-21T15:50:20+01:00
    33#
    44
  • wp-fail2ban/trunk/init.php

    r2866297 r2969897  
    184184             */
    185185            if (defined('WP_FAIL2BAN_XMLRPC_LOG') && WP_FAIL2BAN_XMLRPC_LOG) {
    186                 xmlrpc_log(); // @codeCoverageIgnore
     186                feature\xmlrpc_log(); // @codeCoverageIgnore
    187187            }
    188188            /**
  • wp-fail2ban/trunk/lib/hashes.php

    r2950789 r2969897  
    66 * @since   5.0.0
    77 *
    8  * Auto-generated: 2023-08-09T16:31:04+01:00
     8 * Auto-generated: 2023-09-20T14:30:11+01:00
    99 */
    1010namespace    org\lecklider\charles\wordpress\wp_fail2ban;
     
    1515// @codeCoverageIgnoreStart
    1616define('WP_FAIL2BAN_HASHES', array (
     17  '182bdc01a8078c27833f6fc021740b9844785b3d' =>
     18  array (
     19    'hard' => '5.2.0',
     20  ),
     21  '5601dfbf66564f260075825a36be11c3efd8a429' =>
     22  array (
     23    'soft' => '5.2.0',
     24  ),
     25  '3572d8451fc20535288530157906929ac1a7af06' =>
     26  array (
     27    'extra' => '5.2.0',
     28  ),
    1729  'a4a5a796cd298ff861137d4c57e7e572fd2f3624' =>
    1830  array (
     
    255267    'soft' => '4.3.4.0',
    256268  ),
     269  'a1da3ee89e838a9a5aa4fa21725701ba08b267ea' =>
     270  array (
     271    'hard' => '5.1.0.4',
     272  ),
    257273  '65db493c6d82a1cf253ce11d4f49f63ad5c9ca06' =>
    258274  array (
    259275    'soft' => '5.1.0.4',
    260276  ),
    261   'a1da3ee89e838a9a5aa4fa21725701ba08b267ea' =>
    262   array (
    263     'hard' => '5.1.0.4',
    264   ),
    265277  'ed284bb74147632ced519ddbeb457aff87b1141f' =>
    266278  array (
     
    387399    'extra' => '4.2.7.1',
    388400  ),
     401  'd02780e21ed306cba65bbf042accd607e6dcd8f4' =>
     402  array (
     403    'soft' => '5.1.0.5',
     404  ),
    389405  '2871319d7a942365373aeae529db8bcfe3d54018' =>
    390406  array (
    391407    'extra' => '5.1.0.5',
    392408  ),
    393   'd02780e21ed306cba65bbf042accd607e6dcd8f4' =>
    394   array (
    395     'soft' => '5.1.0.5',
    396   ),
    397409  '9b873b82963e0be0a81c13310e3ebec910e612f8' =>
    398410  array (
     
    571583    'extra' => '5.1.1',
    572584  ),
     585  '84404d97cbb9db18b47fdf48315e007982ba5443' =>
     586  array (
     587    'soft' => '5.1.1',
     588  ),
    573589  '802c4804a6f38b003a15639f8ae1fc4f5679e0f1' =>
    574590  array (
    575591    'hard' => '5.1.1',
    576   ),
    577   '84404d97cbb9db18b47fdf48315e007982ba5443' =>
    578   array (
    579     'soft' => '5.1.1',
    580592  ),
    581593  '00d5e11958eaedeb360342d7391ae14ae4823d36' =>
  • wp-fail2ban/trunk/lib/loader.php

    r2924284 r2969897  
    338338                'misc',
    339339                'last-log',
     340                'disabled']],
     341        'WP_FAIL2BAN_SITE_HEALTH_SKIP_FILTERS' => [
     342            'validate'  => 'boolval',
     343            'unset'     => false,
     344            'field'     => [
     345                'misc',
     346                'site-health',
     347                'filters',
    340348                'disabled']],
    341349    ];
  • wp-fail2ban/trunk/lib/site-health.php

    r2950789 r2969897  
    1515    const PREFIX = '[WP fail2ban] ';
    1616
     17    const FAIL2BAN_PATHS = [
     18        '/etc/fail2ban',
     19        '/usr/local/etc/fail2ban'
     20    ];
     21
    1722    protected static $instance = null;
    1823
     
    3035        }
    3136        return self::$instance;
     37    }
     38
     39    /**
     40     * Should we skip checking the filters?
     41     *
     42     * @since  5.2.1
     43     *
     44     * @return bool
     45     */
     46    public static function should_skip_filters(): bool
     47    {
     48        if (Config::get('WP_FAIL2BAN_SITE_HEALTH_SKIP_FILTERS')) {
     49            return true;
     50        }
     51
     52        if (!empty($open_basedir = ini_get('open_basedir'))) {
     53            $path = \untrailingslashit(self::get_fail2ban_path());
     54
     55            return (false !== strpos($open_basedir, $path));
     56        }
     57
     58        return false;
    3259    }
    3360
     
    6188            'test'  => [$instance, 'get_test_fail2ban_running']
    6289            ];
    63         if (!defined('WP_FAIL2BAN_SITE_HEALTH_SKIP_FILTERS')) {
     90        if (!self::should_skip_filters()) {
    6491            $tests['direct']['wp_fail2ban_filter_obsolete'] = [
    6592                'label' => 'WP fail2ban obsolete filters',
     
    75102            ];
    76103        }
    77         $tests['direct']['wp_fail2ban_blocklist_installed'] = [
    78             'label' => 'WP fail2ban Blocklist installed',
    79             'test'  => [$instance, 'get_test_blocklist_installed']
    80         ];
    81         $tests['direct']['wp_fail2ban_cf7_installed'] = [
    82             'label' => 'Add-on for Contact Form 7 installed',
    83             'test'  => [$instance, 'get_test_cf7_installed']
    84         ];
    85         $tests['direct']['wp_fail2ban_gf_installed'] = [
    86             'label' => 'Add-on for Gravity Forms installed',
    87             'test'  => [$instance, 'get_test_gf_installed']
    88         ];
     104        if (!defined('WP_FAIL2BAN_SITE_HEALTH_SKIP_RECOMMEND') ||
     105            ( is_array(WP_FAIL2BAN_SITE_HEALTH_SKIP_RECOMMEND) &&
     106              true !== WP_FAIL2BAN_SITE_HEALTH_SKIP_RECOMMEND['addon']['wpf2b-addon-blocklist'] ?? false))
     107        {
     108            $tests['direct']['wp_fail2ban_blocklist_installed'] = [
     109                'label' => 'WP fail2ban Blocklist installed',
     110                'test'  => [$instance, 'get_test_blocklist_installed']
     111            ];
     112        }
     113        if (!defined('WP_FAIL2BAN_SITE_HEALTH_SKIP_RECOMMEND') ||
     114            ( is_array(WP_FAIL2BAN_SITE_HEALTH_SKIP_RECOMMEND) &&
     115              true !== WP_FAIL2BAN_SITE_HEALTH_SKIP_RECOMMEND['addon']['wp-fail2ban-addon-contact-form-7'] ?? false))
     116        {
     117            $tests['direct']['wp_fail2ban_cf7_installed'] = [
     118                'label' => 'Add-on for Contact Form 7 installed',
     119                'test'  => [$instance, 'get_test_cf7_installed']
     120            ];
     121        }
     122        if (!defined('WP_FAIL2BAN_SITE_HEALTH_SKIP_RECOMMEND') ||
     123            ( is_array(WP_FAIL2BAN_SITE_HEALTH_SKIP_RECOMMEND) &&
     124              true !== WP_FAIL2BAN_SITE_HEALTH_SKIP_RECOMMEND['addon']['wp-fail2ban-addon-gravity-forms'] ?? false))
     125        {
     126            $tests['direct']['wp_fail2ban_gf_installed'] = [
     127                'label' => 'Add-on for Gravity Forms installed',
     128                'test'  => [$instance, 'get_test_gf_installed']
     129            ];
     130        }
    89131
    90132        return $tests;
     
    230272
    231273        } else {
    232             $paths = [
    233                 '/etc/fail2ban/'.$suffix,
    234                 '/usr/local/etc/fail2ban/'.$suffix
    235             ];
     274            $paths = array_map(function ($e) use ($suffix) {
     275                return trailingslashit($e).$suffix;
     276            }, self::FAIL2BAN_PATHS);
    236277
    237278            foreach ($paths as $path) {
     
    586627                        );
    587628                        if (count($failure['reasons'] ?? [])) {
    588                             $output .= ': '.join('; ', $failure['reasons']);
     629                            $output .= ': '.join('; ', array_map(function ($v) {
     630                                return rtrim($v, '.');
     631                            }, $failure['reasons']));
    589632                        }
    590633                        $output .= '.</li>';
     
    596639            $results['description'] = $output;
    597640
    598         } elseif (($status['old'])) {
    599             $results['label'] = __('One or more of your fail2ban filters are out of date', 'wp-fail2ban');
    600             $results['status'] = 'recommended';
    601             $output = sprintf('<p>%s</p>', __('The existing <code>fail2ban</code> filters listed below will work with your current configuration. If you enable a feature added or changed since the filter version, it will not work correctly until you update the filters.', 'wp-fail2ban'));
    602             $output .= '<ul>';
    603             foreach ($failures as $filter => $failure) {
    604                 switch ($failure['status']) {
    605                     case 'old':
    606                         $output .= '<li><span class="dashicons dashicons-info" style="color: #72aee6"></span> '.sprintf(
    607                             /* translators: %s: The filter name. */
    608                             __('%s is from version %s', 'wp-fail2ban'),
    609                             "<code>wordpress-{$filter}.conf</code>",
    610                             $failure['version']
    611                         );
    612                         if (count($failure['reasons'] ?? [])) {
    613                             $output .= ': '.join('; ', $failure['reasons']);
    614                         }
    615                         $output .= '.</li>';
    616                         break;
    617                 }
    618             }
    619             $output .= '</ul>';
    620             $output .= $this->update_filters_asap(false);
    621             $results['description'] = $output;
     641        } elseif ($status['old']) {
     642            $results['label'] = __('One or more of your fail2ban filters are out of date, but compatible', 'wp-fail2ban');
     643            $results['description'] = __('Your filters are compatible with your current configuration. There is no need to update them at this time.', 'wp-fail2ban');
     644            $results['old'] = 'old';
    622645
    623646        } elseif ($status['custom']) {
  • wp-fail2ban/trunk/readme.txt

    r2950789 r2969897  
    11=== WP fail2ban - Advanced Security Plugin ===
    22Contributors: invisnet
    3 Author URI: https://invis.net/?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.0
    4 Plugin URI: https://wp-fail2ban.com/?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.0
     3Author URI: https://invis.net/?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.1
     4Plugin URI: https://wp-fail2ban.com/?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.1
    55Tags: fail2ban, login, security, syslog, brute force, protection, classicpress
    66Requires at least: 4.2
    77Tested up to: 6.3
    8 Stable tag: 5.2.0
     8Stable tag: 5.2.1
    99Requires PHP: 7.4
    1010License: GPLv3 or later
     
    1515== Description ==
    1616
    17 [fail2ban](http://www.fail2ban.org/?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.0) is one of the simplest and most effective security measures you can implement to protect your WordPress site.
     17[fail2ban](http://www.fail2ban.org/?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.1) is one of the simplest and most effective security measures you can implement to protect your WordPress site.
    1818
    1919*WP fail2ban* provides the link between WordPress and `fail2ban`:
     
    3030 
    3131* **Block User Enumeration**
    32   One of the most common precursors to a password-guessing brute force attack is [user enumeration](https://wp-fail2ban.com/features/block-user-enumeration/?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.0). *WPf2b* can block it, stopping the attack before it starts.
     32  One of the most common precursors to a password-guessing brute force attack is [user enumeration](https://wp-fail2ban.com/features/block-user-enumeration/?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.1). *WPf2b* can block it, stopping the attack before it starts.
    3333
    3434* **Block username logins**
     
    5858
    5959* **Cloudflare and Proxy Servers**
    60   *WPf2b* will work with [Cloudflare](https://wp-fail2ban.com/features/cloudflare-and-proxy-servers/?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.0), and the Premium version will automatically update the list of Cloudflare IP addresses.
     60  *WPf2b* will work with [Cloudflare](https://wp-fail2ban.com/features/cloudflare-and-proxy-servers/?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.1), and the Premium version will automatically update the list of Cloudflare IP addresses.
    6161  You can also configure your own list of trusted proxies.
    6262
     
    6969
    7070* **`mu-plugins` Support**
    71   *WPf2b* can easily be configured as a "must-use plugin" - see [Configuration](https://docs.wp-fail2ban.com/en/5.2/configuration.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.0#mu-plugins-support).
     71  *WPf2b* can easily be configured as a "must-use plugin" - see [Configuration](https://docs.wp-fail2ban.com/en/5.2/configuration.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.1#mu-plugins-support).
    7272
    7373* **API to Extend *WPf2b***
     
    7575
    7676* **Event Hooks** [Premium]
    77   Need to do something special when *WPf2b* detects a particular event? [There's a hook for that](https://docs.wp-fail2ban.com/en/5.2/developers/events.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.0).
     77  Need to do something special when *WPf2b* detects a particular event? [There's a hook for that](https://docs.wp-fail2ban.com/en/5.2/developers/events.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.1).
    7878
    7979= Premium =
     
    91911. Install via the Plugin Directory, or upload to your plugins directory.
    92921. Activate the plugin through the 'Plugins' menu in WordPress.
    93 1. Edit `wp‑config.php` to suit your needs - see [Configuration](https://docs.wp-fail2ban.com/en/5.2/configuration.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.0).
     931. Edit `wp‑config.php` to suit your needs - see [Configuration](https://docs.wp-fail2ban.com/en/5.2/configuration.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.1).
    9494
    9595== Changelog ==
     96
     97= 5.2.1 =
     98* Fix bug in WAF when not logged in (h/t Rudi Diedrich). [Premium only]
     99* Site Health: Add support for `open_basedir` (h/t Jaroslav Huba).
     100* Update Freemius library.
    96101
    97102= 5.2.0 =
     
    167172
    168173= 4.4.0.2 =
    169 * Add [`WP_FAIL2BAN_USE_AUTHPRIV`](https://docs.wp-fail2ban.com/en/4.4/defines/WP_FAIL2BAN_USE_AUTHPRIV.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.0) - a single place to switch to `LOG_AUTHPRIV` for systems without `LOG_AUTH`.
    170 * Add [`WP_FAIL2BAN_FREE_ONLY`](https://docs.wp-fail2ban.com/en/4.4/defines/WP_FAIL2BAN_FREE_ONLY.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.0).
    171 * Add [`WP_FAIL2BAN_PLUGIN_LOG_OTHER`](https://docs.wp-fail2ban.com/en/4.4/defines/WP_FAIL2BAN_PLUGIN_LOG_OTHER.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.0) and [`WP_FAIL2BAN_PLUGIN_OTHER_LOG`](https://docs.wp-fail2ban.com/en/4.4/defines/WP_FAIL2BAN_PLUGIN_OTHER_LOG.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.0).
     174* Add [`WP_FAIL2BAN_USE_AUTHPRIV`](https://docs.wp-fail2ban.com/en/4.4/defines/WP_FAIL2BAN_USE_AUTHPRIV.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.1) - a single place to switch to `LOG_AUTHPRIV` for systems without `LOG_AUTH`.
     175* Add [`WP_FAIL2BAN_FREE_ONLY`](https://docs.wp-fail2ban.com/en/4.4/defines/WP_FAIL2BAN_FREE_ONLY.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.1).
     176* Add [`WP_FAIL2BAN_PLUGIN_LOG_OTHER`](https://docs.wp-fail2ban.com/en/4.4/defines/WP_FAIL2BAN_PLUGIN_LOG_OTHER.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.1) and [`WP_FAIL2BAN_PLUGIN_OTHER_LOG`](https://docs.wp-fail2ban.com/en/4.4/defines/WP_FAIL2BAN_PLUGIN_OTHER_LOG.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.1).
    172177* Improve performance.
    173178* Moved cron event to update trusted Cloudflare IP ranges to the Cloudflare add-on. [Premium only]
     
    185190
    186191= 4.3.2.1 =
    187 * Add support for [WP fail2ban Blocklist](https://addons.wp-fail2ban.com/blocklist/?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.0).
     192* Add support for [WP fail2ban Blocklist](https://addons.wp-fail2ban.com/blocklist/?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.1).
    188193* Add new [Standard Configurations](https://github.com/wp-fail2ban/conf.d/).
    189194* Improve Help links.
     
    226231= 4.3.0.4 "Columbo" =
    227232* Add new dashboard widget: last 5 `syslog` messages.
    228 * Add full [multisite support](https://wp-fail2ban.com/features/multisite-networks/?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.0).
    229 * Add [username login blocking](https://wp-fail2ban.com/features/block-username-logins/?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.0) (force login with email).
    230 * Add [separate logging](https://wp-fail2ban.com/features/empty-username-logging/?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.0) for login attempts with an empty username.
    231 * Improve [user enumeration blocking](https://wp-fail2ban.com/features/block-user-enumeration/?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.0) compatibility with the WordPress block editor (Gutenberg).
     233* Add full [multisite support](https://wp-fail2ban.com/features/multisite-networks/?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.1).
     234* Add [username login blocking](https://wp-fail2ban.com/features/block-username-logins/?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.1) (force login with email).
     235* Add [separate logging](https://wp-fail2ban.com/features/empty-username-logging/?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.1) for login attempts with an empty username.
     236* Improve [user enumeration blocking](https://wp-fail2ban.com/features/block-user-enumeration/?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.1) compatibility with the WordPress block editor (Gutenberg).
    232237* Bump the minimum PHP version to 5.6.
    233238
    234239= 4.2.8 =
    235 * Add link to new [support forum](https://forums.invis.net/c/wp-fail2ban/?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.0).
     240* Add link to new [support forum](https://forums.invis.net/c/wp-fail2ban/?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.1).
    236241* Fix user enumeration conflict with Gutenberg (h/t @dinghy).
    237242* Fix notices wrt admin menu (h/t @marioivangf).
     
    247252
    248253= 4.2.6 =
    249 * Add support for [Remote Tools](https://wp-fail2ban.com/add-ons/remote-tools/?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.0) add-on.
     254* Add support for [Remote Tools](https://wp-fail2ban.com/add-ons/remote-tools/?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.1) add-on.
    250255* Add support for the new ClassicPress security page.
    251256* Improved user enumeration blocking.
     
    273278
    274279= 4.2.1 =
    275 * Completed support for [`WP_FAIL2BAN_COMMENT_EXTRA_LOG`](https://docs.wp-fail2ban.com/en/4.2/defines/WP_FAIL2BAN_COMMENT_EXTRA_LOG.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.0).
    276 * Add support for 3rd-party plugins; see [Developers](https://docs.wp-fail2ban.com/en/4.2/developers.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.0).
     280* Completed support for [`WP_FAIL2BAN_COMMENT_EXTRA_LOG`](https://docs.wp-fail2ban.com/en/4.2/defines/WP_FAIL2BAN_COMMENT_EXTRA_LOG.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.1).
     281* Add support for 3rd-party plugins; see [Developers](https://docs.wp-fail2ban.com/en/4.2/developers.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.1).
    277282  * Add-on for [Contact Form 7](https://wordpress.org/plugins/wp-fail2ban-addon-contact-form-7/) (experimental).
    278283  * Add-on for [Gravity Forms](https://wordpress.org/plugins/wp-fail2ban-addon-gravity-forms/) (experimental).
     
    286291= 4.1.0 =
    287292* Add separate logging for REST authentication.
    288 * Fix conflict with earlier versions preinstalled in `mu‑plugins`. See [Is *WPf2b* Already Installed?](https://docs.wp-fail2ban.com/en/4.1/installation.html#is-wp-fail2ban-already-installed?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.0).
     293* Fix conflict with earlier versions preinstalled in `mu‑plugins`. See [Is *WPf2b* Already Installed?](https://docs.wp-fail2ban.com/en/4.1/installation.html#is-wp-fail2ban-already-installed?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.1).
    289294
    290295= 4.0.5 =
    291 * Add [`WP_FAIL2BAN_COMMENT_EXTRA_LOG`](https://docs.wp-fail2ban.com/en/4.1/defines/WP_FAIL2BAN_COMMENT_EXTRA_LOG.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.0).
    292 * Add [`WP_FAIL2BAN_PINGBACK_ERROR_LOG`](https://docs.wp-fail2ban.com/en/4.1/defines/WP_FAIL2BAN_PINGBACK_ERROR_LOG.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.0) (future functionality).
     296* Add [`WP_FAIL2BAN_COMMENT_EXTRA_LOG`](https://docs.wp-fail2ban.com/en/4.1/defines/WP_FAIL2BAN_COMMENT_EXTRA_LOG.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.1).
     297* Add [`WP_FAIL2BAN_PINGBACK_ERROR_LOG`](https://docs.wp-fail2ban.com/en/4.1/defines/WP_FAIL2BAN_PINGBACK_ERROR_LOG.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.1) (future functionality).
    293298* Change `WP_FAIL2BAN_LOG_SPAM` to use `LOG_NOTICE`.
    294299* Change `WP_FAIL2BAN_SPAM_LOG` to `LOG_AUTH`.
     
    304309* Add extra features via Freemius. **This is entirely optional.** *WPf2b* works as before, including new features listed here.
    305310* Add settings summary page (Settings -> WP fail2ban).
    306 * Add [`WP_FAIL2BAN_PASSWORD_REQUEST_LOG`](https://docs.wp-fail2ban.com/en/4.1/defines/WP_FAIL2BAN_PASSWORD_REQUEST_LOG.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.0).
    307 * Add [`WP_FAIL2BAN_SPAM_LOG`](https://docs.wp-fail2ban.com/en/4.1/defines/WP_FAIL2BAN_SPAM_LOG.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.0).
    308 * Add [`WP_FAIL2BAN_LOG_COMMENTS_EXTRA`](https://docs.wp-fail2ban.com/en/4.1/defines/WP_FAIL2BAN_LOG_COMMENTS_EXTRA.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.0) - enable logging for attempted comments on posts which are:
     311* Add [`WP_FAIL2BAN_PASSWORD_REQUEST_LOG`](https://docs.wp-fail2ban.com/en/4.1/defines/WP_FAIL2BAN_PASSWORD_REQUEST_LOG.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.1).
     312* Add [`WP_FAIL2BAN_SPAM_LOG`](https://docs.wp-fail2ban.com/en/4.1/defines/WP_FAIL2BAN_SPAM_LOG.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.1).
     313* Add [`WP_FAIL2BAN_LOG_COMMENTS_EXTRA`](https://docs.wp-fail2ban.com/en/4.1/defines/WP_FAIL2BAN_LOG_COMMENTS_EXTRA.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.1) - enable logging for attempted comments on posts which are:
    309314  * not found,
    310315  * closed for commenting,
     
    318323
    319324= 3.6.0 =
    320 * The [filter files](https://docs.wp-fail2ban.com/en/4.1/filters.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.0) are now generated from PHPDoc in the code. There were too many times when the filters were out of sync with the code (programmer error) - this should resolve that by bringing the patterns closer to the code that emits them.
    321 * Added [PHPUnit tests](https://docs.wp-fail2ban.com/en/4.1/tests.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.0). Almost 100% code coverage, with the exception of [`WP_FAIL2BAN_PROXIES`](https://docs.wp-fail2ban.com/en/4.1/defines/WP_FAIL2BAN_PROXIES.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.0) which is quite hard to test properly.
    322 * Bug-fix for [`wordpress-soft.conf`](https://docs.wp-fail2ban.com/en/4.1/filters.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.0#wordpress-soft-conf).
    323 * Add [`WP_FAIL2BAN_XMLRPC_LOG`](https://docs.wp-fail2ban.com/en/4.1/defines/WP_FAIL2BAN_XMLRPC_LOG.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.0).
    324 * Add [`WP_FAIL2BAN_REMOTE_ADDR`](https://docs.wp-fail2ban.com/en/4.1/defines/WP_FAIL2BAN_REMOTE_ADDR.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.0).
    325 * [`WP_FAIL2BAN_PROXIES`](https://docs.wp-fail2ban.com/en/4.1/defines/WP_FAIL2BAN_PROXIES.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.0) now supports an array of IPs with PHP 7.
    326 * Moved all documentation to [https://docs.wp-fail2ban.com/](https://docs.wp-fail2ban.com/?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.0).
     325* The [filter files](https://docs.wp-fail2ban.com/en/4.1/filters.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.1) are now generated from PHPDoc in the code. There were too many times when the filters were out of sync with the code (programmer error) - this should resolve that by bringing the patterns closer to the code that emits them.
     326* Added [PHPUnit tests](https://docs.wp-fail2ban.com/en/4.1/tests.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.1). Almost 100% code coverage, with the exception of [`WP_FAIL2BAN_PROXIES`](https://docs.wp-fail2ban.com/en/4.1/defines/WP_FAIL2BAN_PROXIES.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.1) which is quite hard to test properly.
     327* Bug-fix for [`wordpress-soft.conf`](https://docs.wp-fail2ban.com/en/4.1/filters.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.1#wordpress-soft-conf).
     328* Add [`WP_FAIL2BAN_XMLRPC_LOG`](https://docs.wp-fail2ban.com/en/4.1/defines/WP_FAIL2BAN_XMLRPC_LOG.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.1).
     329* Add [`WP_FAIL2BAN_REMOTE_ADDR`](https://docs.wp-fail2ban.com/en/4.1/defines/WP_FAIL2BAN_REMOTE_ADDR.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.1).
     330* [`WP_FAIL2BAN_PROXIES`](https://docs.wp-fail2ban.com/en/4.1/defines/WP_FAIL2BAN_PROXIES.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.1) now supports an array of IPs with PHP 7.
     331* Moved all documentation to [https://docs.wp-fail2ban.com/](https://docs.wp-fail2ban.com/?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.1).
    327332
    328333= 3.5.3 =
    329 * Bug-fix for [`wordpress-hard.conf`](https://docs.wp-fail2ban.com/en/4.1/filters.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.0#wordpress-hard-conf).
     334* Bug-fix for [`wordpress-hard.conf`](https://docs.wp-fail2ban.com/en/4.1/filters.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.1#wordpress-hard-conf).
    330335
    331336= 3.5.1 =
    332 * Bug-fix for [`WP_FAIL2BAN_BLOCK_USER_ENUMERATION`](https://docs.wp-fail2ban.com/en/4.1/defines/WP_FAIL2BAN_BLOCK_USER_ENUMERATION.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.0).
     337* Bug-fix for [`WP_FAIL2BAN_BLOCK_USER_ENUMERATION`](https://docs.wp-fail2ban.com/en/4.1/defines/WP_FAIL2BAN_BLOCK_USER_ENUMERATION.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.1).
    333338
    334339= 3.5.0 =
    335 * Add [`WP_FAIL2BAN_OPENLOG_OPTIONS`](https://docs.wp-fail2ban.com/en/4.1/defines/WP_FAIL2BAN_OPENLOG_OPTIONS.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.0).
    336 * Add [`WP_FAIL2BAN_LOG_COMMENTS`](https://docs.wp-fail2ban.com/en/4.1/defines/WP_FAIL2BAN_LOG_COMMENTS.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.0) and [`WP_FAIL2BAN_COMMENT_LOG`](https://docs.wp-fail2ban.com/en/4.1/defines/WP_FAIL2BAN_COMMENT_LOG.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.0).
    337 * Add [`WP_FAIL2BAN_LOG_PASSWORD_REQUEST`](https://docs.wp-fail2ban.com/en/4.1/defines/WP_FAIL2BAN_LOG_PASSWORD_REQUEST.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.0).
    338 * Add [`WP_FAIL2BAN_LOG_SPAM`](https://docs.wp-fail2ban.com/en/4.1/defines/WP_FAIL2BAN_LOG_SPAM.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.0).
    339 * Add [`WP_FAIL2BAN_TRUNCATE_HOST`](https://docs.wp-fail2ban.com/en/4.1/defines/WP_FAIL2BAN_TRUNCATE_HOST.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.0).
    340 * [`WP_FAIL2BAN_BLOCKED_USERS`](https://docs.wp-fail2ban.com/en/4.1/defines/WP_FAIL2BAN_BLOCKED_USERS.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.0) now supports an array of users with PHP 7.
     340* Add [`WP_FAIL2BAN_OPENLOG_OPTIONS`](https://docs.wp-fail2ban.com/en/4.1/defines/WP_FAIL2BAN_OPENLOG_OPTIONS.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.1).
     341* Add [`WP_FAIL2BAN_LOG_COMMENTS`](https://docs.wp-fail2ban.com/en/4.1/defines/WP_FAIL2BAN_LOG_COMMENTS.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.1) and [`WP_FAIL2BAN_COMMENT_LOG`](https://docs.wp-fail2ban.com/en/4.1/defines/WP_FAIL2BAN_COMMENT_LOG.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.1).
     342* Add [`WP_FAIL2BAN_LOG_PASSWORD_REQUEST`](https://docs.wp-fail2ban.com/en/4.1/defines/WP_FAIL2BAN_LOG_PASSWORD_REQUEST.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.1).
     343* Add [`WP_FAIL2BAN_LOG_SPAM`](https://docs.wp-fail2ban.com/en/4.1/defines/WP_FAIL2BAN_LOG_SPAM.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.1).
     344* Add [`WP_FAIL2BAN_TRUNCATE_HOST`](https://docs.wp-fail2ban.com/en/4.1/defines/WP_FAIL2BAN_TRUNCATE_HOST.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.1).
     345* [`WP_FAIL2BAN_BLOCKED_USERS`](https://docs.wp-fail2ban.com/en/4.1/defines/WP_FAIL2BAN_BLOCKED_USERS.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.1) now supports an array of users with PHP 7.
    341346
    342347= 3.0.3 =
    343 * Fix regex in [`wordpress-hard.conf`](https://docs.wp-fail2ban.com/en/4.1/filters.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.0#wordpress-hard-conf).
     348* Fix regex in [`wordpress-hard.conf`](https://docs.wp-fail2ban.com/en/4.1/filters.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.1#wordpress-hard-conf).
    344349
    345350= 3.0.2 =
     
    347352
    348353= 3.0.1 =
    349 * Fix regex in [`wordpress-hard.conf`](https://docs.wp-fail2ban.com/en/4.1/filters.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.0#wordpress-hard-conf).
     354* Fix regex in [`wordpress-hard.conf`](https://docs.wp-fail2ban.com/en/4.1/filters.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.1#wordpress-hard-conf).
    350355
    351356= 3.0.0 =
    352 * Add [`WP_FAIL2BAN_SYSLOG_SHORT_TAG`](https://docs.wp-fail2ban.com/en/4.1/defines/WP_FAIL2BAN_SYSLOG_SHORT_TAG.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.0).
    353 * Add [`WP_FAIL2BAN_HTTP_HOST`](https://docs.wp-fail2ban.com/en/4.1/defines/WP_FAIL2BAN_HTTP_HOST.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.0).
     357* Add [`WP_FAIL2BAN_SYSLOG_SHORT_TAG`](https://docs.wp-fail2ban.com/en/4.1/defines/WP_FAIL2BAN_SYSLOG_SHORT_TAG.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.1).
     358* Add [`WP_FAIL2BAN_HTTP_HOST`](https://docs.wp-fail2ban.com/en/4.1/defines/WP_FAIL2BAN_HTTP_HOST.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.1).
    354359* Log XML‑RPC authentication failure.
    355360* Add better support for MU deployment.
    356361
    357362= 2.3.2 =
    358 * Bug-fix [`WP_FAIL2BAN_BLOCKED_USERS`](https://docs.wp-fail2ban.com/en/4.1/defines/WP_FAIL2BAN_BLOCKED_USERS.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.0).
     363* Bug-fix [`WP_FAIL2BAN_BLOCKED_USERS`](https://docs.wp-fail2ban.com/en/4.1/defines/WP_FAIL2BAN_BLOCKED_USERS.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.1).
    359364
    360365= 2.3.0 =
    361 * Bug-fix in *experimental* [`WP_FAIL2BAN_PROXIES`](https://docs.wp-fail2ban.com/en/4.1/defines/WP_FAIL2BAN_PROXIES.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.0) code (thanks to KyleCartmell).
     366* Bug-fix in *experimental* [`WP_FAIL2BAN_PROXIES`](https://docs.wp-fail2ban.com/en/4.1/defines/WP_FAIL2BAN_PROXIES.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.1) code (thanks to KyleCartmell).
    362367
    363368= 2.2.1 =
    364 * Fix stupid mistake with [`WP_FAIL2BAN_BLOCKED_USERS`](https://docs.wp-fail2ban.com/en/4.1/defines/WP_FAIL2BAN_BLOCKED_USERS.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.0).
     369* Fix stupid mistake with [`WP_FAIL2BAN_BLOCKED_USERS`](https://docs.wp-fail2ban.com/en/4.1/defines/WP_FAIL2BAN_BLOCKED_USERS.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.1).
    365370
    366371= 2.2.0 =
    367 * Custom authentication log is now called [`WP_FAIL2BAN_AUTH_LOG`](https://docs.wp-fail2ban.com/en/4.1/defines/WP_FAIL2BAN_AUTH_LOG.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.0).
    368 * Add logging for pingbacks; see [`WP_FAIL2BAN_LOG_PINGBACKS`](https://docs.wp-fail2ban.com/en/4.1/defines/WP_FAIL2BAN_LOG_PINGBACKS.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.0).
    369 * Custom pingback log is called [`WP_FAIL2BAN_PINGBACK_LOG`](https://docs.wp-fail2ban.com/en/4.1/defines/WP_FAIL2BAN_PINGBACK_LOG.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.0).
     372* Custom authentication log is now called [`WP_FAIL2BAN_AUTH_LOG`](https://docs.wp-fail2ban.com/en/4.1/defines/WP_FAIL2BAN_AUTH_LOG.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.1).
     373* Add logging for pingbacks; see [`WP_FAIL2BAN_LOG_PINGBACKS`](https://docs.wp-fail2ban.com/en/4.1/defines/WP_FAIL2BAN_LOG_PINGBACKS.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.1).
     374* Custom pingback log is called [`WP_FAIL2BAN_PINGBACK_LOG`](https://docs.wp-fail2ban.com/en/4.1/defines/WP_FAIL2BAN_PINGBACK_LOG.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.1).
    370375
    371376= 2.1.1 =
     
    373378
    374379= 2.1.0 =
    375 * Add support for blocking user enumeration; see [`WP_FAIL2BAN_BLOCK_USER_ENUMERATION`](https://docs.wp-fail2ban.com/en/4.1/defines/WP_FAIL2BAN_BLOCK_USER_ENUMERATION.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.0).
    376 * Add support for CIDR notation in [`WP_FAIL2BAN_PROXIES`](https://docs.wp-fail2ban.com/en/4.1/defines/WP_FAIL2BAN_PROXIES.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.0).
     380* Add support for blocking user enumeration; see [`WP_FAIL2BAN_BLOCK_USER_ENUMERATION`](https://docs.wp-fail2ban.com/en/4.1/defines/WP_FAIL2BAN_BLOCK_USER_ENUMERATION.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.1).
     381* Add support for CIDR notation in [`WP_FAIL2BAN_PROXIES`](https://docs.wp-fail2ban.com/en/4.1/defines/WP_FAIL2BAN_PROXIES.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.1).
    377382
    378383= 2.0.1 =
    379 * Bug-fix in *experimental* [`WP_FAIL2BAN_PROXIES`](https://docs.wp-fail2ban.com/en/4.1/defines/WP_FAIL2BAN_PROXIES.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.0) code.
     384* Bug-fix in *experimental* [`WP_FAIL2BAN_PROXIES`](https://docs.wp-fail2ban.com/en/4.1/defines/WP_FAIL2BAN_PROXIES.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.1) code.
    380385
    381386= 2.0.0 =
    382 * Add *experimental* support for X-Forwarded-For header; see [`WP_FAIL2BAN_PROXIES`](https://docs.wp-fail2ban.com/en/4.1/defines/WP_FAIL2BAN_PROXIES.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.0).
    383 * Add *experimental* support for regex-based login blocking; see [`WP_FAIL2BAN_BLOCKED_USERS`](https://docs.wp-fail2ban.com/en/4.1/defines/WP_FAIL2BAN_BLOCKED_USERS.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.0).
     387* Add *experimental* support for X-Forwarded-For header; see [`WP_FAIL2BAN_PROXIES`](https://docs.wp-fail2ban.com/en/4.1/defines/WP_FAIL2BAN_PROXIES.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.1).
     388* Add *experimental* support for regex-based login blocking; see [`WP_FAIL2BAN_BLOCKED_USERS`](https://docs.wp-fail2ban.com/en/4.1/defines/WP_FAIL2BAN_BLOCKED_USERS.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.1).
    384389
    385390= 1.2.1 =
     
    399404= 5.2.0 =
    400405This is a minor release. You do not need to update your filters from 5.1.0.
     406
    401407
    402408= 5.1.1 =
     
    514520
    515521= 3.5.1 =
    516 Bug-fix: disable [`WP_FAIL2BAN_BLOCK_USER_ENUMERATION`](https://docs.wp-fail2ban.com/en/4.1/defines/WP_FAIL2BAN_BLOCK_USER_ENUMERATION.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.0) in admin area....
     522Bug-fix: disable [`WP_FAIL2BAN_BLOCK_USER_ENUMERATION`](https://docs.wp-fail2ban.com/en/4.1/defines/WP_FAIL2BAN_BLOCK_USER_ENUMERATION.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.1) in admin area....
    517523
    518524= 3.5.0 =
     
    526532
    527533= 2.3.0 =
    528 Fix for [`WP_FAIL2BAN_PROXIES`](https://docs.wp-fail2ban.com/en/4.1/defines/WP_FAIL2BAN_PROXIES.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.0); if you’re not using it you can safely skip this release.
     534Fix for [`WP_FAIL2BAN_PROXIES`](https://docs.wp-fail2ban.com/en/4.1/defines/WP_FAIL2BAN_PROXIES.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.1); if you’re not using it you can safely skip this release.
    529535
    530536= 2.2.1 =
     
    532538
    533539= 2.2.0 =
    534 BREAKING CHANGE:  `WP_FAIL2BAN_LOG` has been renamed to [`WP_FAIL2BAN_AUTH_LOG`](https://docs.wp-fail2ban.com/en/4.1/defines/WP_FAIL2BAN_AUTH_LOG.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.0).
     540BREAKING CHANGE:  `WP_FAIL2BAN_LOG` has been renamed to [`WP_FAIL2BAN_AUTH_LOG`](https://docs.wp-fail2ban.com/en/4.1/defines/WP_FAIL2BAN_AUTH_LOG.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-premium-5.2.1).
    535541
    536542Pingbacks are getting a lot of attention recently, so *WPf2b* can now log them.
  • wp-fail2ban/trunk/vendor/freemius/wordpress-sdk/.gitattributes

    r2950789 r2969897  
    1212*.css.map export-ignore
    1313phpcs.xml export-ignore
     14.phpstan export-ignore
    1415
    1516# Declare files that will always have CRLF line endings on checkout.
  • wp-fail2ban/trunk/vendor/freemius/wordpress-sdk/composer.lock

    r2950789 r2969897  
    55        "This file is @generated automatically"
    66    ],
    7     "content-hash": "0fa573ee1c13c3c5edd8c3b82b81eb4a",
     7    "content-hash": "99f0f4dafbc26759cd76806c8416581e",
    88    "packages": [],
    99    "packages-dev": [
     
    8787        },
    8888        {
     89            "name": "php-stubs/wordpress-stubs",
     90            "version": "v6.2.1",
     91            "source": {
     92                "type": "git",
     93                "url": "https://github.com/php-stubs/wordpress-stubs.git",
     94                "reference": "0009429e639b748eef1c955200ea0d4e5ad5627d"
     95            },
     96            "dist": {
     97                "type": "zip",
     98                "url": "https://api.github.com/repos/php-stubs/wordpress-stubs/zipball/0009429e639b748eef1c955200ea0d4e5ad5627d",
     99                "reference": "0009429e639b748eef1c955200ea0d4e5ad5627d",
     100                "shasum": ""
     101            },
     102            "require-dev": {
     103                "nikic/php-parser": "< 4.12.0",
     104                "php": "~7.3 || ~8.0",
     105                "php-stubs/generator": "^0.8.3",
     106                "phpdocumentor/reflection-docblock": "^5.3",
     107                "phpstan/phpstan": "^1.10.12",
     108                "phpunit/phpunit": "^9.5"
     109            },
     110            "suggest": {
     111                "paragonie/sodium_compat": "Pure PHP implementation of libsodium",
     112                "symfony/polyfill-php73": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions",
     113                "szepeviktor/phpstan-wordpress": "WordPress extensions for PHPStan"
     114            },
     115            "type": "library",
     116            "notification-url": "https://packagist.org/downloads/",
     117            "license": [
     118                "MIT"
     119            ],
     120            "description": "WordPress function and class declaration stubs for static analysis.",
     121            "homepage": "https://github.com/php-stubs/wordpress-stubs",
     122            "keywords": [
     123                "PHPStan",
     124                "static analysis",
     125                "wordpress"
     126            ],
     127            "support": {
     128                "issues": "https://github.com/php-stubs/wordpress-stubs/issues",
     129                "source": "https://github.com/php-stubs/wordpress-stubs/tree/v6.2.1"
     130            },
     131            "time": "2023-05-18T04:35:23+00:00"
     132        },
     133        {
     134            "name": "phpcompatibility/php-compatibility",
     135            "version": "9.3.5",
     136            "source": {
     137                "type": "git",
     138                "url": "https://github.com/PHPCompatibility/PHPCompatibility.git",
     139                "reference": "9fb324479acf6f39452e0655d2429cc0d3914243"
     140            },
     141            "dist": {
     142                "type": "zip",
     143                "url": "https://api.github.com/repos/PHPCompatibility/PHPCompatibility/zipball/9fb324479acf6f39452e0655d2429cc0d3914243",
     144                "reference": "9fb324479acf6f39452e0655d2429cc0d3914243",
     145                "shasum": ""
     146            },
     147            "require": {
     148                "php": ">=5.3",
     149                "squizlabs/php_codesniffer": "^2.3 || ^3.0.2"
     150            },
     151            "conflict": {
     152                "squizlabs/php_codesniffer": "2.6.2"
     153            },
     154            "require-dev": {
     155                "phpunit/phpunit": "~4.5 || ^5.0 || ^6.0 || ^7.0"
     156            },
     157            "suggest": {
     158                "dealerdirect/phpcodesniffer-composer-installer": "^0.5 || This Composer plugin will sort out the PHPCS 'installed_paths' automatically.",
     159                "roave/security-advisories": "dev-master || Helps prevent installing dependencies with known security issues."
     160            },
     161            "type": "phpcodesniffer-standard",
     162            "notification-url": "https://packagist.org/downloads/",
     163            "license": [
     164                "LGPL-3.0-or-later"
     165            ],
     166            "authors": [
     167                {
     168                    "name": "Wim Godden",
     169                    "homepage": "https://github.com/wimg",
     170                    "role": "lead"
     171                },
     172                {
     173                    "name": "Juliette Reinders Folmer",
     174                    "homepage": "https://github.com/jrfnl",
     175                    "role": "lead"
     176                },
     177                {
     178                    "name": "Contributors",
     179                    "homepage": "https://github.com/PHPCompatibility/PHPCompatibility/graphs/contributors"
     180                }
     181            ],
     182            "description": "A set of sniffs for PHP_CodeSniffer that checks for PHP cross-version compatibility.",
     183            "homepage": "http://techblog.wimgodden.be/tag/codesniffer/",
     184            "keywords": [
     185                "compatibility",
     186                "phpcs",
     187                "standards"
     188            ],
     189            "support": {
     190                "issues": "https://github.com/PHPCompatibility/PHPCompatibility/issues",
     191                "source": "https://github.com/PHPCompatibility/PHPCompatibility"
     192            },
     193            "time": "2019-12-27T09:44:58+00:00"
     194        },
     195        {
     196            "name": "phpcompatibility/phpcompatibility-paragonie",
     197            "version": "1.3.2",
     198            "source": {
     199                "type": "git",
     200                "url": "https://github.com/PHPCompatibility/PHPCompatibilityParagonie.git",
     201                "reference": "bba5a9dfec7fcfbd679cfaf611d86b4d3759da26"
     202            },
     203            "dist": {
     204                "type": "zip",
     205                "url": "https://api.github.com/repos/PHPCompatibility/PHPCompatibilityParagonie/zipball/bba5a9dfec7fcfbd679cfaf611d86b4d3759da26",
     206                "reference": "bba5a9dfec7fcfbd679cfaf611d86b4d3759da26",
     207                "shasum": ""
     208            },
     209            "require": {
     210                "phpcompatibility/php-compatibility": "^9.0"
     211            },
     212            "require-dev": {
     213                "dealerdirect/phpcodesniffer-composer-installer": "^0.7",
     214                "paragonie/random_compat": "dev-master",
     215                "paragonie/sodium_compat": "dev-master"
     216            },
     217            "suggest": {
     218                "dealerdirect/phpcodesniffer-composer-installer": "^0.7 || This Composer plugin will sort out the PHP_CodeSniffer 'installed_paths' automatically.",
     219                "roave/security-advisories": "dev-master || Helps prevent installing dependencies with known security issues."
     220            },
     221            "type": "phpcodesniffer-standard",
     222            "notification-url": "https://packagist.org/downloads/",
     223            "license": [
     224                "LGPL-3.0-or-later"
     225            ],
     226            "authors": [
     227                {
     228                    "name": "Wim Godden",
     229                    "role": "lead"
     230                },
     231                {
     232                    "name": "Juliette Reinders Folmer",
     233                    "role": "lead"
     234                }
     235            ],
     236            "description": "A set of rulesets for PHP_CodeSniffer to check for PHP cross-version compatibility issues in projects, while accounting for polyfills provided by the Paragonie polyfill libraries.",
     237            "homepage": "http://phpcompatibility.com/",
     238            "keywords": [
     239                "compatibility",
     240                "paragonie",
     241                "phpcs",
     242                "polyfill",
     243                "standards",
     244                "static analysis"
     245            ],
     246            "support": {
     247                "issues": "https://github.com/PHPCompatibility/PHPCompatibilityParagonie/issues",
     248                "source": "https://github.com/PHPCompatibility/PHPCompatibilityParagonie"
     249            },
     250            "time": "2022-10-25T01:46:02+00:00"
     251        },
     252        {
     253            "name": "phpcompatibility/phpcompatibility-wp",
     254            "version": "2.1.4",
     255            "source": {
     256                "type": "git",
     257                "url": "https://github.com/PHPCompatibility/PHPCompatibilityWP.git",
     258                "reference": "b6c1e3ee1c35de6c41a511d5eb9bd03e447480a5"
     259            },
     260            "dist": {
     261                "type": "zip",
     262                "url": "https://api.github.com/repos/PHPCompatibility/PHPCompatibilityWP/zipball/b6c1e3ee1c35de6c41a511d5eb9bd03e447480a5",
     263                "reference": "b6c1e3ee1c35de6c41a511d5eb9bd03e447480a5",
     264                "shasum": ""
     265            },
     266            "require": {
     267                "phpcompatibility/php-compatibility": "^9.0",
     268                "phpcompatibility/phpcompatibility-paragonie": "^1.0"
     269            },
     270            "require-dev": {
     271                "dealerdirect/phpcodesniffer-composer-installer": "^0.7"
     272            },
     273            "suggest": {
     274                "dealerdirect/phpcodesniffer-composer-installer": "^0.7 || This Composer plugin will sort out the PHP_CodeSniffer 'installed_paths' automatically.",
     275                "roave/security-advisories": "dev-master || Helps prevent installing dependencies with known security issues."
     276            },
     277            "type": "phpcodesniffer-standard",
     278            "notification-url": "https://packagist.org/downloads/",
     279            "license": [
     280                "LGPL-3.0-or-later"
     281            ],
     282            "authors": [
     283                {
     284                    "name": "Wim Godden",
     285                    "role": "lead"
     286                },
     287                {
     288                    "name": "Juliette Reinders Folmer",
     289                    "role": "lead"
     290                }
     291            ],
     292            "description": "A ruleset for PHP_CodeSniffer to check for PHP cross-version compatibility issues in projects, while accounting for polyfills provided by WordPress.",
     293            "homepage": "http://phpcompatibility.com/",
     294            "keywords": [
     295                "compatibility",
     296                "phpcs",
     297                "standards",
     298                "static analysis",
     299                "wordpress"
     300            ],
     301            "support": {
     302                "issues": "https://github.com/PHPCompatibility/PHPCompatibilityWP/issues",
     303                "source": "https://github.com/PHPCompatibility/PHPCompatibilityWP"
     304            },
     305            "time": "2022-10-24T09:00:36+00:00"
     306        },
     307        {
     308            "name": "phpstan/extension-installer",
     309            "version": "1.3.1",
     310            "source": {
     311                "type": "git",
     312                "url": "https://github.com/phpstan/extension-installer.git",
     313                "reference": "f45734bfb9984c6c56c4486b71230355f066a58a"
     314            },
     315            "dist": {
     316                "type": "zip",
     317                "url": "https://api.github.com/repos/phpstan/extension-installer/zipball/f45734bfb9984c6c56c4486b71230355f066a58a",
     318                "reference": "f45734bfb9984c6c56c4486b71230355f066a58a",
     319                "shasum": ""
     320            },
     321            "require": {
     322                "composer-plugin-api": "^2.0",
     323                "php": "^7.2 || ^8.0",
     324                "phpstan/phpstan": "^1.9.0"
     325            },
     326            "require-dev": {
     327                "composer/composer": "^2.0",
     328                "php-parallel-lint/php-parallel-lint": "^1.2.0",
     329                "phpstan/phpstan-strict-rules": "^0.11 || ^0.12 || ^1.0"
     330            },
     331            "type": "composer-plugin",
     332            "extra": {
     333                "class": "PHPStan\\ExtensionInstaller\\Plugin"
     334            },
     335            "autoload": {
     336                "psr-4": {
     337                    "PHPStan\\ExtensionInstaller\\": "src/"
     338                }
     339            },
     340            "notification-url": "https://packagist.org/downloads/",
     341            "license": [
     342                "MIT"
     343            ],
     344            "description": "Composer plugin for automatic installation of PHPStan extensions",
     345            "support": {
     346                "issues": "https://github.com/phpstan/extension-installer/issues",
     347                "source": "https://github.com/phpstan/extension-installer/tree/1.3.1"
     348            },
     349            "time": "2023-05-24T08:59:17+00:00"
     350        },
     351        {
     352            "name": "phpstan/phpstan",
     353            "version": "1.10.25",
     354            "source": {
     355                "type": "git",
     356                "url": "https://github.com/phpstan/phpstan.git",
     357                "reference": "578f4e70d117f9a90699324c555922800ac38d8c"
     358            },
     359            "dist": {
     360                "type": "zip",
     361                "url": "https://api.github.com/repos/phpstan/phpstan/zipball/578f4e70d117f9a90699324c555922800ac38d8c",
     362                "reference": "578f4e70d117f9a90699324c555922800ac38d8c",
     363                "shasum": ""
     364            },
     365            "require": {
     366                "php": "^7.2|^8.0"
     367            },
     368            "conflict": {
     369                "phpstan/phpstan-shim": "*"
     370            },
     371            "bin": [
     372                "phpstan",
     373                "phpstan.phar"
     374            ],
     375            "type": "library",
     376            "autoload": {
     377                "files": [
     378                    "bootstrap.php"
     379                ]
     380            },
     381            "notification-url": "https://packagist.org/downloads/",
     382            "license": [
     383                "MIT"
     384            ],
     385            "description": "PHPStan - PHP Static Analysis Tool",
     386            "keywords": [
     387                "dev",
     388                "static analysis"
     389            ],
     390            "support": {
     391                "docs": "https://phpstan.org/user-guide/getting-started",
     392                "forum": "https://github.com/phpstan/phpstan/discussions",
     393                "issues": "https://github.com/phpstan/phpstan/issues",
     394                "security": "https://github.com/phpstan/phpstan/security/policy",
     395                "source": "https://github.com/phpstan/phpstan-src"
     396            },
     397            "funding": [
     398                {
     399                    "url": "https://github.com/ondrejmirtes",
     400                    "type": "github"
     401                },
     402                {
     403                    "url": "https://github.com/phpstan",
     404                    "type": "github"
     405                },
     406                {
     407                    "url": "https://tidelift.com/funding/github/packagist/phpstan/phpstan",
     408                    "type": "tidelift"
     409                }
     410            ],
     411            "time": "2023-07-06T12:11:37+00:00"
     412        },
     413        {
    89414            "name": "squizlabs/php_codesniffer",
    90415            "version": "3.7.2",
     
    142467            },
    143468            "time": "2023-02-22T23:07:41+00:00"
     469        },
     470        {
     471            "name": "symfony/polyfill-php73",
     472            "version": "v1.27.0",
     473            "source": {
     474                "type": "git",
     475                "url": "https://github.com/symfony/polyfill-php73.git",
     476                "reference": "9e8ecb5f92152187c4799efd3c96b78ccab18ff9"
     477            },
     478            "dist": {
     479                "type": "zip",
     480                "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/9e8ecb5f92152187c4799efd3c96b78ccab18ff9",
     481                "reference": "9e8ecb5f92152187c4799efd3c96b78ccab18ff9",
     482                "shasum": ""
     483            },
     484            "require": {
     485                "php": ">=7.1"
     486            },
     487            "type": "library",
     488            "extra": {
     489                "branch-alias": {
     490                    "dev-main": "1.27-dev"
     491                },
     492                "thanks": {
     493                    "name": "symfony/polyfill",
     494                    "url": "https://github.com/symfony/polyfill"
     495                }
     496            },
     497            "autoload": {
     498                "files": [
     499                    "bootstrap.php"
     500                ],
     501                "psr-4": {
     502                    "Symfony\\Polyfill\\Php73\\": ""
     503                },
     504                "classmap": [
     505                    "Resources/stubs"
     506                ]
     507            },
     508            "notification-url": "https://packagist.org/downloads/",
     509            "license": [
     510                "MIT"
     511            ],
     512            "authors": [
     513                {
     514                    "name": "Nicolas Grekas",
     515                    "email": "[email protected]"
     516                },
     517                {
     518                    "name": "Symfony Community",
     519                    "homepage": "https://symfony.com/contributors"
     520                }
     521            ],
     522            "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions",
     523            "homepage": "https://symfony.com",
     524            "keywords": [
     525                "compatibility",
     526                "polyfill",
     527                "portable",
     528                "shim"
     529            ],
     530            "support": {
     531                "source": "https://github.com/symfony/polyfill-php73/tree/v1.27.0"
     532            },
     533            "funding": [
     534                {
     535                    "url": "https://symfony.com/sponsor",
     536                    "type": "custom"
     537                },
     538                {
     539                    "url": "https://github.com/fabpot",
     540                    "type": "github"
     541                },
     542                {
     543                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
     544                    "type": "tidelift"
     545                }
     546            ],
     547            "time": "2022-11-03T14:55:06+00:00"
     548        },
     549        {
     550            "name": "szepeviktor/phpstan-wordpress",
     551            "version": "v1.3.0",
     552            "source": {
     553                "type": "git",
     554                "url": "https://github.com/szepeviktor/phpstan-wordpress.git",
     555                "reference": "5b5cc77ed51fdaf64efe3f00b5aae4b709d2cfa9"
     556            },
     557            "dist": {
     558                "type": "zip",
     559                "url": "https://api.github.com/repos/szepeviktor/phpstan-wordpress/zipball/5b5cc77ed51fdaf64efe3f00b5aae4b709d2cfa9",
     560                "reference": "5b5cc77ed51fdaf64efe3f00b5aae4b709d2cfa9",
     561                "shasum": ""
     562            },
     563            "require": {
     564                "php": "^7.2 || ^8.0",
     565                "php-stubs/wordpress-stubs": "^4.7 || ^5.0 || ^6.0",
     566                "phpstan/phpstan": "^1.10.0",
     567                "symfony/polyfill-php73": "^1.12.0"
     568            },
     569            "require-dev": {
     570                "composer/composer": "^2.1.14",
     571                "dealerdirect/phpcodesniffer-composer-installer": "^1.0",
     572                "php-parallel-lint/php-parallel-lint": "^1.1",
     573                "phpstan/phpstan-strict-rules": "^1.2",
     574                "phpunit/phpunit": "^8.0 || ^9.0",
     575                "szepeviktor/phpcs-psr-12-neutron-hybrid-ruleset": "^0.8"
     576            },
     577            "type": "phpstan-extension",
     578            "extra": {
     579                "phpstan": {
     580                    "includes": [
     581                        "extension.neon"
     582                    ]
     583                }
     584            },
     585            "autoload": {
     586                "psr-4": {
     587                    "SzepeViktor\\PHPStan\\WordPress\\": "src/"
     588                }
     589            },
     590            "notification-url": "https://packagist.org/downloads/",
     591            "license": [
     592                "MIT"
     593            ],
     594            "description": "WordPress extensions for PHPStan",
     595            "keywords": [
     596                "PHPStan",
     597                "code analyse",
     598                "code analysis",
     599                "static analysis",
     600                "wordpress"
     601            ],
     602            "support": {
     603                "issues": "https://github.com/szepeviktor/phpstan-wordpress/issues",
     604                "source": "https://github.com/szepeviktor/phpstan-wordpress/tree/v1.3.0"
     605            },
     606            "time": "2023-04-23T06:15:06+00:00"
    144607        },
    145608        {
     
    198661    "minimum-stability": "stable",
    199662    "stability-flags": [],
    200     "prefer-stable": false,
     663    "prefer-stable": true,
    201664    "prefer-lowest": false,
    202665    "platform": {
    203         "php": ">=5.2"
     666        "php": ">=5.6"
    204667    },
    205668    "platform-dev": [],
     669    "platform-overrides": {
     670        "php": "8.0"
     671    },
    206672    "plugin-api-version": "2.3.0"
    207673}
  • wp-fail2ban/trunk/vendor/freemius/wordpress-sdk/includes/class-freemius.php

    r2934654 r2969897  
    15321532            $this->add_filter( 'after_code_type_change', array( &$this, '_after_code_type_change' ) );
    15331533
    1534             add_action( 'admin_init', array( &$this, '_add_trial_notice' ) );
    1535             add_action( 'admin_init', array( &$this, '_add_affiliate_program_notice' ) );
     1534            add_action( 'admin_init', array( &$this, '_add_trial_notice' ) ); // @phpstan-ignore-line
     1535            add_action( 'admin_init', array( &$this, '_add_affiliate_program_notice' ) ); // @phpstan-ignore-line
    15361536            add_action( 'admin_enqueue_scripts', array( &$this, '_enqueue_common_css' ) );
    15371537
     
    16431643         * @since 2.2.3
    16441644         *
    1645          * @return string
     1645         * @return void
    16461646         */
    16471647        static function _prepend_fs_allow_updater_and_dialog_flag_url_param() {
     
    34933493         */
    34943494        static function get_unfiltered_site_url( $blog_id = null, $strip_protocol = false, $add_trailing_slash = false ) {
     3495            $url = ( ! is_multisite() && defined( 'WP_SITEURL' ) ) ? WP_SITEURL : self::get_site_url_from_wp_option( $blog_id );
     3496
     3497            if ( $strip_protocol ) {
     3498                $url = fs_strip_url_protocol( $url );
     3499            }
     3500
     3501            if ( $add_trailing_slash ) {
     3502                $url = trailingslashit( $url );
     3503            }
     3504
     3505            return $url;
     3506        }
     3507
     3508        /**
     3509         * @author Leo Fajardo (@leorw)
     3510         * @since 2.6.0
     3511         *
     3512         * @param int|null $blog_id
     3513         *
     3514         * @return string
     3515         */
     3516        private static function get_site_url_from_wp_option( $blog_id = null ) {
    34953517            global $wp_filter;
    34963518
     
    35173539                    $wp_filter[ $hook_name ] = $site_url_filter;
    35183540                }
    3519             }
    3520 
    3521             if ( $strip_protocol ) {
    3522                 $url = fs_strip_url_protocol( $url );
    3523             }
    3524 
    3525             if ( $add_trailing_slash ) {
    3526                 $url = trailingslashit( $url );
    35273541            }
    35283542
     
    40814095
    40824096            if ( function_exists( 'random_int' ) ) {
    4083                 $random = random_int( $min, $max );
     4097                $random = random_int( $min, $max ); // phpcs:ignore PHPCompatibility.FunctionUse.NewFunctions.random_intFound
    40844098            } else {
    40854099                $random = rand( $min, $max );
     
    44004414
    44014415            // Get the UTF encoded domain name.
    4402             $domain = idn_to_ascii( $parts[1] ) . '.';
     4416            /**
     4417             * @note - The check of `defined('...')` is there to account for PHP servers compiled with some older version of ICU where the constants are not defined.
     4418             * @author - @swashata
     4419             */
     4420            $is_new_idn_available = (
     4421                version_compare( PHP_VERSION, '5.6.40') > 0 &&
     4422                defined( 'IDNA_DEFAULT' ) &&
     4423                defined( 'INTL_IDNA_VARIANT_UTS46' )
     4424            );
     4425            if ( $is_new_idn_available ) {
     4426                $domain = idn_to_ascii( $parts[1], IDNA_DEFAULT, INTL_IDNA_VARIANT_UTS46 );
     4427            } else {
     4428                $domain = idn_to_ascii( $parts[1] );  // phpcs:ignore PHPCompatibility.ParameterValues.NewIDNVariantDefault.NotSet
     4429            }
     4430
     4431            $domain = $domain . '.';
    44034432
    44044433            return ( checkdnsrr( $domain, 'MX' ) || checkdnsrr( $domain, 'A' ) );
     
    56165645            }
    56175646
    5618             if ( $this->is_registered() ) {
    5619                 if ( ! $this->is_addon() ) {
    5620                     add_action(
    5621                         is_admin() ? 'admin_init' : 'init',
    5622                         array( &$this, '_plugin_code_type_changed' )
    5623                     );
    5624                 }
    5625 
    5626                 if ( $this->is_premium() ) {
    5627                     // Purge cached payments after switching to the premium version.
    5628                     // @todo This logic doesn't handle purging the cache for serviceware module upgrade.
    5629                     $this->get_api_user_scope()->purge_cache( "/plugins/{$this->_module_id}/payments.json?include_addons=true" );
    5630                 }
     5647            if ( ! $this->is_addon() ) {
     5648                add_action(
     5649                    is_admin() ? 'admin_init' : 'init',
     5650                    array( &$this, '_plugin_code_type_changed' )
     5651                );
     5652            }
     5653
     5654            if ( $this->is_registered() && $this->is_premium() ) {
     5655                // Purge cached payments after switching to the premium version.
     5656                // @todo This logic doesn't handle purging the cache for serviceware module upgrade.
     5657                $this->get_api_user_scope()->purge_cache( "/plugins/{$this->_module_id}/payments.json?include_addons=true" );
    56315658            }
    56325659        }
     
    56925719            }
    56935720
    5694             // Schedule code type changes event.
    5695             $this->schedule_install_sync();
     5721            if ( $this->is_registered() ) {
     5722                // Schedule code type changes event.
     5723                $this->schedule_install_sync();
     5724            }
    56965725
    56975726            /**
     
    999110020         * @param string $caller
    999210021         *
    9993          * @return string
     10022         * @return void
    999410023         */
    999510024        function set_basename( $is_premium, $caller ) {
     
    1241712446            $install_2_blog_map = array();
    1241812447            foreach ( $blog_2_install_map as $blog_id => $install ) {
    12419                 $params[] = array( 'id' => $install->id );
     12448                $params[] = array( 'id' => $install->id, 'url' => $install->url );
    1242012449
    1242112450                $install_2_blog_map[ $install->id ] = $blog_id;
     
    1669816727         * @return FS_User|false
    1669916728         */
    16700         static function _get_user_by_email( $email ) {
     16729        public static function _get_user_by_email( $email ) {
    1670116730            self::$_static_logger->entrance();
    1670216731
     
    1787217901         * @param bool      $redirect
    1787317902         *
    17874          * @return string If redirect is `false`, returns the next page the user should be redirected to.
     17903         * @return void
    1787517904         */
    1787617905        private function install_many_pending_with_user(
     
    2326623295
    2326723296        /**
     23297         * Adds CSS classes for the body tag in the admin.
     23298         *
     23299         * @param string $classes Space-separated string of class names.
     23300         *
     23301         * @return string $classes FS Admin body tag class names.
     23302         */
     23303        public function fs_addons_body_class( $classes ) {
     23304            $classes .= ' plugins-php';
     23305            return $classes;
     23306        }
     23307
     23308        /**
    2326823309         * Account page resources load.
    2326923310         *
     
    2328123322                wp_enqueue_script( 'plugin-install' );
    2328223323                add_thickbox();
    23283 
    23284                 function fs_addons_body_class( $classes ) {
    23285                     $classes .= ' plugins-php';
    23286 
    23287                     return $classes;
    23288                 }
    23289 
    23290                 add_filter( 'admin_body_class', 'fs_addons_body_class' );
     23324                add_filter( 'admin_body_class', array( $this, 'fs_addons_body_class' ) );
    2329123325            }
    2329223326
     
    2342323457            wp_enqueue_script( 'plugin-install' );
    2342423458            add_thickbox();
    23425 
    23426             function fs_addons_body_class( $classes ) {
    23427                 $classes .= ' plugins-php';
    23428 
    23429                 return $classes;
    23430             }
    23431 
    23432             add_filter( 'admin_body_class', 'fs_addons_body_class' );
     23459            add_filter( 'admin_body_class', array( $this, 'fs_addons_body_class' ) );
    2343323460
    2343423461            if ( ! $this->is_registered() && $this->is_org_repo_compliant() ) {
  • wp-fail2ban/trunk/vendor/freemius/wordpress-sdk/includes/debug/class-fs-debug-bar-panel.php

    r2018502 r2969897  
    1111    }
    1212
    13     /**
    14      * Extends Debug Bar plugin by adding a panel to show all Freemius API requests.
    15      *
    16      * @author Vova Feldman (@svovaf)
    17      * @since  1.1.7.3
    18      *
    19      * Class Freemius_Debug_Bar_Panel
    20      */
    21     class Freemius_Debug_Bar_Panel extends Debug_Bar_Panel {
    22         function init() {
    23             $this->title( 'Freemius' );
    24         }
     13    if ( class_exists( 'Debug_Bar_Panel' ) ) {
    2514
    26         static function requests_count() {
    27             if ( class_exists( 'Freemius_Api_WordPress' ) ) {
    28                 $logger = Freemius_Api_WordPress::GetLogger();
    29             } else {
    30                 $logger = array();
     15        /**
     16         * Extends Debug Bar plugin by adding a panel to show all Freemius API requests.
     17         *
     18         * @author Vova Feldman (@svovaf)
     19         * @since  1.1.7.3
     20         *
     21         * Class Freemius_Debug_Bar_Panel
     22         */
     23        class Freemius_Debug_Bar_Panel extends Debug_Bar_Panel {
     24
     25            public function init() {
     26                $this->title( 'Freemius' ); // @phpstan-ignore-line
    3127            }
    3228
    33             return number_format( count( $logger ) );
    34         }
     29            public static function requests_count() {
     30                if ( class_exists( 'Freemius_Api_WordPress' ) ) {
     31                    $logger = Freemius_Api_WordPress::GetLogger();
     32                } else {
     33                    $logger = array();
     34                }
    3535
    36         static function total_time() {
    37             if ( class_exists( 'Freemius_Api_WordPress' ) ) {
    38                 $logger = Freemius_Api_WordPress::GetLogger();
    39             } else {
    40                 $logger = array();
     36                return number_format( count( $logger ) );
    4137            }
    4238
    43             $total_time = .0;
    44             foreach ( $logger as $l ) {
    45                 $total_time += $l['total'];
     39            public static function total_time() {
     40                if ( class_exists( 'Freemius_Api_WordPress' ) ) {
     41                    $logger = Freemius_Api_WordPress::GetLogger();
     42                } else {
     43                    $logger = array();
     44                }
     45
     46                $total_time = .0;
     47                foreach ( $logger as $l ) {
     48                    $total_time += $l['total'];
     49                }
     50
     51                return number_format( 100 * $total_time, 2 ) . ' ' . fs_text_x_inline( 'ms', 'milliseconds' );
    4652            }
    4753
    48             return number_format( 100 * $total_time, 2 ) . ' ' . fs_text_x_inline( 'ms', 'milliseconds' );
    49         }
    50 
    51         function render() {
    52             ?>
    53             <div id='debug-bar-php'>
    54                 <?php fs_require_template( '/debug/api-calls.php' ) ?>
    55                 <br>
    56                 <?php fs_require_template( '/debug/scheduled-crons.php' ) ?>
    57                 <br>
    58                 <?php fs_require_template( '/debug/plugins-themes-sync.php' ) ?>
    59                 <br>
    60                 <?php fs_require_template( '/debug/logger.php' ) ?>
    61             </div>
    62         <?php
     54            public function render() {
     55                ?>
     56                <div id='debug-bar-php'>
     57                    <?php fs_require_template( '/debug/api-calls.php' ) ?>
     58                    <br>
     59                    <?php fs_require_template( '/debug/scheduled-crons.php' ) ?>
     60                    <br>
     61                    <?php fs_require_template( '/debug/plugins-themes-sync.php' ) ?>
     62                    <br>
     63                    <?php fs_require_template( '/debug/logger.php' ) ?>
     64                </div>
     65            <?php
     66            }
    6367        }
    6468    }
  • wp-fail2ban/trunk/vendor/freemius/wordpress-sdk/includes/fs-core-functions.php

    r2934654 r2969897  
    12051205         * @param string $slug    Module slug for overrides.
    12061206         *
    1207          * @return string
     1207         * @return void
    12081208         */
    12091209        function fs_esc_js_echo_x_inline( $text, $context, $key = '', $slug = 'freemius' ) {
  • wp-fail2ban/trunk/vendor/freemius/wordpress-sdk/includes/sdk/FreemiusWordPress.php

    r2924284 r2969897  
    474474                        if ( filter_var( $matches[1], FILTER_VALIDATE_IP ) ) {
    475475                            if ( strlen( inet_pton( $matches[1] ) ) === 16 ) {
    476 //                          error_log('Invalid IPv6 configuration on server, Please disable or get native IPv6 on your server.');
    477                                 // Hook to an action triggered just before cURL is executed to resolve the IP version to v4.
     476                                /**
     477                                 * error_log('Invalid IPv6 configuration on server, Please disable or get native IPv6 on your server.');
     478                                 * Hook to an action triggered just before cURL is executed to resolve the IP version to v4.
     479                                 *
     480                                 * @phpstan-ignore-next-line
     481                                 */
    478482                                add_action( 'http_api_curl', 'Freemius_Api_WordPress::CurlResolveToIPv4', 10, 1 );
    479483
  • wp-fail2ban/trunk/vendor/freemius/wordpress-sdk/phpcs.xml

    r2950789 r2969897  
    9393    https://github.com/PHPCompatibility/PHPCompatibility
    9494    -->
    95     <!--
    96     <config name="testVersion" value="5.2-"/>
    97     <rule ref="PHPCompatibilityWP"/>
    98     -->
     95    <!-- <rule ref="PHPCompatibilityWP"/> -->
    9996
     97    <config name="testVersion" value="5.6-"/>
     98    <rule ref="PHPCompatibility"/>
    10099
    101100    <!--
  • wp-fail2ban/trunk/vendor/freemius/wordpress-sdk/start.php

    r2934654 r2969897  
    1616     * @var string
    1717     */
    18     $this_sdk_version = '2.5.10';
     18    $this_sdk_version = '2.5.12';
    1919
    2020    #region SDK Selection Logic --------------------------------------------------------------------
  • wp-fail2ban/trunk/vendor/freemius/wordpress-sdk/templates/forms/license-activation.php

    r2924284 r2969897  
    5353        $all_sites = Freemius::get_sites();
    5454
    55         $subsite_data_by_install_id = array();
    56         $install_url_by_install_id  = array();
     55        $all_site_details          = array();
     56        $subsite_url_by_install_id = array();
     57        $install_url_by_install_id = array();
    5758
    5859        foreach ( $all_sites as $site ) {
     
    6768
    6869            if ( is_object( $install ) ) {
    69                 if ( isset( $subsite_data_by_install_id[ $install->id ] ) ) {
    70                     $clone_subsite_data = $subsite_data_by_install_id[ $install->id ];
    71                     $clone_install_url  = $install_url_by_install_id[ $install->id ];
     70                if ( isset( $subsite_url_by_install_id[ $install->id ] ) ) {
     71                    $clone_subsite_url = $subsite_url_by_install_id[ $install->id ];
     72                    $clone_install_url = $install_url_by_install_id[ $install->id ];
    7273
    7374                    if (
     
    7879                         * @since 2.5.0
    7980                         */
    80                         fs_strip_url_protocol( untrailingslashit( $clone_install_url ) ) === fs_strip_url_protocol( untrailingslashit( $clone_subsite_data['url'] ) ) ||
     81                        fs_strip_url_protocol( untrailingslashit( $clone_install_url ) ) === fs_strip_url_protocol( untrailingslashit( $clone_subsite_url ) ) ||
    8182                        fs_strip_url_protocol( untrailingslashit( $install->url ) ) !== fs_strip_url_protocol( untrailingslashit( $site_details['url'] ) )
    8283                    ) {
     
    8990                }
    9091
    91                 $subsite_data_by_install_id[ $install->id ] = $site_details;
    92                 $install_url_by_install_id[ $install->id ]  = $install->url;
    93             }
     92                $subsite_url_by_install_id[ $install->id ] = $site_details['url'];
     93                $install_url_by_install_id[ $install->id ] = $install->url;
     94            }
     95
     96            $all_site_details[] = $site_details;
    9497        }
    9598
     
    97100            $vars = array(
    98101                'id'                  => $fs->get_id(),
    99                 'sites'               => array_values( $subsite_data_by_install_id ),
     102                'sites'               => $all_site_details,
    100103                'require_license_key' => true
    101104            );
  • wp-fail2ban/trunk/wp-fail2ban.php

    r2950789 r2969897  
    55 * Description: Write a myriad of WordPress events to syslog for integration with fail2ban.
    66 * Text Domain: wp-fail2ban
    7  * Version: 5.2.0
     7 * Version: 5.2.1
    88 * Author: Charles Lecklider
    99 * Author URI: https://invis.net/
Note: See TracChangeset for help on using the changeset viewer.