mirror of
https://github.com/NoCheatPlus/NoCheatPlus.git
synced 2024-09-29 23:17:41 +02:00
[BLIND] Switch rule definition to a list of strings. (+)
(+) Extend/alter slightly, e.g. added a regex example. Replacement characters are not needed, and default values won't keep reappearing. Tests pending, e.g. dump with the upcoming registry log.
This commit is contained in:
parent
08aaa5fb1c
commit
c45a31b979
@ -79,24 +79,24 @@ public class DefaultConfig extends ConfigFile {
|
|||||||
|
|
||||||
// Permission settings.
|
// Permission settings.
|
||||||
set(ConfPaths.PERMISSIONS_POLICY_DEFAULT, "ALWAYS", 1140);
|
set(ConfPaths.PERMISSIONS_POLICY_DEFAULT, "ALWAYS", 1140);
|
||||||
/*
|
set(ConfPaths.PERMISSIONS_POLICY_RULES, Arrays.asList(
|
||||||
* TODO: Setting the rules paths forces people to keep those entries -
|
"nocheatplus.admin.debug :: INTERVAL:5",
|
||||||
* note: put to the end, if in the way, order should be preserved.
|
"nocheatplus.admin* :: ALWAYS",
|
||||||
* Consider a preventupdateconfig strategy (where to, where not to), if
|
// TODO: NOTIFY (not command).
|
||||||
* a parent path already is set.
|
|
||||||
*/
|
|
||||||
set(ConfPaths.PERMISSIONS_POLICY_RULES + ".nocheatplus#admin#debug", "INTERVAL:5", 1140);
|
|
||||||
set(ConfPaths.PERMISSIONS_POLICY_RULES + ".nocheatplus#admin*", "ALWAYS", 1140);
|
|
||||||
// TODO: Command permissions are always checked anyway :p. Will be changed...
|
// TODO: Command permissions are always checked anyway :p. Will be changed...
|
||||||
set(ConfPaths.PERMISSIONS_POLICY_RULES + ".nocheatplus#command*", "ALWAYS", 1140);
|
"nocheatplus.command* :: ALWAYS",
|
||||||
set(ConfPaths.PERMISSIONS_POLICY_RULES + ".nocheatplus#bypass*", "ALWAYS", 1140);
|
"nocheatplus.bypass* :: ALWAYS",
|
||||||
set(ConfPaths.PERMISSIONS_POLICY_RULES + ".nocheatplus#checks#net#*", "INTERVAL:2", 1140);
|
"regex:^nocheatplus\\.checks\\..*\\.silent$ :: FALSE",
|
||||||
set(ConfPaths.PERMISSIONS_POLICY_RULES + ".nocheatplus#checks#chat#commands", "INTERVAL:2", 1140);
|
/*
|
||||||
set(ConfPaths.PERMISSIONS_POLICY_RULES + ".nocheatplus#checks#chat#text", "INTERVAL:2", 1140);
|
* Relog, logins: Note: aims at login denial, would invalidate
|
||||||
// Relog, logins: Note: aims at login denial, would invalidate once offline/world change. +- not sure.
|
* once offline/world change. +- not sure.
|
||||||
set(ConfPaths.PERMISSIONS_POLICY_RULES + ".nocheatplus#checks#chat#relog", "INTERVAL:5", 1140);
|
*/
|
||||||
set(ConfPaths.PERMISSIONS_POLICY_RULES + ".nocheatplus#checks#chat#logins", "INTERVAL:5", 1140);
|
"nocheatplus.checks.chat.relog :: INTERVAL:10",
|
||||||
set(ConfPaths.PERMISSIONS_POLICY_RULES + ".nocheatplus#checks#moving#survivalfly#*", "INTERVAL:5", 1140);
|
"nocheatplus.checks.chat.logins :: INTERVAL:10",
|
||||||
|
"nocheatplus.checks.chat.* :: INTERVAL:2",
|
||||||
|
"nocheatplus.checks.net.* :: INTERVAL:2",
|
||||||
|
"nocheatplus.checks.moving.survivalfly.* :: INTERVAL:5" // (Excludes the sf base permission.)
|
||||||
|
), 1140);
|
||||||
|
|
||||||
// Protection features.
|
// Protection features.
|
||||||
// Hide plugins.
|
// Hide plugins.
|
||||||
|
@ -170,13 +170,18 @@ public class PermissionSettings {
|
|||||||
}
|
}
|
||||||
final Map<String, PermissionPolicy> explicitPolicy = new LinkedHashMap<String, PermissionPolicy>();
|
final Map<String, PermissionPolicy> explicitPolicy = new LinkedHashMap<String, PermissionPolicy>();
|
||||||
final List<PermissionRule> implicitRules = new LinkedList<PermissionSettings.PermissionRule>();
|
final List<PermissionRule> implicitRules = new LinkedList<PermissionSettings.PermissionRule>();
|
||||||
final ConfigurationSection section = config.getConfigurationSection(pathRules);
|
|
||||||
for (String ruleDef : section.getKeys(false)) {
|
// TODO: Change to List ! +- separators.
|
||||||
String policyDef = null;
|
final List<String> defs = config.getStringList(pathRules);
|
||||||
|
for (String def : defs) {
|
||||||
|
String[] split = def.split(": ", 2);
|
||||||
|
if (split.length != 2) {
|
||||||
|
throw new IllegalArgumentException("Must the separate matching rule from the policy definition by ' :: '.");
|
||||||
|
}
|
||||||
|
final String ruleDef = RegisteredPermission.toLowerCaseStringRepresentation(split[0].trim());
|
||||||
|
final String policyDef = split[1].trim();
|
||||||
try {
|
try {
|
||||||
policyDef = section.getString(ruleDef);
|
|
||||||
final PermissionPolicy policy = new PermissionPolicy().setPolicyFromConfigLine(policyDef);
|
final PermissionPolicy policy = new PermissionPolicy().setPolicyFromConfigLine(policyDef);
|
||||||
ruleDef = RegisteredPermission.toLowerCaseStringRepresentation(ruleDef.trim()).replace('#', '.');
|
|
||||||
final PermissionRule rule = getMatchingRule(ruleDef, policy);
|
final PermissionRule rule = getMatchingRule(ruleDef, policy);
|
||||||
if (rule == null) {
|
if (rule == null) {
|
||||||
explicitPolicy.put(ruleDef, policy);
|
explicitPolicy.put(ruleDef, policy);
|
||||||
|
@ -0,0 +1,34 @@
|
|||||||
|
package fr.neatmonster.nocheatplus.test;
|
||||||
|
|
||||||
|
import static org.junit.Assert.fail;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import fr.neatmonster.nocheatplus.permissions.PermissionPolicy;
|
||||||
|
import fr.neatmonster.nocheatplus.permissions.PermissionSettings;
|
||||||
|
import fr.neatmonster.nocheatplus.permissions.PermissionSettings.PermissionRule;
|
||||||
|
|
||||||
|
public class TestPermissionSettings {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testRegex() {
|
||||||
|
PermissionPolicy dummy = new PermissionPolicy();
|
||||||
|
String regex = "^nocheatplus\\.checks\\..*\\.silent$";
|
||||||
|
String permissionName = "nocheatplus.checks.moving.survivalfly.silent";
|
||||||
|
// Also/rather a config test.
|
||||||
|
if (!permissionName.matches(regex)) {
|
||||||
|
fail("Expect regex to match.");
|
||||||
|
}
|
||||||
|
PermissionRule rule = PermissionSettings.getMatchingRule("regex:" + regex, dummy);
|
||||||
|
if (rule == null) {
|
||||||
|
fail("Expect factory to return a regex rule.");
|
||||||
|
}
|
||||||
|
if (!rule.matches(permissionName)) {
|
||||||
|
fail("Expect rule to match permissions name.");
|
||||||
|
}
|
||||||
|
if (rule.matches("xy" + permissionName) || rule.matches(permissionName + "yx")) {
|
||||||
|
fail("Rule matches wrong start/end.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user