Darstellung
Licensing-Architektur
AD Form spricht ausschließlich mit https://api.andredingfelder.com. Stripe, Dashboard-Datenbanken und Preise gehören der zentralen Plattform, nicht dem Plugin.
Zwei Zahlungssysteme dürfen sich nie vermischen:
| System A – Plugin-Lizenz | System B – Formular-Zahlungen | |
|---|---|---|
| Wer zahlt | Der Kunde zahlt uns für AD Form | Website-Besucher zahlen den Kunden |
| Namespace | Dingfelder\AdForm\Licensing | Dingfelder\AdForm\Payments |
| Speicher | Optionen ad_form_license_* | Tabelle ad_form_payments |
| Identifiers | license_id, plan, entitlements | gateway, gateway_payment_id |
Boot
LicensingServiceProvider sitzt in Plugin::register_providers() direkt hinter DatabaseServiceProvider. Damit sind Entitlements auflösbar, bevor Fields, Actions, REST, Frontend, Elementor und Gutenberg booten.
Der Rest des Plugins spricht ausschließlich mit LicenseManager und EntitlementManager. Kein anderer Code vergleicht Pläne.
Signierte Payloads
Die API antwortet mit { payload, signature, kid, algorithm }. SignatureVerifier prüft Ed25519 (sodium_crypto_sign_verify_detached). Bei Fehlschlag wird der komplette Payload verworfen – nie teilweise verwendet.
PublicKeyRegistry ist die Trust Anchor. Sie ist nicht filterbar. Ein Placeholder-Key bedeutet: dieses Build kann nichts verifizieren und bleibt auf Free.
Cache und Offline
Drei Optionen, keine davon autoload:
| Option | Inhalt |
|---|---|
ad_form_license_identity | UUID, Token, License-ID |
ad_form_license_payload | Signierter Envelope |
ad_form_license_runtime | Abgeleiteter Slice für schnelle Lookups |
Vor jeder Verwendung wird die gespeicherte Signatur erneut geprüft. Eine handeditierte Option erzeugt keine Entitlements.
Zwei Uhren, die nicht vermischt werden dürfen:
- Refresh ~24 h plus Jitter, gesteuert durch
refresh_after. - Offline Grace 7 Tage nach
expires_at, nur wenn die API nicht erreichbar ist. - Business Grace gibt es nicht. Ein signierter
plan: freegilt sofort.
Multisite
Lizenz-Scope ist per Blog, analog zu Schema, Optionen und Uninstall. Network-Activation installiert eine eigene UUID pro Site. Die API entscheidet, ob das innerhalb des Plans liegt.
Weiterlesen
- Entitlements & Feature Gating
- Referenz: LICENSING.md, LICENSE_API.md
- ADRs 0001–0007 unter Referenzdokumente