Skip to content

v3.4.158

Choose a tag to compare

@radialmonster radialmonster released this 07 Aug 20:17
· 4 commits to main since this release

Highlights

  • Recover undecryptable Google credentials — when the stored account data can't be decrypted (AUTH_KEY changed after a migration/restore, or a corrupted option), the Settings tab now shows a "Reset stored credentials" button so you can clear the unrecoverable data and reconnect a fresh Google account.
  • Fixes the reconnect dead-end — previously the plugin refused to modify the undecryptable accounts blob, so reconnecting was impossible; the reset path clears it safely (no-op if data still decrypts).

Bug fixes & hardening

  • Missing-Email / slot counts aligned with the assignment slot check: revocation_error rows no longer count as occupying a slot, so a recipient stuck in Drive-delete retry surfaces as an open assignable slot.
  • Self-service rate limits refunded on no-side-effect submissions (typo, no free slots, item mismatch) so a failed attempt no longer burns a per-order/per-IP token for the hour.
  • VALUES() upsert replaced with the INSERT ... AS new syntax (MySQL 8.0.20+ deprecation).
  • Backfill jobs retention sweep — completed/failed jobs older than 30 days are pruned hourly under a named lock (filterable via wgdp_backfill_retention_days).
  • Dashboard recent-failures list cached (2-min TTL) to stop scanning the whole entitlements table on every dashboard load.
  • IP throttling now honors a trusted X-Forwarded-For chain when configured via the wgdp_trusted_proxies filter (never for untrusted peers).
  • Claim-page OTP CSS registered under its own handle instead of piggybacking on wp-block-library.
  • Partial-refund candidates exclude revocation_error rows; get_siblings() now orders deterministically; admin re-provision revokes via Drive delete when a permission id is present; Access Manager total folds injected unassigned rows into the reported count.

Notes

  • Uses the standard GitHub updater (Flow B manual release). Added build_plugin.py for future releases.