index.php 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  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. public function __construct() {
  48. $this->db = new db();
  49. }
  50. private function isListed($ip) {
  51. $dbAction = $this->db->prepare("SELECT ip FROM list WHERE ip = ?");
  52. $dbAction->bind_param('i',ip2long($ip));
  53. $dbAction->execute();
  54. $dbAction->store_result();
  55. if($dbAction->num_rows() == 0) {
  56. return false;
  57. }
  58. return true;
  59. }
  60. private function deListCount($ip) {
  61. $dbAction = $this->db->prepare("SELECT count FROM delist WHERE ip = ?");
  62. $dbAction->bind_param('i',ip2long($ip));
  63. $dbAction->execute();
  64. $dbAction->store_result();
  65. $dbAction->bind_result($count);
  66. $dbAction->fetch();
  67. return $count;
  68. }
  69. public function set($ip) {
  70. $dbAction = $this->db->prepare("INSERT IGNORE INTO list VALUES (?)");
  71. $dbAction->bind_param('i',ip2long($ip));
  72. return $dbAction->execute();
  73. }
  74. public function delist($ip) {
  75. if(!$this->islisted($ip)) {
  76. return false;
  77. }
  78. //check delisting count
  79. if ($this->delistCount($ip) > 3){
  80. echo "Fatal: ". $ip . " delisted to often!\n";
  81. return false;
  82. }
  83. //delist ip
  84. $dbAction = $this->db->prepare("DELETE FROM list WHERE ip = ?");
  85. $dbAction->bind_param('i',ip2long($ip));
  86. $dbAction->execute();
  87. //update delist count
  88. $dbAction = $this->db->prepare("INSERT INTO delist (ip) VALUES (?) ON DUPLICATE KEY UPDATE count = count + 1");
  89. $dbAction->bind_param('i',ip2long($ip));
  90. $dbAction->execute();
  91. return true;
  92. }
  93. public function blackList($ip) {
  94. return true;
  95. }
  96. public function whiteList($ip) {
  97. return true;
  98. }
  99. }
  100. $ip = trim($_GET['ip']);
  101. $token = trim($_GET['token']);
  102. $action = trim($_GET['action']);
  103. switch($action) {
  104. case 'delist':
  105. if((new action)->delist($ip)){
  106. echo "$ip delisted\n";
  107. } else {
  108. echo "$ip not delisted\n";
  109. };
  110. break;
  111. case 'blacklist':
  112. if ((new checkToken)->isAdmin($token)){
  113. if((new action)->blackList($ip)){
  114. echo " blacklisted " . $ip ."\n";
  115. } else {
  116. echo " fehler\n";
  117. };
  118. } else {
  119. echo "no admin permissions\n";
  120. };
  121. break;
  122. case 'whitelist':
  123. if ((new checkToken)->isAdmin($token)){
  124. if((new action)->whiteList($ip)){
  125. echo " whitelisted " . $ip ."\n";
  126. } else {
  127. echo " fehler\n";
  128. };
  129. } else {
  130. echo "no admin permissions\n";
  131. };
  132. break;
  133. default:
  134. if ((new checkToken)->isClient($token)){
  135. if((new action)->set($ip)){
  136. echo " inserted " . $ip ."\n";
  137. } else {
  138. echo " fehler\n";
  139. };
  140. } else {
  141. echo "Client token " . $token . " not registered\n";
  142. };
  143. }