Bibliotheken
Die Lizenzprüfung als fertiges Paket — einbinden statt selbst zusammenbauen. Ohne Fremdabhängigkeiten, in beiden Sprachen.
Beide Pakete nehmen dir genau die drei Dinge ab, die man von Hand gern falsch macht: die Unterschrift prüfen, den Zufallswert zurückvergleichen und dem Hub eine Schonfrist einräumen, wenn er mal nicht erreichbar ist.
Java (Maven)
Für Plugins. Java 8, keine Abhängigkeiten — lässt sich in jedes Plugin schattieren, ohne dass jemand über Versionskonflikte stolpert.
<repositories>
<repository>
<id>crazydevelopment</id>
<url>…/maven</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>de.crazydevelopment</groupId>
<artifactId>lizenz-client</artifactId>
<version>1.0.0</version>
</dependency>
</dependencies>
Mit Gradle: maven { url '…/maven' }
und implementation 'de.crazydevelopment:lizenz-client:1.0.0'
So wird es benutzt
import de.crazydevelopment.lizenz.Lizenz;
import de.crazydevelopment.lizenz.Ergebnis;
public final class MeinPlugin extends JavaPlugin {
private Lizenz lizenz;
@Override
public void onEnable() {
lizenz = Lizenz.fuer("mein-plugin")
.geheimnis("…") // steht unter /lizenzen
.server(getConfig().getString("server-kennung"))
.bauen();
// NIEMALS im Haupt-Thread — eine Netzabfrage friert den Server ein
getServer().getScheduler().runTaskAsynchronously(this, () -> {
Ergebnis e = lizenz.darfLaufen(getConfig().getString("lizenz"));
getServer().getScheduler().runTask(this, () -> {
if (!e.gueltig()) {
getLogger().severe(e.meldung());
getServer().getPluginManager().disablePlugin(this);
}
});
});
}
}
darfLaufen() wirft nicht: Ist der Hub nicht
erreichbar, entscheidet die Schonfrist (7 Tage ab der letzten gültigen Antwort).
Wer das selbst behandeln will, nimmt pruefen() — das wirft
NichtErreichbar.
Node.js (npm)
Für Werkzeuge, Bots und Server, die eine Lizenz prüfen sollen.
npm install …/pakete/crazydevelopment-lizenz-1.0.0.tgz
const { Lizenz } = require('@crazydevelopment/lizenz');
const lizenz = new Lizenz({
plugin: 'mein-plugin',
geheimnis: process.env.LIZENZ_GEHEIMNIS,
server: 'mc-01'
});
const e = await lizenz.darfLaufen(schluessel);
if (!e.valid) {
console.error(e.message);
process.exit(1);
}
Was zurückkommt
| Java | Node | Bedeutung |
|---|---|---|
gueltig() | valid |
Darf es laufen? |
grund() | reason |
Kennwort: ok, blocked, expired, mismatch, offline … |
meldung() | message |
Satz für die Konsole |
inhaber() | owner |
Wem gehört der Schlüssel |
art() | type |
plugin oder master |
geprueft() | geprueft |
Wurde die Unterschrift wirklich geprüft? |
Auf geprueft achten. Ist es
false, wurde kein Geheimnis hinterlegt — die Antwort mag stimmen,
nachgewiesen ist sie nicht. Dann genügt ein Eintrag in der hosts-Datei,
um einen eigenen „Hub" unterzuschieben, der immer ja sagt.
Ohne Bibliothek
Die Schnittstelle ist bewusst so einfach, dass sie sich in jeder Sprache in zwanzig Zeilen ansprechen lässt — hier steht, wie. Die Bibliotheken sind Bequemlichkeit, keine Voraussetzung.
