Lizenz-Paket

Für alle, die Contao-Erweiterungen verkaufen: Der Shop stellt beim Kauf einen signierten Lizenzschlüssel aus, bestätigt ihn täglich und liefert deine Pakete über ein eigenes Composer-Repository aus – ohne zusätzlichen Dienst.

Wer was installiert

Beim Lizenz-Paket gibt es drei Beteiligte. Der Lizenzprüfer contao-consho-licensecheck-bundle gehört nicht zu deinem Shop, sondern zu der Software, die du verkaufst – er läuft bei deinen Kunden.

Du, im VerkaufsshopConsho und das Lizenz-Paket. Der Shop stellt beim Kauf die Schlüssel aus, bestätigt sie täglich und liefert deine Pakete über das Repository aus.
Deine Softwarenimmt den Lizenzprüfer in ihrer composer.json als Abhängigkeit auf und meldet sich bei ihm als Produkt an (siehe „Deine Software prüft die Lizenz“).
Dein Kundeinstalliert nur deine Software, der Lizenzprüfer kommt über Composer mit. Er trägt den Schlüssel unter System → Lizenzen ein; ab dann fragt seine Installation einmal am Tag bei deinem Shop nach.

In deinem eigenen Shop steht der Lizenzprüfer auch – aber nur, weil das Lizenz-Paket selbst eine Lizenz von consho.eu braucht. Mit den Lizenzen deiner Kunden hat er dort nichts zu tun. Genauso läuft es bei Connect, Mollie und PayPal: consho.eu ist der Verkaufsshop, du bist der Kunde.

Den Lizenzprüfer gibt es als Contao-Bundle, das Lizenz-Paket ist deshalb für Contao-Erweiterungen gedacht. Software für andere Systeme – etwa ein WordPress-Plugin oder eine Desktop-Anwendung – auf Anfrage.

Einrichten

In config/config.yaml die Domain des Verkaufsshops eintragen, ohne https://; die Lizenzschlüssel zeigen auf sie:

contao_consho_licensing:
    host: shop.example.org

Dann einmal das Schlüsselpaar erzeugen:

php bin/console consho:license:keypair

Der Befehl zeigt die Kennung und den öffentlichen Schlüssel, nie den geheimen, und ersetzt ein vorhandenes Paar nur mit --replace. Solange Paar oder Domain fehlen, warnt die Startseite.

Am Artikel

Ein digitaler Artikel mit der Auslieferung Lizenz (siehe Downloads und Lizenzschlüssel):

Produkt-Kennungsteht im Schlüssel; deine Software vergleicht sie mit ihrem eigenen Namen
Versionenwelche Versionen das Repository der Lizenz zeigt: erschienen bis zum Ende des Abos, eine Hauptversion oder alle
Composer-Paketedie Pakete, die die Lizenz öffnet, eines je Zeile

Was dein Kunde bekommt

  • Ein signierter Schlüssel je gekauftem Stück, auf der Bestellseite – nie in einer Mail.
  • Tägliche Bestätigung: Seine Installation fragt einmal am Tag und bekommt eine signierte Antwort – aktiv, ruht wegen einer offenen Rechnung, abgelaufen, gesperrt oder anderswo in Gebrauch. Schlüssel und Antwort werden offline geprüft (Ed25519). Ist der Shop nicht erreichbar, gilt die letzte Antwort bis zu 14 Tage weiter.
  • Ein Schlüssel, eine Installation: Zum Umziehen gibt er die Installation auf der Bestellseite frei; ist ein Schlüssel in fremde Hände geraten, stellt er dort einen neuen aus – der alte gilt dann nicht mehr.
  • Ein Zugang zum Composer-Repository für alle seine Lizenzen, mit den Befehlen und einem Provider-ZIP für den Contao Manager auf der Bestellseite.

Releases veröffentlichen

Neue Versionen kommen nur per Befehl ins Repository und werden nie ersetzt:

php bin/console consho:license:publish vendor/package 1.4.0 /pfad/zum/paket.zip

Die composer.json im ZIP muss das Paket nennen. Das Archiv liegt außerhalb des Web-Verzeichnisses.

Im Backend

  • Ausgestellte Lizenzen: jede Lizenz mit Produkt, Bestellung, Stand und den Installationen, auf denen sie aktiv war; „Interne Lizenz ausstellen“ für eigene Installationen, Partner oder Kulanz.
  • Repository-Zugänge: die Anmeldung je Kunde, mit „Zugang neu erzeugen“.

Die Befehle (consho:license:list, show, release-activation, issue-internal, access-renew) gehen auch über contao-ai. Ihre Antworten enthalten nie einen Schlüssel, ein Token oder Kundendaten.

Sichern

Den Verkaufsshop mindestens täglich sichern. Lizenzen hängen an Bestellungen: Nach dem Einspielen einer älteren Sicherung sind seither ausgestellte Schlüssel unbekannt. Die Startseite nennt sie, und die Installationen laufen bis zu 14 Tage mit ihrer letzten Bestätigung weiter.

Deine Software prüft die Lizenz

Damit deine Software ihre Lizenz prüft, nimmt sie das freie contao-consho-licensecheck-bundle (MIT) auf:

  1. In der composer.json deiner Software unter require: webwerkwien/contao-consho-licensecheck-bundle.
  2. Ein Dienst, der LicensedProductInterface umsetzt: Produkt-Kennung (dieselbe wie am Artikel im Shop), Name, Version und die öffentlichen Schlüssel deines Shops, wie sie consho:license:keypair anzeigt.
  3. Vor jeder Funktion, die die Lizenz abdeckt, fragst du nach; ohne gültige Lizenz wirft der Aufruf eine Ausnahme mit dem Grund:
$this->gate->assertAllowed('acme-tool', time());

Die öffentlichen Schlüssel gehören in deinen Code, nicht in die Konfiguration der Installation – sonst könnte ein Kunde einem eigenen Schlüsselpaar vertrauen.

Was du sperrst, entscheidest du. Bewährt hat sich: Was die Kunden deiner Kunden brauchen, läuft weiter, nur die Annehmlichkeiten ruhen.

Wenn das Abo endet

Schlüssel beim Kauf, tägliche Bestätigung, Repository und die Knöpfe deiner Kunden laufen weiter – sie dienen deinen Kunden. Releases veröffentlichen, interne Lizenzen und die schreibenden Befehle ruhen.