-
v1.4.0 Stable
released this
2026-06-05 19:46:02 +00:00 | 0 commits to main since this release1.4.0
Release date: 2026-06-05
Added
- Audit Dashboard — top-level admin page with summary cards (total users, 2FA-enabled, recent failed attempts), failed attempts table, and 2FA status column in Users list.
- Failed attempts log —
robotstxt_2fa_failed_logring buffer (max 100 entries) populated on every failed verification; IPs anonymized. - Email notifications (each independently configurable):
- Admin-enabled 2FA: user is notified when an administrator activates 2FA for them.
- New location login: user is notified on first successful login from an unrecognised context.
- Recovery code used: user (and optionally site admin) notified when a recovery code is consumed.
- Activity digest: WP-Cron weekly or monthly summary sent to administrators.
- Application Passwords exemption: REST API clients skip the 2FA browser challenge by default.
- IP allow list: IPs/CIDR ranges that bypass 2FA (via
robotstxt_2fa_skip_challenge). - IP deny list: IPs/CIDR ranges blocked from login entirely (via
authenticateat priority 1). - IPv4 + IPv6 CIDR matching (pure PHP, no external dependency).
Compatibility
- WordPress: 6.4 – 7.1
- PHP: 8.0 – 8.5
Tests
- PHP Coding Standards: PHP_CodeSniffer 3.13.5 / WPCS 3.3.0
- PHPStan: level 9 — 0 errors
- PHPCompatibility: 8.0–8.5 — 0 issues
- PHPUnit: 9.6.34 — 42 tests, 109 assertions
Downloads
-
v1.3.0 Stable
released this
2026-06-05 18:40:00 +00:00 | 1 commits to main since this release1.3.0
Release date: 2026-06-05
Security
- TOTP replay prevention: accepted counter step stored in a 90-second transient; same code rejected on second submission within the ±1 window.
- Login username removed from 2FA redirect URLs:
robotstxt-2fa-loginquery parameter replaced with an opaque 32-character token resolved server-side. Username never appears in browser history, logs, or referrer headers.
Added
- WP-CLI command family
wp 2fa(loaded only whenWP_CLIis defined):wp 2fa status <user_id>— show 2FA configuration.wp 2fa enable <user_id> [--method=<method>]— enable 2FA.wp 2fa disable <user_id>— disable 2FA, preserving secrets and codes.wp 2fa reset-recovery <user_id>— regenerate and display recovery codes.wp 2fa list [--role=<role>] [--without-2fa] [--format=table|csv|json]— list users with 2FA status.wp 2fa force-setup [<user_id>] [--role=<role>] [--method=<method>]— enforce 2FA.wp 2fa bypass <user_id> [--days=<n>]— grant temporary bypass (max 30 days).
Compatibility
- WordPress: 6.4 – 7.1
- PHP: 8.0 – 8.5
Tests
- PHP Coding Standards: PHP_CodeSniffer 3.13.5 / WPCS 3.3.0
- PHPStan: level 9 — 0 errors
- PHPCompatibility: 8.0–8.5 — 0 issues
- PHPUnit: 9.6.34 — 42 tests, 109 assertions
Downloads
-
v1.2.1 Stable
released this
2026-06-05 16:41:53 +00:00 | 2 commits to main since this release1.2.1
Release date: 2026-06-05
Fixed
- Recovery code confirmation without the method checkbox now correctly activates the method.
- Fatal error on admin profile pages (add_settings_error not available at init in multisite).
- OTP and recovery text inputs no longer disabled by JS when Enable toggle is off.
- Regenerate codes now requires re-confirmation before the method reactivates.
- Entering a valid OTP or recovery code activates the method even without checking the checkbox.
- Recovery regeneration field validated with strict value check.
Compatibility
- WordPress: 6.4 – 7.1
- PHP: 8.0 – 8.5
Tests
- PHP Coding Standards: PHP_CodeSniffer 3.13.5 / WPCS 3.3.0
- PHPStan: level 9 — 0 errors
- PHPCompatibility: 8.0–8.5 — 0 issues
- PHPUnit: 9.6.34 — 42 tests, 109 assertions
Downloads
-
v1.0.0 Stable
released this
2026-06-05 14:07:45 +00:00 | 4 commits to main since this release[1.0.0] - 2026-06-05
Fixed
- Enable 2FA checkbox now defaults to email and pre-checks it in the UI on first activation.
- QR code for authenticator apps now displays correctly in the user profile.
- "Send the code again" link is disabled for 60 seconds after delivery with a live countdown.
Changed
- Recovery codes section redesigned: plain list with code chips, no coloured notification box.
- 2FA login screen links now in a vertical list for better readability.
Removed
- "Generate new secret" button from the OTP section.
Compatibility
- WordPress: 6.4 – 7.1
- PHP: 8.2 – 8.5
Tests
- PHP Coding Standards: PHP_CodeSniffer 3.13.5 / WPCS 3.3.0
- PHPStan: level 9 — 0 errors
- PHPCompatibility: 8.2–8.5 — 0 issues
- PHPUnit: 9.6.34 — 42 tests, 109 assertions
Downloads
-
v0.3.0 Pre-release
released this
2026-06-05 14:06:43 +00:00 | 5 commits to main since this release[0.3.0] - 2026-06-05
Added
- Delete-on-uninstall option (disabled by default — all plugin data is preserved on removal).
Security
- Email verification codes now use
random_int()(CSPRNG) for cryptographically secure code generation. - Recovery code preview transient TTL reduced from indefinite to 5 minutes.
Fixed
- Network admin settings now save correctly via a dedicated handler writing to
wp_sitemeta. - Settings option registered with
autoload=falseto avoid loading on every page request. update.jsoncorrected to reference the 2FA plugin instead of the SMTP plugin.
Compatibility
- WordPress: 6.4 – 7.1
- PHP: 8.2 – 8.5
Tests
- PHP Coding Standards: PHP_CodeSniffer 3.13.5 / WPCS 3.3.0
- PHPStan: level 9 — 0 errors
- PHPCompatibility: 8.2–8.5 — 0 issues
- PHPUnit: 9.6.34 — 42 tests, 109 assertions
Downloads
-
v0.2.0 Pre-release
released this
2026-06-05 14:05:44 +00:00 | 6 commits to main since this release[0.2.0] - 2026-06-05
Added
- Per-role 2FA method matrix in admin settings: administrators can now choose exactly which verification methods (email, authenticator app, recovery codes) are required for each WordPress role, with select-all row and column controls.
- Authenticator app (TOTP) support: stored secrets, QR code provisioning via
bacon/bacon-qr-code, manual setup key display, and one-time activation confirmation. - Recovery codes: 10 single-use 8-digit codes with profile management, one-time display grid, copy-to-clipboard, and mandatory confirmation before activation.
- Email-based verification codes with throttled delivery (60 s resend cooldown) and 10-minute expiry.
- Configurable verification frequency (every login, daily, weekly, or every 28 days) remembered per device fingerprint; administrators can lock the global schedule.
- Dedicated verification stage token (WP nonce) securing the 2FA screen between password validation and code submission.
- Secure method-switch links on the verification screen letting users change between OTP, email, and recovery-code challenges without restarting the login.
- Network-wide multisite support: network administrators can set and lock enforcement settings across all sites (
Network: trueheader). - Uninstall routine removing all plugin options and user meta.
- Admin settings page as a top-level menu with
manage_optionscapability guard.
Changed
- Settings page now uses the per-role method matrix instead of a flat forced-roles list; old
force_roles+default_methoddata is automatically migrated on first read. - Profile method checkboxes require explicit confirmation: OTP demands a valid 6-digit code, recovery codes demand entering one of the displayed codes before the method activates.
- Profile screen regenerates the OTP secret when the authenticator method is disabled and provides a "Generate new secret" button.
- Recovery code batch exhaustion now auto-generates a fresh batch and surfaces a confirmation prompt rather than locking the user out.
- Login screen hides the username/password fields, removes the Remember Me checkbox, and focuses the verification code input during the 2FA stage.
- Login form auto-submits once the input reaches the method's expected digit count.
Fixed
- Hardened authenticator QR generation by catching library errors and guiding administrators to the required dependency.
- Recovery-code preview persists via transient until explicitly acknowledged; fixes cases where codes disappeared before confirmation.
[0.1.0] - 2024-04-08
Added
- Initial skeleton for the 2FA (by ROBOTSTXT) plugin.
- Initial documentation files (
readme.txt,AGENTS.md,changelog.txt). - Placeholder classes for login handling, user profile integration, and admin settings.
Downloads