Waiver Engine

Description

Waiver Engine lets you build waiver and contract forms in the WordPress
admin, map form fields to coordinate positions on an uploaded PDF template,
and automatically generate filled PDFs when visitors submit the form.

Key features:

  • Build multi-section waiver/contract forms
  • Map form fields to exact coordinate positions on a PDF
  • Auto-generate filled PDFs on each submission
  • Admin entry list with pagination, filtering, sorting, and PDF download
  • Import / export template field-to-PDF mappings for easy site migration
  • Security protections (nonce, honeypot, timing checks, rate limiting, optional CAPTCHA)

WordPress.org (free) package:

The version distributed on WordPress.org is fully functional and includes:

  • Unlimited waiver templates
  • PDF field mapping and PDF generation
  • Waiver submission capture and admin entry management
  • Import/export of template field mappings
  • Security settings (rate limiting, optional CAPTCHA, PDF cleanup)

Pro add-on (separate download):

A premium package is available separately (not from WordPress.org) with
additional features:

  • Repeating rows in form sections (per-row PDF output mode)
  • Admin notification emails with PDF attachments
  • Submitter email copies with PDF attachments
  • Amelia Booking integration and booking-linked waiver flows

Integration architecture:

The plugin follows an integration-manager pattern (the same approach used
by WooCommerce add-ons, WPForms, RankMath, and ACF). Each third-party
integration lives in includes/integrations/ and is loaded only when its
host plugin is active. The core plugin has zero knowledge of Amelia tables
when Amelia is not installed.

Supported PDF formats

This plugin only supports PDF 1.4 or PDF/A-1b files with:

  • Object streams disabled
  • Compressed cross-reference streams disabled
  • No password protection or encryption
  • Valid, readable pages with fonts embedded where required

If the file cannot be processed, export or print a new PDF using PDF 1.4 or
PDF/A-1b settings and select the converted file instead.

Known issues and improvements

  • There is currently no validation when a PDF is uploaded to ensure that its
    format is supported. UI validation is planned for a future release.

External services

This plugin can connect to third-party services when you enable optional
features. No data is sent unless you configure the feature.

Google reCAPTCHA v3 (optional CAPTCHA)

Used only when you select Google reCAPTCHA v3 under Waivers > Settings
and enable CAPTCHA on a template.

  • What it is: Google’s invisible bot-detection service.
  • What is sent: When a visitor submits a waiver form with CAPTCHA enabled,
    the browser loads Google’s reCAPTCHA script and obtains a token. On
    submission, the plugin sends that token, your secret key, and the
    visitor’s IP address to Google’s verification endpoint to validate the
    request.
  • When: Only during form submission when CAPTCHA is enabled for that template.
  • Terms of service: https://policies.google.com/terms
  • Privacy policy: https://policies.google.com/privacy

hCaptcha (optional CAPTCHA)

Used only when you select hCaptcha under Waivers > Settings and enable
CAPTCHA on a template.

  • What it is: hCaptcha’s invisible bot-detection service.
  • What is sent: When a visitor submits a waiver form with CAPTCHA enabled,
    the browser loads hCaptcha’s script and obtains a token. On submission,
    the plugin sends that token, your secret key, and the visitor’s IP
    address to hCaptcha’s verification endpoint to validate the request.
  • When: Only during form submission when CAPTCHA is enabled for that template.
  • Terms of service: https://hcaptcha.com/terms
  • Privacy policy: https://hcaptcha.com/privacy

Security

Waiver Engine implements multiple layers of protection against automated
abuse and bot submissions:

1. WordPress Nonce (CSRF protection)
Every form submission is validated against a standard WordPress nonce
(wp_verify_nonce). Requests without a valid nonce are rejected with HTTP 403.

2. Honeypot Field
A hidden text input is rendered off-screen (CSS position:absolute; left:-9999px)
and labelled with aria-hidden="true". The field must exist and be completely
empty. Bots that auto-fill all inputs will be silently rejected.

3. Timing Check
On page load, the form records a HMAC-SHA256-signed timestamp (using WordPress’s
wp_salt(‘nonce’) as the key). On submission the signature is verified and the
elapsed time is checked: submissions faster than 3 seconds or older than 2 hours
are rejected with HTTP 429. This prevents replay attacks and trivially fast bot
submissions.

4. IP Rate Limiting
A sliding-window rate limiter (implemented using WordPress transients) limits how
many waivers a single IP address can submit within a configurable time window.
Defaults to 5 submissions per 15 minutes. Configurable in Waivers > Settings.
Can be disabled independently if another rate-limiting layer exists.

5. CAPTCHA (optional)
An invisible CAPTCHA challenge can be added to waiver forms for additional
protection. Supported providers:

  • Google reCAPTCHA v3 – invisible scoring model. A score of >= 0.5 is
    required. Register your keys at https://www.google.com/recaptcha/admin.
  • hCaptcha (invisible) – privacy-respecting alternative. Register at
    https://www.hcaptcha.com/signup-interstitial.

Configuration steps:

  1. Go to Waivers > Settings and choose a CAPTCHA provider.
  2. Enter the Site Key (public) and Secret Key (private) from your
    provider’s dashboard.
  3. Open any template in Waivers > Templates > Edit and check Require
    CAPTCHA verification on this form
    .

The CAPTCHA toggle defaults to OFF globally. Individual templates also default
to OFF even when a provider is configured, so you can roll out selectively.

Token verification happens entirely server-side via wp_remote_post() to the
provider’s verify endpoint. The secret key is never exposed in browser output.

6. PDF File Cleanup
The PDF File Cleanup tool in Settings lets you permanently delete generated
PDFs older than a chosen number of days. PDFs older than the threshold are
removed from disk; database entry records are preserved. This reduces disk
footprint and limits the blast radius of any hypothetical file-disclosure issue.

License

Waiver Engine is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by the
Free Software Foundation, either version 2 of the License, or any later
version.

Waiver Engine is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.

Installation

  1. Upload the waiver-engine folder to /wp-content/plugins/.
  2. Activate through the Plugins screen in WordPress.
  3. Navigate to Waivers > Templates to create your first waiver template.
  4. Upload a PDF template file, map form fields to PDF coordinates, and
    copy the [pewave_form id="N"] shortcode into any page or post.

FAQ

Does this plugin require Amelia Booking?

No. Amelia integration is optional and is only available in the separate
Pro package. The WordPress.org version works fully for standalone waivers.

Where are submitted PDFs stored?

Generated PDFs are stored inside the wp-content/uploads/pewave-pdfs/
directory on the server. They are served for download through an
authenticated admin URL, not directly from disk.

Can I migrate template mappings between sites?

Yes. On the template edit screen, scroll past the Save button to find the
Export / Import section. Export downloads a JSON file containing your field
schema and PDF coordinate mappings. Import merges those into an existing
template on another site while preserving its title and other settings.

Can booking confirmation emails link directly to the pre-filled waiver form?

Yes, in the Pro package with Amelia integration enabled. Append a booking_id
query parameter to the waiver page URL and ask the customer to confirm using
the same booking email they used in Amelia. Optionally include booking_email
as a convenience parameter.

Reviews

There are no reviews for this plugin.

Contributors & Developers

“Waiver Engine” is open source software. The following people have contributed to this plugin.

Contributors

Translate “Waiver Engine” into your language.

Interested in development?

Browse the code, check out the SVN repository, or subscribe to the development log by RSS.

Changelog

1.1.6

  • Update third-party libraries: Freemius WordPress SDK 2.13.4 and FPDI 2.6.8.
  • Standardize remaining internal admin identifiers to the pewave prefix.
  • Align script/style handles in template editor screens to pewave naming.

1.1.5

  • Fix admin slug/label regressions introduced by identifier hardening.
  • Restore Visual Mapper selector parity and related admin CSS bindings.
  • Add direct license activation path for unlicensed Pro installs.
  • Harden Freemius SDK bootstrapping when vendor files are incomplete.
  • Fix release packaging exclusion bug that removed Freemius templates.

1.1.4

  • Remove uninstall.php so Freemius can track uninstall events; cleanup runs via after_uninstall hook.

1.1.3

  • Fix garbled punctuation in admin and frontend UI strings.
  • Exclude internal user guides from release ZIPs.
  • Move premium-only settings UI out of the free package source.
  • Move uninstall cleanup to uninstall.php; tested up to WordPress 7.0.

1.1.2

  • Suppress Freemius site-wide trial and pricing upsell notices in the WordPress.org free package.
  • Add a single contextual Pro mention at the bottom of the Settings screen only.

1.1.1

  • WordPress.org compliance: removed feature gating and upgrade prompts from the free package.
  • Moved settings page inline JavaScript to enqueued admin assets.
  • Documented external CAPTCHA services in readme with terms and privacy links.
  • Updated FPDF (1.9) and PDF.js (5.7.284) dependencies.
  • Included composer.json in release packages; corrected repository URL.

1.1.0

  • Added Free-to-Pro handoff detection and in-dashboard migration guidance.
  • Added full data migration tooling (templates, entries, and key settings export/import).
  • Added one-click Free plugin deactivation action from Pro handoff notice with nonce/capability safeguards.
  • Refined Freemius premium package/runtime helpers for single-codebase dual ZIP packaging.

1.0.1

  • Improvements to form/template handling and admin workflows.
  • User guide updates with reorganized flow-based screenshots.
  • Release tooling and packaging updates for consistent ZIP builds.

1.0.0

  • Initial public release.
  • Custom DB tables (no CPT dependency).
  • PDF overlay generation via FPDI/FPDF.
  • Integration manager architecture for optional third-party integrations.
  • Security: WordPress nonce validation, honeypot field, HMAC-signed timing
    check, IP rate limiting (configurable via Settings), optional CAPTCHA
    (reCAPTCHA v3 or hCaptcha, configurable globally and per-template),
    and manual PDF cleanup tool.
  • Import / export of template field-to-PDF mappings.