diff --git a/.gitignore b/.gitignore index fd7fa6bac..b52575c90 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,7 @@ logs/* server.properties white-list.txt banned-ips.txt +banned.txt ################# ## Eclipse diff --git a/src/API/BanAPI.php b/src/API/BanAPI.php new file mode 100644 index 000000000..e98328898 --- /dev/null +++ b/src/API/BanAPI.php @@ -0,0 +1,177 @@ +server = $server; + } + + public function init(){ + console("[INFO] Loading authentication lists..."); + $this->whitelist = new Config(FILE_PATH."white-list.txt", CONFIG_LIST); + $this->bannedIPs = new Config(FILE_PATH."banned-ips.txt", CONFIG_LIST); + $this->banned = new Config(FILE_PATH."banned.txt", CONFIG_LIST); + $this->server->api->console->register("banip", "Manages IP Banning", array($this, "commandHandler")); + $this->server->api->console->register("ban", "Manages Bannning", array($this, "commandHandler")); + $this->server->api->console->register("whitelist", "Manages White-listing", array($this, "commandHandler")); + } + + public function commandHandler($cmd, $params){ + switch($cmd){ + case "whitelist": + $p = strtolower(array_shift($params)); + switch($p){ + case "remove": + $user = trim(implode(" ", $params)); + $this->whitelist->remove($user); + $this->whitelist->save(); + console("[INFO] Player \"$user\" removed from white-list"); + break; + case "add": + $user = trim(implode(" ", $params)); + $this->whitelist->set($user); + $this->whitelist->save(); + console("[INFO] Player \"$user\" added to white-list"); + break; + case "reload": + $this->whitelist = $this->load(FILE_PATH."white-list.txt", CONFIG_LIST); + break; + case "list": + console("[INFO] White-list: ".implode(", ", $this->whitelist->getAll(true))); + break; + case "on": + case "true": + case "1": + console("[INFO] White-list turned on"); + $this->server->api->setProperty("white-list", true); + break; + case "off": + case "false": + case "0": + console("[INFO] White-list turned off"); + $this->server->api->setProperty("white-list", false); + break; + default: + console("[INFO] Usage: /whitelist [username]"); + break; + } + break; + case "banip": + $p = strtolower(array_shift($params)); + switch($p){ + case "pardon": + case "remove": + $ip = trim(implode($params)); + $this->bannedIPs->remove($ip); + $this->bannedIPs->save(); + console("[INFO] IP \"$ip\" removed from ban list"); + break; + case "add": + case "ban": + $ip = trim(implode($params)); + $this->bannedIPs->set($ip); + $this->bannedIPs->save(); + console("[INFO] IP \"$ip\" added to ban list"); + break; + case "reload": + $this->bannedIPs = new Config(FILE_PATH."banned-ips.txt", CONFIG_LIST); + break; + case "list": + console("[INFO] IP ban list: ".implode(", ", $this->bannedIPs->getAll(true))); + break; + default: + console("[INFO] Usage: /banip [IP]"); + break; + } + break; + case "ban": + $p = strtolower(array_shift($params)); + switch($p){ + case "pardon": + case "remove": + $user = trim(implode($params)); + $this->banned->remove($user); + $this->banned->save(); + console("[INFO] Player \"$user\" removed from ban list"); + break; + case "add": + case "ban": + $user = trim(implode($params)); + $this->banned->set($user); + $this->banned->save(); + $player = $this->server->api->player->get($user); + if($player !== false){ + $player->close("You have been banned"); + } + $this->server->api->chat->broadcast("$user has been banned"); + console("[INFO] Player \"$user\" added to ban list"); + break; + case "reload": + $this->banned = new Config(FILE_PATH."banned.txt", CONFIG_LIST); + break; + case "list": + console("[INFO] Ban list: ".implode(", ", $this->banned->getAll(true))); + break; + default: + console("[INFO] Usage: /ban [player]"); + break; + } + break; + } + } + + public function isIPBanned($ip){ + if($this->server->api->dhandle("api.ban.ip.check", $ip) === false){ + return true; + }elseif($this->bannedIPs->exists($ip)){ + return true; + } + return false; + } + + public function isBanned($username){ + if($this->server->api->dhandle("api.ban.check", $username) === false){ + return true; + }elseif($this->banned->exists($username)){ + return true; + } + return false; + } + + public function inWhitelist($username){ + if($this->server->api->dhandle("api.ban.whitelist.check", $ip) === false){ + return true; + }elseif($this->whitelist->exists($username)){ + return true; + } + return false; + } +} \ No newline at end of file diff --git a/src/API/ConsoleAPI.php b/src/API/ConsoleAPI.php index aaa4a3fbb..ed65cfce3 100644 --- a/src/API/ConsoleAPI.php +++ b/src/API/ConsoleAPI.php @@ -92,36 +92,6 @@ class ConsoleAPI{ $this->server->api->restart = true; $this->server->close(); break;*/ - case "banip": - $p = strtolower(array_shift($params)); - switch($p){ - case "pardon": - case "remove": - $ip = trim(implode($params)); - $this->server->bannedIPs->remove($packet["ip"]); - $this->server->bannedIPs->save(); - console("[INFO] IP \"$ip\" removed from ban list"); - $this->server->reloadConfig(); - break; - case "add": - case "ban": - $ip = trim(implode($params)); - $this->server->bannedIPs->set($packet["ip"]); - $this->server->bannedIPs->save(); - console("[INFO] IP \"$ip\" added to ban list"); - $this->server->reloadConfig(); - break; - case "reload": - $this->server->reloadConfig(); - break; - case "list": - console("[INFO] IP ban list: ".implode(", ", $this->server->bannedIPs->getAll(true))); - break; - default: - console("[INFO] Usage: /banip [IP]"); - break; - } - break; case "gamemode": $s = trim(array_shift($params)); if($s == "" or (((int) $s) !== 0 and ((int) $s) !== 1)){ @@ -149,50 +119,6 @@ class ConsoleAPI{ } $this->server->api->chat->broadcast($s); break; - case "whitelist": - $p = strtolower(array_shift($params)); - switch($p){ - case "remove": - $user = trim(implode(" ", $params)); - $this->server->whitelist->remove($user); - $this->server->whitelist->save(); - console("[INFO] Player \"$user\" removed from white-list"); - $this->server->reloadConfig(); - break; - case "add": - $user = trim(implode(" ", $params)); - $this->server->whitelist->set($user); - $this->server->whitelist->save(); - console("[INFO] Player \"$user\" added to white-list"); - $this->server->reloadConfig(); - break; - case "reload": - $this->server->reloadConfig(); - break; - case "list": - if(($this->server->whitelist instanceof Config) === false){ - console("[INFO] No White-list"); - }else{ - console("[INFO] White-list: ".implode(", ", $this->server->whitelist->getAll(true))); - } - break; - case "on": - case "true": - case "1": - console("[INFO] White-list turned on"); - $this->server->api->setProperty("white-list", true); - break; - case "off": - case "false": - case "0": - console("[INFO] White-list turned off"); - $this->server->api->setProperty("white-list", false); - break; - default: - console("[INFO] Usage: /whitelist [username]"); - break; - } - break; case "save-all": $this->server->save(); break; @@ -211,8 +137,6 @@ class ConsoleAPI{ console("[INFO] /invisible: Manages server visibility"); console("[INFO] /say: Broadcasts mesages"); console("[INFO] /save-all: Saves pending changes"); - console("[INFO] /whitelist: Manages whitelisting"); - console("[INFO] /banip: Manages IP ban"); console("[INFO] /stop: Stops the server"); //console("[INFO] /restart: Restarts the server"); foreach($this->help as $c => $h){ diff --git a/src/classes/Player.php b/src/classes/Player.php index e5e869635..f7960586c 100644 --- a/src/classes/Player.php +++ b/src/classes/Player.php @@ -285,9 +285,11 @@ class Player{ break; } $o = $this->server->api->player->getOffline($this->username); - if($this->server->whitelist !== false and $this->server->whitelist->exists($this->username)){ + if($this->server->whitelist === true and !$this->server->api->ban->inWhitelist($this->username)){ $this->close("\"\x1b[33m".$this->username."\x1b[0m\" not being on white-list", false); break; + }elseif($this->server->api->ban->isBanned($this->username) or $this->server->api->ban->isIPBanned($this->ip)){ + $this->close("\"\x1b[33m".$this->username."\x1b[0m\" is banned!", false); } $u = $this->server->api->player->get($this->username); $c = $this->server->api->player->getByClientID($this->clientID); diff --git a/src/classes/PocketMinecraftServer.php b/src/classes/PocketMinecraftServer.php index 4bccd1208..bf7e4486c 100644 --- a/src/classes/PocketMinecraftServer.php +++ b/src/classes/PocketMinecraftServer.php @@ -65,7 +65,6 @@ class PocketMinecraftServer{ $this->scheduleCnt = 0; $this->description = ""; $this->whitelist = false; - $this->bannedIPs = array(); $this->clients = array(); $this->spawn = array("x" => 128.5,"y" => 100,"z" => 128.5); $this->time = 0; @@ -135,10 +134,7 @@ class PocketMinecraftServer{ } public function reloadConfig(){ - if($this->whitelist === true or ($this->whitelist instanceof Config)){ - $this->whitelist = new Config(FILE_PATH."white-list.txt", CONFIG_LIST); - } - $this->bannedIPs = new Config(FILE_PATH."banned-ips.txt", CONFIG_LIST); + } public function debugInfo($console = false){ @@ -412,7 +408,7 @@ class PocketMinecraftServer{ ), false, $packet["ip"], $packet["port"]); break; } - if($this->bannedIPs->exists($packet["ip"])){ + if($this->api->ban->isIPBanned($packet["ip"])){ $this->send(0x1c, array( $data[0], $this->serverID, @@ -439,7 +435,7 @@ class PocketMinecraftServer{ $this->custom["times_".$CID] = ($this->custom["times_".$CID] + 1) % strlen($this->description); break; case 0x05: - if($this->bannedIPs->exists($packet["ip"]) or count($this->clients) >= $this->maxClients){ + if($this->api->ban->isIPBanned($packet["ip"]) or count($this->clients) >= $this->maxClients){ $this->send(0x80, array( 0, 0x00, @@ -475,7 +471,7 @@ class PocketMinecraftServer{ } break; case 0x07: - if($this->bannedIPs->exists($packet["ip"]) or count($this->clients) >= $this->maxClients){ + if($this->api->ban->isIPBanned($packet["ip"]) or count($this->clients) >= $this->maxClients){ $this->send(0x80, array( 0, 0x00,