host, $this->user, $this->pass, $this->db); if($this->connect_errno){ die($this->connect_error); } $this->set_charset('utf8'); } } class checkToken { private $db = null; public function __construct() { $this->db = new db(); } private function getRole($token) { $dbAction = $this->db->prepare("SELECT role FROM clients WHERE token = ?"); $dbAction->bind_param('s',$token); $dbAction->execute(); $dbAction->store_result(); $dbAction->bind_result($role); $dbAction->fetch(); if ($dbAction->num_rows() == 1){ return $role; } return false; } public function isAdmin($token) { if($this->getRole($token) == 'admin') { return true; } return false; } public function isClient($token) { if($this->getRole($token) == 'client') { return true; } return false; } } class action { use db; public function __construct() { $this->db = new db(); } private function isListed($ip) { $dbAction = $this->db->prepare("SELECT ip FROM list WHERE ip = ?"); $dbAction->bind_param('i',ip2long($ip)); $dbAction->execute(); $dbAction->store_result(); if($dbAction->num_rows() == 0) { return false; } return true; } private function deListCount($ip) { $dbAction = $this->db->prepare("SELECT count FROM delist WHERE ip = ?"); $dbAction->bind_param('i',ip2long($ip)); $dbAction->execute(); $dbAction->store_result(); $dbAction->bind_result($count); $dbAction->fetch(); return $count; } public function set($ip) { $dbAction = $this->db->prepare("INSERT IGNORE INTO list VALUES (?)"); $dbAction->bind_param('i',ip2long($ip)); return $dbAction->execute(); } public function delist($ip) { if(!islisted($ip)) { return false; } //check delisting count if (delistCount($ip) > 3){ echo "Fatal: ". $ip . " delisted to often!\n"; return false; } //delist ip $dbAction = $this->db->prepare("DELETE FROM list WHERE ip = ?"); $dbAction->bind_param('i',ip2long($ip)); $dbAction->execute(); //update delist count $dbAction = $this->db->prepare("INSERT INTO delist (ip) VALUES (?) ON DUPLICATE KEY UPDATE count = count + 1"); $dbAction->bind_param('i',ip2long($ip)); $dbAction->execute(); return true; } } $ip = trim($_GET['ip']); $token = trim($_GET['token']); $action = trim($_GET['action']); switch($action) { case 'delist': if((new action)->delist($ip)){ echo "$ip delisted\n"; } else { echo "$ip not delisted\n"; }; break; case 'blacklist': break; case 'whitelist': break; default: if ((new checkToken)->isClient($token)){ if((new action)->set($ip)){ echo " inserted " . $ip ."\n"; } else { echo " fehler\n"; }; } else { echo "Client token " . $token . " not registered\n"; }; }