host, $this->user, $this->pw, $this->dbname);
}
catch(Exception $e)
{
printf('Fehler beim Öffnen der Datenbank.
%s',
$e->getMessage);
exit();
}
}
public static function getInstance(){
if(self::$db_obj === null)
self::$objekt = new db_sql;
return self::$db_obj;
}
private final function __clone(){ }
}
error_reporting(E_ALL);
$ip = trim($_GET['ip']);
$token = trim($_GET['token']);
$action = trim($_GET['action']);
$db = new db;
if ($db->connect_errno){
die($db->connect_error);
}
$db->set_charset('utf8');
function checkToken($token,$db) {
$dbAction = $db->prepare("SELECT description FROM clients WHERE token = ?");
$dbAction->bind_param('s',$token);
$dbAction->execute();
$dbAction->store_result();
$dbAction->bind_result($desc);
$dbAction->fetch();
if ($dbAction->num_rows() == 1){
echo "Client " . $desc;
return true;
}
return false;
}
function checkAdmin($token,$db) {
$dbAction = $db->prepare("SELECT description FROM clients WHERE token = ?");
$dbAction->bind_param('s',$token);
$dbAction->execute();
$dbAction->store_result();
$dbAction->bind_result($desc);
$dbAction->fetch();
if ($dbAction->num_rows() == 1){
if($desc == 'admin') {
return true;
}
}
return false;
}
function set($ip,$db) {
$dbAction = $db->prepare("INSERT IGNORE INTO list VALUES (?)");
$dbAction->bind_param('i',ip2long($ip));
return $dbAction->execute();
}
function islisted($ip,$db) {
$dbAction = $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;
}
function delistCount($ip,$db) {
$dbAction = $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;
}
function delist($ip,$db) {
if(!islisted($ip,$db)) {
return false;
}
//check delisting count
if (delistCount($ip,$db) > 3){
echo "Fatal: ". $ip . " delisted to often!\n";
return false;
}
//delist ip
$dbAction = $db->prepare("DELETE FROM list WHERE ip = ?");
$dbAction->bind_param('i',ip2long($ip));
$dbAction->execute();
//update delist count
$dbAction = $db->prepare("INSERT INTO delist (ip) VALUES (?) ON DUPLICATE KEY UPDATE count = count + 1");
$dbAction->bind_param('i',ip2long($ip));
$dbAction->execute();
return true;
}
switch($action) {
case 'delist':
if(delist($ip,$db)){
echo "$ip delisted\n";
} else {
echo "$ip not delisted\n";
};
break;
case 'blacklist':
break;
default:
if (checkToken($token,$db)){
if(set($ip,$db)){
echo " inserted " . $ip ."\n";
} else {
echo " fehler\n";
};
} else {
echo "Client token " . $token . " not registered\n";
};
}