Für Entwickler

Bibliotheken

Die Lizenzprüfung als fertiges Paket — einbinden statt selbst zusammenbauen. Ohne Fremdabhängigkeiten, in beiden Sprachen.

Rohe Schnittstelle →

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

JavaNodeBedeutung
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.