=== Wordfence Activator ===
Contributors: GPL Times
Tags: security, firewall, malware
Requires at least: 5.0
Tested up to: 7.0
Stable tag: 2.6.2
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

This is a plugin to activate Wordfence with additional functionality.

== Description ==

This plugin provides additional activation features for Wordfence.

== Installation ==

1. Upload the plugin files to the `/wp-content/plugins/wordfence-activator` directory, or install the plugin through the WordPress plugins screen directly.
2. Activate the plugin through the 'Plugins' screen in WordPress.

== Frequently Asked Questions ==

= Can I use this plugin with the free version of Wordfence? =

Yes, this plugin is compatible with both free and premium versions of Wordfence.

== Changelog ==

= 2.6.2 =
* Fixed `wfCentralAPIException: Wordfence Central secret key has not been created yet` flooding the server error log
* Added `pre_http_request` filter (priority 1) intercepting all calls to `https://www.wordfence.com/api/wf` — nonce endpoint returns `{"nonce":"..."}`, token endpoint returns a fake JWT, all other endpoints return `{"data":{}}` 200 OK; does not affect scanning or firewall (those use `noc1.wordfence.com`)
* Generated a real libsodium keypair on first load (`wordfenceCentralSecretKey`) so `fetchToken()` can complete the sign-nonce flow if the JWT transient ever expires
* Pre-seeded `wordfenceCentralJWT` transient with a long-lived fake JWT (exp ≈ year 2065) so `fetchToken()` is bypassed on normal requests
* Fixed duplicate entry SQL error for `scan_exclude` when the row exists with a NULL value
* Fixed scan exclusion not being applied due to the above INSERT failure blocking the UPDATE path
* Replaced SELECT + conditional INSERT/UPDATE with atomic INSERT ON DUPLICATE KEY UPDATE to eliminate race condition
* Corrected scan exclusion path from `/wordfence-activator/*` to `wp-content/plugins/wordfence-activator/*` to match Wordfence's ABSPATH-relative filename format used in wfScanner

= 2.6.1 =
* Fixed duplicate entry SQL error for `scan_exclude` when the row exists with a NULL value
* Fixed scan exclusion not being applied due to the above INSERT failure blocking the UPDATE path
* Replaced SELECT + conditional INSERT/UPDATE with atomic INSERT ON DUPLICATE KEY UPDATE to eliminate race condition
* Corrected scan exclusion path from `/wordfence-activator/*` to `wp-content/plugins/wordfence-activator/*` to match Wordfence's ABSPATH-relative filename format used in wfScanner

= 2.6.0 =
* Fixed "Response License Expiring" banner caused by keyExpDays never being written to the database
* Fixed "Auto-renew is disabled" warning by persisting premiumAutoRenew to the database
* Fixed licenseType and keyType not surviving page reloads (were set in-memory only, never persisted)
* Fixed stale keyType cache in wfLicense singleton by calling save() to trigger clearCache() and re-resolution
* Added explicit zeroing of all payment warning flags (premiumPaymentExpiring, Expired, Missing, Hold)
* Added Wordfence Central connected state (wordfenceCentralConnected, SiteID, ConnectTime, ConnectEmail)
* Flush wfCentral::_isConnected() static cache so connected state is reflected within the same request
* Compatibility with Wordfence 8.2.x

= 2.5.0 =
* Added multisite support
* Fixed database errors in multisite installations
* Added table existence check before database operations
* Prevented duplicate entries in scan exclusion list

= 1.4.3 =
* Excluded WF Activator plugin from being flagged by Wordfence

= 1.0.0 =
* Initial release.