Register .silent check permission in postEnable.

Issue: https://github.com/NoCheatPlus/Issues/issues/353)
This commit is contained in:
asofold 2016-12-28 10:36:28 +01:00
parent 11be3c7c0d
commit 8465c40d93
2 changed files with 59 additions and 5 deletions

View File

@ -33,6 +33,8 @@ import fr.neatmonster.nocheatplus.utilities.ColorUtil;
public class PermissionUtil {
private static final String AUTO_GENERATED = "Auto-generated permission (NoCheatPlus).";
/**
* Entry for what the old state of a command was.
* @author mc_dev
@ -190,21 +192,28 @@ public class PermissionUtil {
}
/**
* Set a permission as child for all the other permissions given in a Collection.
* @param permissions Not expected to exist.
* Set a permission as child for all the other permissions given in a
* Collection.
*
* @param permissions
* Not expected to exist.
* @param childPermissionName
* @param permissionDefault
* Default for all generated permissions (child and parent
* alike).
*/
public static void addChildPermission(final Collection<String> permissions, final String childPermissionName, final PermissionDefault permissionDefault) {
public static void addChildPermission(final Collection<String> permissions,
final String childPermissionName, final PermissionDefault permissionDefault) {
final PluginManager pm = Bukkit.getPluginManager();
Permission childPermission = pm.getPermission(childPermissionName);
if (childPermission == null) {
childPermission = new Permission(childPermissionName, "auto-generated child permission (NoCheatPlus)", permissionDefault);
childPermission = new Permission(childPermissionName, AUTO_GENERATED, permissionDefault);
pm.addPermission(childPermission);
}
for (final String permissionName : permissions) {
Permission permission = pm.getPermission(permissionName);
if (permission == null) {
permission = new Permission(permissionName, "auto-generated permission (NoCheatPlus)", permissionDefault);
permission = new Permission(permissionName, AUTO_GENERATED, permissionDefault);
pm.addPermission(permission);
}
if (!permission.getChildren().containsKey(childPermissionName)) {
@ -212,4 +221,34 @@ public class PermissionUtil {
}
}
}
/**
*
* @param permissionName
* Name of an already existing permission. Must be registered!
* @param childPermissionSuffix
* No leading dot, results in: permissionName.childPermissionSuffix
* @param permissionDefault
* Default for child permissions.
* @throws NullPointerException
* If the no permission is registered for permissionName.
*/
public static void addChildPermissionBySuffix(final String permissionName, final String childPermissionSuffix,
final PermissionDefault permissionDefault) {
final PluginManager pm = Bukkit.getPluginManager();
final Permission permission = pm.getPermission(permissionName);
if (permission == null) {
throw new NullPointerException("Permission is not registered: " + permissionName);
}
final String childPermissionName = permissionName + "." + childPermissionSuffix;
Permission childPermission = pm.getPermission(childPermissionName);
if (childPermission == null) {
childPermission = new Permission(childPermissionName, AUTO_GENERATED, permissionDefault);
pm.addPermission(childPermission);
}
if (!permission.getChildren().containsKey(childPermissionName)) {
childPermission.addParent(permission, true);
}
}
}

View File

@ -50,6 +50,7 @@ import org.bukkit.plugin.PluginDescriptionFile;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.scheduler.BukkitScheduler;
import fr.neatmonster.nocheatplus.checks.CheckType;
import fr.neatmonster.nocheatplus.checks.blockbreak.BlockBreakListener;
import fr.neatmonster.nocheatplus.checks.blockinteract.BlockInteractListener;
import fr.neatmonster.nocheatplus.checks.blockplace.BlockPlaceListener;
@ -1097,6 +1098,20 @@ public class NoCheatPlus extends JavaPlugin implements NoCheatPlusAPI {
logManager.severe(Streams.INIT, "Failed to complement permissions: " + t.getClass().getSimpleName());
logManager.severe(Streams.INIT, t);
}
// Set .silent child permissions for all check permissions.
for (CheckType checkType : CheckType.values()) {
final String permissionName = checkType.getPermission();
if (permissionName == null) {
continue;
}
try {
// PermissionDefault.FALSE: Ensure it's not there by accident / non-typical.
PermissionUtil.addChildPermissionBySuffix(permissionName, "silent", PermissionDefault.FALSE);
} catch (Throwable t) {
logManager.severe(Streams.INIT, "Failed to add .silent child permission for " + permissionName + ": " + t.getClass().getSimpleName());
logManager.severe(Streams.INIT, t);
}
}
try {
// Command protection feature.
if (ConfigManager.getConfigFile().getBoolean(ConfPaths.PROTECT_PLUGINS_HIDE_ACTIVE)) {