index.php 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. <?php
  2. error_reporting(E_ALL);
  3. class db extends mysqli {
  4. private $host = 'localhost';
  5. private $user = 'ban';
  6. private $pass = 'Blubb123-';
  7. private $db = 'ban';
  8. public function __construct() {
  9. @parent::__construct($this->host, $this->user, $this->pass, $this->db);
  10. if($this->connect_errno){
  11. die($this->connect_error);
  12. }
  13. $this->set_charset('utf8');
  14. }
  15. }
  16. class checkToken {
  17. private $db = null;
  18. public function __construct() {
  19. $this->db = new db();
  20. }
  21. private function getRole($token) {
  22. $dbAction = $this->db->prepare("SELECT role FROM clients WHERE token = ?");
  23. $dbAction->bind_param('s',$token);
  24. $dbAction->execute();
  25. $dbAction->store_result();
  26. $dbAction->bind_result($role);
  27. $dbAction->fetch();
  28. if ($dbAction->num_rows() == 1){
  29. return $role;
  30. }
  31. return false;
  32. }
  33. public function isAdmin($token) {
  34. if($this->getRole($token) == 'admin') {
  35. return true;
  36. }
  37. return false;
  38. }
  39. public function isClient($token) {
  40. if($this->getRole($token) == 'client') {
  41. return true;
  42. }
  43. return false;
  44. }
  45. }
  46. class action {
  47. use db;
  48. public function __construct() {
  49. $this->db = new db();
  50. }
  51. private function isListed($ip) {
  52. $dbAction = $this->db->prepare("SELECT ip FROM list WHERE ip = ?");
  53. $dbAction->bind_param('i',ip2long($ip));
  54. $dbAction->execute();
  55. $dbAction->store_result();
  56. if($dbAction->num_rows() == 0) {
  57. return false;
  58. }
  59. return true;
  60. }
  61. private function deListCount($ip) {
  62. $dbAction = $this->db->prepare("SELECT count FROM delist WHERE ip = ?");
  63. $dbAction->bind_param('i',ip2long($ip));
  64. $dbAction->execute();
  65. $dbAction->store_result();
  66. $dbAction->bind_result($count);
  67. $dbAction->fetch();
  68. return $count;
  69. }
  70. public function set($ip) {
  71. $dbAction = $this->db->prepare("INSERT IGNORE INTO list VALUES (?)");
  72. $dbAction->bind_param('i',ip2long($ip));
  73. return $dbAction->execute();
  74. }
  75. public function delist($ip) {
  76. if(!islisted($ip)) {
  77. return false;
  78. }
  79. //check delisting count
  80. if (delistCount($ip) > 3){
  81. echo "Fatal: ". $ip . " delisted to often!\n";
  82. return false;
  83. }
  84. //delist ip
  85. $dbAction = $this->db->prepare("DELETE FROM list WHERE ip = ?");
  86. $dbAction->bind_param('i',ip2long($ip));
  87. $dbAction->execute();
  88. //update delist count
  89. $dbAction = $this->db->prepare("INSERT INTO delist (ip) VALUES (?) ON DUPLICATE KEY UPDATE count = count + 1");
  90. $dbAction->bind_param('i',ip2long($ip));
  91. $dbAction->execute();
  92. return true;
  93. }
  94. }
  95. $ip = trim($_GET['ip']);
  96. $token = trim($_GET['token']);
  97. $action = trim($_GET['action']);
  98. switch($action) {
  99. case 'delist':
  100. if((new action)->delist($ip)){
  101. echo "$ip delisted\n";
  102. } else {
  103. echo "$ip not delisted\n";
  104. };
  105. break;
  106. case 'blacklist':
  107. break;
  108. case 'whitelist':
  109. break;
  110. default:
  111. if ((new checkToken)->isClient($token)){
  112. if((new action)->set($ip)){
  113. echo " inserted " . $ip ."\n";
  114. } else {
  115. echo " fehler\n";
  116. };
  117. } else {
  118. echo "Client token " . $token . " not registered\n";
  119. };
  120. }