WhitelistCommand: fixed permission checking

closes #4349
This commit is contained in:
Dylan K. Taylor 2021-08-04 20:34:54 +01:00
parent 71c6f69fd3
commit bb79797b68
No known key found for this signature in database
GPG Key ID: 8927471A91CAFD3D

View File

@ -30,7 +30,6 @@ use pocketmine\lang\KnownTranslationKeys;
use pocketmine\lang\TranslationContainer;
use pocketmine\permission\DefaultPermissionNames;
use pocketmine\player\Player;
use pocketmine\utils\AssumptionFailedError;
use function count;
use function implode;
use function sort;
@ -61,33 +60,38 @@ class WhitelistCommand extends VanillaCommand{
}
if(count($args) === 1){
if($this->badPerm($sender, strtolower($args[0]))){
return false;
}
switch(strtolower($args[0])){
case "reload":
$sender->getServer()->getWhitelisted()->reload();
Command::broadcastCommandMessage($sender, new TranslationContainer(KnownTranslationKeys::COMMANDS_WHITELIST_RELOADED));
if($this->testPermission($sender, DefaultPermissionNames::COMMAND_WHITELIST_RELOAD)){
$sender->getServer()->getWhitelisted()->reload();
Command::broadcastCommandMessage($sender, new TranslationContainer(KnownTranslationKeys::COMMANDS_WHITELIST_RELOADED));
}
return true;
case "on":
$sender->getServer()->getConfigGroup()->setConfigBool("white-list", true);
Command::broadcastCommandMessage($sender, new TranslationContainer(KnownTranslationKeys::COMMANDS_WHITELIST_ENABLED));
if($this->testPermission($sender, DefaultPermissionNames::COMMAND_WHITELIST_ENABLE)){
$sender->getServer()->getConfigGroup()->setConfigBool("white-list", true);
Command::broadcastCommandMessage($sender, new TranslationContainer(KnownTranslationKeys::COMMANDS_WHITELIST_ENABLED));
}
return true;
case "off":
$sender->getServer()->getConfigGroup()->setConfigBool("white-list", false);
Command::broadcastCommandMessage($sender, new TranslationContainer(KnownTranslationKeys::COMMANDS_WHITELIST_DISABLED));
if($this->testPermission($sender, DefaultPermissionNames::COMMAND_WHITELIST_DISABLE)){
$sender->getServer()->getConfigGroup()->setConfigBool("white-list", false);
Command::broadcastCommandMessage($sender, new TranslationContainer(KnownTranslationKeys::COMMANDS_WHITELIST_DISABLED));
}
return true;
case "list":
$entries = $sender->getServer()->getWhitelisted()->getAll(true);
sort($entries, SORT_STRING);
$result = implode(", ", $entries);
$count = count($entries);
if($this->testPermission($sender, DefaultPermissionNames::COMMAND_WHITELIST_LIST)){
$entries = $sender->getServer()->getWhitelisted()->getAll(true);
sort($entries, SORT_STRING);
$result = implode(", ", $entries);
$count = count($entries);
$sender->sendMessage(new TranslationContainer(KnownTranslationKeys::COMMANDS_WHITELIST_LIST, [$count, $count]));
$sender->sendMessage($result);
$sender->sendMessage(new TranslationContainer(KnownTranslationKeys::COMMANDS_WHITELIST_LIST, [$count, $count]));
$sender->sendMessage($result);
}
return true;
@ -100,21 +104,22 @@ class WhitelistCommand extends VanillaCommand{
return true;
}
}elseif(count($args) === 2){
if($this->badPerm($sender, strtolower($args[0]))){
return false;
}
if(!Player::isValidUserName($args[1])){
throw new InvalidCommandSyntaxException();
}
switch(strtolower($args[0])){
case "add":
$sender->getServer()->addWhitelist($args[1]);
Command::broadcastCommandMessage($sender, new TranslationContainer(KnownTranslationKeys::COMMANDS_WHITELIST_ADD_SUCCESS, [$args[1]]));
if($this->testPermission($sender, DefaultPermissionNames::COMMAND_WHITELIST_ADD)){
$sender->getServer()->addWhitelist($args[1]);
Command::broadcastCommandMessage($sender, new TranslationContainer(KnownTranslationKeys::COMMANDS_WHITELIST_ADD_SUCCESS, [$args[1]]));
}
return true;
case "remove":
$sender->getServer()->removeWhitelist($args[1]);
Command::broadcastCommandMessage($sender, new TranslationContainer(KnownTranslationKeys::COMMANDS_WHITELIST_REMOVE_SUCCESS, [$args[1]]));
if($this->testPermission($sender, DefaultPermissionNames::COMMAND_WHITELIST_REMOVE)){
$sender->getServer()->removeWhitelist($args[1]);
Command::broadcastCommandMessage($sender, new TranslationContainer(KnownTranslationKeys::COMMANDS_WHITELIST_REMOVE_SUCCESS, [$args[1]]));
}
return true;
}
@ -122,19 +127,4 @@ class WhitelistCommand extends VanillaCommand{
throw new InvalidCommandSyntaxException();
}
private function badPerm(CommandSender $sender, string $subcommand) : bool{
$permission = [
"reload" => DefaultPermissionNames::COMMAND_WHITELIST_RELOAD,
"on" => DefaultPermissionNames::COMMAND_WHITELIST_ENABLE,
"off" => DefaultPermissionNames::COMMAND_WHITELIST_DISABLE,
"list" => DefaultPermissionNames::COMMAND_WHITELIST_LIST,
"add" => DefaultPermissionNames::COMMAND_WHITELIST_ADD,
"remove" => DefaultPermissionNames::COMMAND_WHITELIST_REMOVE
][$subcommand] ?? null;
if($permission === null){
throw new AssumptionFailedError("Unknown subcommand $subcommand");
}
return !$this->testPermission($sender, $permission);
}
}