Fixes issue where addon has no perms in addon.yml

Fixes https://github.com/BentoBoxWorld/BentoBox/issues/1312
This commit is contained in:
tastybento 2020-04-26 10:08:45 -07:00
parent 17186dd791
commit e381d61c3c
2 changed files with 78 additions and 12 deletions

View File

@ -170,25 +170,26 @@ public class AddonsManager {
plugin.log("Addons successfully enabled.");
}
void setPerms(Addon addon) {
boolean setPerms(Addon addon) {
ConfigurationSection perms = addon.getDescription().getPermissions();
perms.getKeys(true).stream().filter(perm -> perms.contains(perm + DEFAULT) && perms.contains(perm + ".description"))
.forEach(perm -> {
try {
registerPermission(perms, perm);
} catch (InvalidAddonDescriptionException e) {
plugin.logError("Addon " + addon.getDescription().getName() + ": " + e.getMessage());
if (perms == null) return false;
for (String perm : perms.getKeys(true)) {
// Only try to register perms for end nodes
if (perms.contains(perm + DEFAULT) && perms.contains(perm + ".description")) {
try {
registerPermission(perms, perm);
} catch (InvalidAddonDescriptionException e) {
plugin.logError("Addon " + addon.getDescription().getName() + ": " + e.getMessage());
}
}
});
}
return true;
}
void registerPermission(ConfigurationSection perms, String perm) throws InvalidAddonDescriptionException {
if (perms.getString(perm + DEFAULT) == null) {
throw new InvalidAddonDescriptionException("Permission default is invalid : " + perm + DEFAULT);
}
PermissionDefault pd = PermissionDefault.getByName(perms.getString(perm + DEFAULT));
if (pd == null) {
throw new InvalidAddonDescriptionException("Permission default is invalid : " + perm + DEFAULT);
throw new InvalidAddonDescriptionException("Permission default is invalid in addon.yml: " + perm + DEFAULT);
}
String desc = perms.getString(perm + ".description");
// Replace placeholders for Game Mode Addon names

View File

@ -350,6 +350,71 @@ public class AddonsManagerTest {
assertFalse(am.isAddonCompatibleWithBentoBox(addon, "1.11.1"));
}
/**
* Test method for {@link world.bentobox.bentobox.managers.AddonsManager#setPerms(Addon)}
* @throws InvalidAddonDescriptionException
* @throws InvalidConfigurationException
*/
@Test
public void testSetPermsNoPerms() {
Addon addon = mock(Addon.class);
AddonDescription addonDesc = new AddonDescription.Builder("main.class", "Addon-name", "1.0.0").apiVersion("1.11.1.0.0.0.1").build();
when(addon.getDescription()).thenReturn(addonDesc);
assertFalse(am.setPerms(addon));
}
/**
* Test method for {@link world.bentobox.bentobox.managers.AddonsManager#setPerms(Addon)}
* @throws InvalidAddonDescriptionException
* @throws InvalidConfigurationException
*/
@Test
public void testSetPermsHasPerms() throws InvalidConfigurationException {
String perms =
" '[gamemode].intopten':\n" +
" description: Player is in the top ten.\n" +
" default: true\n";
YamlConfiguration config = new YamlConfiguration();
config.loadFromString(perms);
GameModeAddon addon = new MyGameMode();
AddonDescription addonDesc = new AddonDescription.Builder("main.class", "mygame", "1.0.0").apiVersion("1.11.1.0.0.0.1")
.permissions(config)
.build();
addon.setDescription(addonDesc);
addon.setState(State.ENABLED);
am.getAddons().add(addon);
assertTrue(am.setPerms(addon));
}
/**
* Test method for {@link world.bentobox.bentobox.managers.AddonsManager#setPerms(Addon)}
* @throws InvalidAddonDescriptionException
* @throws InvalidConfigurationException
*/
@Test
public void testSetPermsHasPermsError() throws InvalidConfigurationException {
String perms =
" '[gamemode].intopten':\n" +
" description: Player is in the top ten.\n" +
" default: trudsfgsde\n";
YamlConfiguration config = new YamlConfiguration();
config.loadFromString(perms);
GameModeAddon addon = new MyGameMode();
AddonDescription addonDesc = new AddonDescription.Builder("main.class", "mygame", "1.0.0").apiVersion("1.11.1.0.0.0.1")
.permissions(config)
.build();
addon.setDescription(addonDesc);
addon.setState(State.ENABLED);
am.getAddons().add(addon);
assertTrue(am.setPerms(addon));
verify(plugin).logError(eq("Addon mygame: AddonException : Permission default is invalid in addon.yml: [gamemode].intopten.default"));
}
/**
* Test method for {@link world.bentobox.bentobox.managers.AddonsManager#registerPermission(org.bukkit.configuration.ConfigurationSection, String)}
* @throws InvalidAddonDescriptionException