Skip to content

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-LizenzSystem B – Formular-Zahlungen
Wer zahltDer Kunde zahlt uns für AD FormWebsite-Besucher zahlen den Kunden
NamespaceDingfelder\AdForm\LicensingDingfelder\AdForm\Payments
SpeicherOptionen ad_form_license_*Tabelle ad_form_payments
Identifierslicense_id, plan, entitlementsgateway, 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:

OptionInhalt
ad_form_license_identityUUID, Token, License-ID
ad_form_license_payloadSignierter Envelope
ad_form_license_runtimeAbgeleiteter 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: free gilt 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

Digitale Lösungen. Persönlich. Zukunftssicher.