@crazydevelopment/lizenz
v1.0.0
Published
Lizenzprüfung für Plugins und Programme, die über den CrazyDevelopment Hub verkauft werden.
Maintainers
Readme
@crazydevelopment/lizenz
Lizenzprüfung für alles, was über den CrazyDevelopment Hub
verkauft wird. Ohne Abhängigkeiten — nur fetch und crypto aus Node selbst.
npm install @crazydevelopment/lizenzOder ohne npm, direkt vom Hub — dafür braucht es kein Konto bei npmjs:
npm install https://hub.crazyde.de/pakete/crazydevelopment-lizenz-1.0.0.tgzconst { Lizenz } = require('@crazydevelopment/lizenz');
const lizenz = new Lizenz({
plugin: 'mein-plugin', // dein Slug im Hub
geheimnis: process.env.LIZENZ_GEHEIMNIS, // steht unter /lizenzen
server: 'mc-01' // belegt einen Platz der Lizenz
});
const e = await lizenz.darfLaufen(schluessel);
if (!e.valid) {
console.error(e.message);
process.exit(1);
}Was die Bibliothek abnimmt
Drei Dinge, die man von Hand gern falsch macht:
Die Unterschrift prüfen. Der Hub unterschreibt jede Antwort mit deinem
Geheimnis. Ohne diese Prüfung genügt ein Eintrag in der hosts-Datei, um einen
eigenen „Hub" unterzuschieben, der immer ja sagt.
Den Zufallswert zurückvergleichen. Sonst lässt sich eine einmal mitgeschnittene Ja-Antwort beliebig oft einspielen.
Eine Schonfrist einräumen. Ist der Hub nicht erreichbar, läuft dein Programm weiter — sieben Tage ab der letzten gültigen Antwort. Ein Netzproblem auf unserer Seite darf nicht den Server deiner Kundschaft lahmlegen. Ein klares Nein wirkt dagegen sofort.
Zwei Wege
| | |
|---|---|
| darfLaufen(key) | wirft nie; bei nicht erreichbarem Hub entscheidet die Schonfrist |
| pruefen(key) | wirft HubNichtErreichbar, wenn der Hub nicht antwortet |
Was zurückkommt
{
valid: true,
reason: 'ok', // blocked, expired, mismatch, offline, signature …
message: 'License is valid.',
owner: 'Steve',
type: 'plugin', // oder 'master'
expires: null,
geprueft: true // wurde die Unterschrift wirklich geprüft?
}Auf geprueft achten. Ist es false, wurde kein Geheimnis hinterlegt — die
Antwort mag stimmen, nachgewiesen ist sie nicht.
Weiteres
lizenz.freigeben(key, 'mc-01'); // Serverplatz beim Umzug freigeben
lizenz.vergessen(); // Zwischenspeicher leeren
await lizenz.pruefen(key, { frisch: true });Voreinstellungen: 8 s Zeitlimit, 6 h Zwischenspeicher, 7 Tage Schonfrist — alle im Konstruktor änderbar.
Die rohe Schnittstelle ist unter https://hub.crazyde.de/lizenz-api beschrieben; sie lässt sich in jeder Sprache in zwanzig Zeilen ansprechen. Diese Bibliothek ist Bequemlichkeit, keine Voraussetzung.
