Zuletzt geändert am 10. Oktober 2018 um 08:32

Scoring-Module erstellen

Sie können ein eigenes Scoring-Modul erstellen, um einen neuen Scoring-Anbieter an sourceDESK anzubinden.

Grundaufbau

Ein Scoring-Modul bekommt ein eigenes Verzeichnis unter modules/scoring. In diesem Verzeichnis muss sich eine PHP-Datei mit dem gleichen Namen wie das Verzeichnis und der Endung .php befinden. In dieser PHP-Datei wird eine Klasse definiert, die von der Klasse Scoring erbt.

Attribute

Es werden mehrere Attribute innerhalb der erstellten Klasse benötigt, die höchstens protected sein dürfen:

  • $short gibt den Kurznamen des Moduls an, das entspricht dem Verzeichnis- bzw. Dateinamen
  • $name gibt einen Anzeigenamen für das Modul an
  • $version definiert die Version des Moduls

Methoden

Folgende Methoden können definiert werden:

  • getSettings() gibt die verfügbaren Modul-Einstellungen als Array zurück - auf sie kann nachher über das Objekt (stdClass) $this->options zugegriffen werden
  • getMethods($u) definiert die für dieses Scoring-Modul verfügbaren Prüfroutinen und die dazugehörigen Methoden, die bei Durchführung aufgerufen werden - sie erhalten ein Objekt instanceof User als Argument

Beispiel-Code

<?php
 
class AbuseIpDbScoring extends Scoring {
	protected $short = "abuseipdb";
	protected $name = "AbuseIPDB";
	protected $version = "1.0";
 
	public function getSettings() {
		return Array(
        		"apikey" => Array("type" => "password", "name" => "API-Schlüssel"),
		);
	}
 
	public function getMethods() {
		return Array(
			"check" => "AbuseIPDB-Prüfung",
		);
	}
 
	public function check($u) {
        	global $db, $CFG;
 
	        // Select last IP address
        	$sql = $db->query("SELECT * FROM " . $CFG['DB']['PREFIX'] . "client_log WHERE user = " . $u->get()['ID'] . " AND ip != 'Admin' ORDER BY ID DESC, time DESC LIMIT 1");
	        if ($sql->num_rows > 0 && is_object($info = $sql->fetch_object()) && filter_var($info->ip, FILTER_VALIDATE_IP)) {
            		$c = file_get_contents("https://www.abuseipdb.com/check/" . urlencode($info->ip) . "/json?key=" . urlencode($this->options->apikey));
 
           		if ($c != '[]') {
                		return Array("AbuseIPDB-Eintrag vorhanden", "F", "<a href='https://www.abuseipdb.com/check/" . urlencode($info->ip) . "' target='_blank'>Details aufrufen</a>");
            		} else {
                		return Array("Kein Eintrag bei AbuseIPDB", "D", "");
            		}
        	}
	}
}