index.php 3.5 KB

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