Scoring-Module erstellen: Unterschied zwischen den Versionen

Aus sourceDESK Wiki
Wechseln zu: Navigation, Suche
Zeile 28: Zeile 28:
 
public function getSettings() {
 
public function getSettings() {
 
return Array(
 
return Array(
            "apikey" => Array("type" => "password", "name" => "API-Schlüssel"),
+
        "apikey" => Array("type" => "password", "name" => "API-Schlüssel"),
 
);
 
);
 
}
 
}
Zeile 39: Zeile 39:
  
 
public function check($u) {
 
public function check($u) {
        global $db, $CFG;
+
        global $db, $CFG;
  
        // Select last IP address
+
        // 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");
+
        $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)) {
+
        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));
+
            $c = file_get_contents("https://www.abuseipdb.com/check/" . urlencode($info->ip) . "/json?key=" . urlencode($this->options->apikey));
  
            if ($c != '[]') {
+
          if ($c != '[]') {
                return Array("AbuseIPDB-Eintrag vorhanden", "F", "<a href='https://www.abuseipdb.com/check/" . urlencode($info->ip) . "' target='_blank'>Details aufrufen</a>");
+
                return Array("AbuseIPDB-Eintrag vorhanden", "F", "<a href='https://www.abuseipdb.com/check/" . urlencode($info->ip) . "' target='_blank'>Details aufrufen</a>");
            } else {
+
            } else {
                return Array("Kein Eintrag bei AbuseIPDB", "D", "");
+
                return Array("Kein Eintrag bei AbuseIPDB", "D", "");
            }
+
            }
        }
+
        }
 
}
 
}
 
}
 
}
 
</source>
 
</source>

Version vom 10. Oktober 2018, 08:26 Uhr

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->info zugegriffen werden
  • getMethods() 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", "");
            		}
        	}
	}
}