Lizenzsystem

Aus sourceDESK Wiki
Version vom 22. Juli 2020, 10:28 Uhr von Richard Reiber (Diskussion | Beiträge) (Implementierung)

(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche

sourceDESK hat ein integriertes Lizenz-System für den Verkauf von Software-Produkten.

Funktionsweise

Der Kunde erhält beim Kauf eines Software-Produkts mit aktiviertem Lizenz-System einen individuellen Lizenz-Schlüssel. Mit diesem wird die erworbene Software lizensiert.

Sie können das Lizenz-System in den Einstellungen des Produkts aktivieren. Dabei wird Ihnen ein automatisch generiertes Lizenz-Geheimnis angezeigt, welches dazu dient, aktivierte Lizenzen zu cachen. Das führt dazu, dass die Lizenz nicht bei jeder Benutzung der Software online geprüft werden muss. Sie können ferner einstellen, wie viele Tage zwischen zwei Lizenz-Checks liegen sollen (Cache-Zeit).

Außerdem können Sie festlegen, wie oft der Kunde die Lizenz zurücksetzen darf: Mit der Aktivierung der Lizenz werden bestimmte Parameter (etwa IP-Adresse, Hostname und Verzeichnis) gespeichert. Bei einer Änderung dieser Parameter muss die Lizenz zurückgesetzt und erneut aktiviert werden.

Lizenzschlüssel neu generieren

Sie können in der Administration bei einem Kunden-Produkt den Lizenzschlüssel neu generieren. Das kann zum Beispiel nützlich sein, wenn der Lizenzschlüssel Dritten in die Hände gefallen ist.

Einschränkungen aufheben

Bei einem Kunden-Produkt können Sie zudem die Einschränkungen (IP-Adresse, Hostname und Verzeichnis) einsehen und auf Wunsch aufheben / wieder aktivieren.

Reissues

Die Anzahl der Reissues ist beschränkt auf die von Ihnen gewählte Anzahl. Sie können einen manuellen Reissue über die Produktansicht durchführen - hier können Sie die Anzahl der bisherigen Kunden-Reissues auch zurücksetzen.

Implementierung

Nachfolgend sehen Sie eine Beispielimplementierung des Systems in PHP:

function sd_licenseCheck($licenseKey = "", $cacheKey = "", $r = false){
    /* Please insert the secret shown in the product configuration in sourceDESK here */
    $secret = "example123";
    /* Please insert the number of directory should be removed from the path end */
    $rmdir = 0;
    /* Please insert the ID of the product */
    $pid = 123;
    /* Please insert the URL to sourceDESK */
    $url = "https://sourceway.de/";
    /* DO NOT CHANGE ANYTHING BELOW THIS LINE */
 
    $host = $_SERVER['SERVER_NAME'];
    $ip = isset($_SERVER['SERVER_ADDR']) ? $_SERVER['SERVER_ADDR'] : $_SERVER['LOCAL_ADDR'];
    $dir = $rmdir > 0 ? implode("/", array_splice(explode("/", __DIR__), 0, $rmdir / -1)) : __DIR__;
 
    if(!empty($cacheKey)){
        $ex = explode("|", $cacheKey);
        if(
            count($ex) == 6 &&
            $pid == $ex[0] && 
            ($ex[1] == "all" || in_array($host, explode(",", $ex[1]))) && 
            ($ex[2] == "all" || in_array($ip, explode(",", $ex[2]))) && 
            ($ex[3] == "all" || in_array($dir, explode(",", $ex[3]))) && 
            strtotime($ex[4]) >= strtotime(date("Y-m-d")) && 
            $ex[5] == hash("sha512", $secret . implode("|", array_splice($ex, 0, 5)))
        ) return Array(true, $cacheKey);
        else if($r) return Array(false, "");
    }
 
    if(empty($licenseKey)) return Array(false, "");
    $url = rtrim($url, "/") . "/api/license/info?key=" . urlencode($licenseKey) . "&dir=" . urlencode($dir);
    $res = @file_get_contents($url);
    if(!$res || !($res = json_decode($res)) || empty($res->data->cacheKey)) return Array(false, "");
 
    return sd_licenseCheck($licenseKey, $res->data->cacheKey, true);
}
 
$res = sd_licenseCheck($licenseKey, $cacheKey);
 
if (!$res[0]) {
    die("License not correct");
} else {
    $cacheKey = $res[1];
}

$licenseKey ist der durch den Kunden einzugebende Lizenzschlüssel. $cacheKey muss durch Ihr Programm gespeichert und beim nächsten Aufruf der Funktion übergeben werden.