From 2718feb1371d10bc46cf4dd9b48aa8bee37da812 Mon Sep 17 00:00:00 2001 From: Mike Primm Date: Sun, 5 Jul 2020 14:48:51 -0500 Subject: [PATCH] Add Sponge permissions for 1.11.2, 1.12.2, extract permissions.yml.example --- forge-1.11.2/build.gradle | 5 ++ .../org/dynmap/forge_1_11_2/DynmapPlugin.java | 12 +++- .../permissions/Sponge7Permissions.java | 68 +++++++++++++++++++ .../org/dynmap/forge_1_12_2/DynmapPlugin.java | 8 ++- .../permissions/Sponge7Permissions.java | 1 + .../org/dynmap/forge_1_13_2/DynmapPlugin.java | 4 ++ .../org/dynmap/forge_1_14_4/DynmapPlugin.java | 4 ++ .../org/dynmap/forge_1_15_2/DynmapPlugin.java | 4 ++ .../org/dynmap/forge_1_16_1/DynmapPlugin.java | 4 ++ 9 files changed, 106 insertions(+), 4 deletions(-) create mode 100644 forge-1.11.2/src/main/java/org/dynmap/forge_1_11_2/permissions/Sponge7Permissions.java diff --git a/forge-1.11.2/build.gradle b/forge-1.11.2/build.gradle index e05a9f96..7e4e4547 100644 --- a/forge-1.11.2/build.gradle +++ b/forge-1.11.2/build.gradle @@ -19,6 +19,7 @@ dependencies { compile project(path: ":DynmapCore", configuration: "shadow") compile 'com.googlecode.json-simple:json-simple:1.1.1' compile 'org.yaml:snakeyaml:1.23' + compile 'org.spongepowered:spongeapi:7.0.0' } sourceCompatibility = 1.8 @@ -30,6 +31,10 @@ repositories { name = 'forge' url = 'http://files.minecraftforge.net/maven' } + maven { + name = 'sponge' + url = 'https://repo.spongepowered.org/maven' + } } minecraft { version = "1.11.2-13.20.0.2315" diff --git a/forge-1.11.2/src/main/java/org/dynmap/forge_1_11_2/DynmapPlugin.java b/forge-1.11.2/src/main/java/org/dynmap/forge_1_11_2/DynmapPlugin.java index 6690a72d..b1ac90b4 100644 --- a/forge-1.11.2/src/main/java/org/dynmap/forge_1_11_2/DynmapPlugin.java +++ b/forge-1.11.2/src/main/java/org/dynmap/forge_1_11_2/DynmapPlugin.java @@ -99,6 +99,7 @@ import org.dynmap.forge_1_11_2.DynmapMod; import org.dynmap.forge_1_11_2.permissions.FilePermissions; import org.dynmap.forge_1_11_2.permissions.OpPermissions; import org.dynmap.forge_1_11_2.permissions.PermissionProvider; +import org.dynmap.forge_1_11_2.permissions.Sponge7Permissions; import org.dynmap.forge_1_11_2.ForgeWorld; import org.dynmap.forge_1_11_2.DynmapPlugin.WorldUpdateTracker; import org.dynmap.permissions.PermissionsHandler; @@ -1467,8 +1468,11 @@ public class DynmapPlugin /* Set up player login/quit event handler */ registerPlayerLoginListener(); /* Initialize permissions handler */ - permissions = FilePermissions.create(); - if(permissions == null) { + permissions = FilePermissions.create(); + if (permissions == null) { + permissions = Sponge7Permissions.create(); + } + if (permissions == null) { permissions = new OpPermissions(new String[] { "webchat", "marker.icons", "marker.list", "webregister", "stats", "hide.self", "show.self" }); } /* Get and initialize data folder */ @@ -1499,6 +1503,10 @@ public class DynmapPlugin { return; } + // Extract default permission example, if needed + File filepermexample = new File(core.getDataFolder(), "permissions.yml.example"); + core.createDefaultFileFromResource("/permissions.yml.example", filepermexample); + DynmapCommonAPIListener.apiInitialized(core); } diff --git a/forge-1.11.2/src/main/java/org/dynmap/forge_1_11_2/permissions/Sponge7Permissions.java b/forge-1.11.2/src/main/java/org/dynmap/forge_1_11_2/permissions/Sponge7Permissions.java new file mode 100644 index 00000000..81b7ad40 --- /dev/null +++ b/forge-1.11.2/src/main/java/org/dynmap/forge_1_11_2/permissions/Sponge7Permissions.java @@ -0,0 +1,68 @@ +package org.dynmap.forge_1_11_2.permissions; + +import java.util.HashSet; + +import java.util.Map; +import java.util.Optional; +import java.util.Set; + +import org.dynmap.Log; +import org.spongepowered.api.Sponge; +import org.spongepowered.api.entity.living.player.Player; + +import net.minecraft.command.ICommandSender; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; + +public class Sponge7Permissions implements PermissionProvider { + + public static Sponge7Permissions create() { + try { + Class.forName("org.spongepowered.api.Sponge"); /* See if class exists */ + } catch (ClassNotFoundException cnfx) { + return null; + } + Log.info("Using Sponge Permissions for access control"); + Log.info("Web interface permissions only available for online users"); + Log.info("Note: you may need to give users permissions for base commands (e.g. dynmap.command.* on LuckPerms) as well as for specific actions"); + return new Sponge7Permissions(); + } + + private Sponge7Permissions() { + } + + @Override + public boolean has(ICommandSender sender, String permission) { + return sender.canUseCommand(4, "dynmap." + permission); + } + + @Override + public boolean hasPermissionNode(ICommandSender sender, String permission) { + return sender.canUseCommand(4, "dynmap." + permission); + } + + @Override + public Set hasOfflinePermissions(String player, Set perms) { + HashSet rslt = new HashSet(); + Optional p = Sponge.getServer().getPlayer(player); + if (p.isPresent()) { + Player plyr = p.get(); + for (String perm : perms) { + if (plyr.hasPermission("dynmap." + perm)) { + rslt.add(perm); + } + } + } + return rslt; + } + + @Override + public boolean hasOfflinePermission(String player, String perm) { + Optional p = Sponge.getServer().getPlayer(player); + if (p.isPresent()) { + Player plyr = p.get(); + return plyr.hasPermission("dynmap." + perm); + } + return false; + } +} diff --git a/forge-1.12.2/src/main/java/org/dynmap/forge_1_12_2/DynmapPlugin.java b/forge-1.12.2/src/main/java/org/dynmap/forge_1_12_2/DynmapPlugin.java index 6a11ba8e..b3cf00d5 100644 --- a/forge-1.12.2/src/main/java/org/dynmap/forge_1_12_2/DynmapPlugin.java +++ b/forge-1.12.2/src/main/java/org/dynmap/forge_1_12_2/DynmapPlugin.java @@ -1475,9 +1475,9 @@ public class DynmapPlugin /* Set up player login/quit event handler */ registerPlayerLoginListener(); /* Initialize permissions handler */ - permissions = Sponge7Permissions.create(); + permissions = FilePermissions.create(); if (permissions == null) { - permissions = FilePermissions.create(); + permissions = Sponge7Permissions.create(); } if(permissions == null) { permissions = new OpPermissions(new String[] { "webchat", "marker.icons", "marker.list", "webregister", "stats", "hide.self", "show.self" }); @@ -1510,6 +1510,10 @@ public class DynmapPlugin { return; } + // Extract default permission example, if needed + File filepermexample = new File(core.getDataFolder(), "permissions.yml.example"); + core.createDefaultFileFromResource("/permissions.yml.example", filepermexample); + DynmapCommonAPIListener.apiInitialized(core); } diff --git a/forge-1.12.2/src/main/java/org/dynmap/forge_1_12_2/permissions/Sponge7Permissions.java b/forge-1.12.2/src/main/java/org/dynmap/forge_1_12_2/permissions/Sponge7Permissions.java index 659f0812..eaff7234 100644 --- a/forge-1.12.2/src/main/java/org/dynmap/forge_1_12_2/permissions/Sponge7Permissions.java +++ b/forge-1.12.2/src/main/java/org/dynmap/forge_1_12_2/permissions/Sponge7Permissions.java @@ -24,6 +24,7 @@ public class Sponge7Permissions implements PermissionProvider { } Log.info("Using Sponge Permissions for access control"); Log.info("Web interface permissions only available for online users"); + Log.info("Note: you may need to give users permissions for base commands (e.g. dynmap.command.* on LuckPerms) as well as for specific actions"); return new Sponge7Permissions(); } diff --git a/forge-1.13.2/src/main/java/org/dynmap/forge_1_13_2/DynmapPlugin.java b/forge-1.13.2/src/main/java/org/dynmap/forge_1_13_2/DynmapPlugin.java index 05bc2a96..528bb457 100644 --- a/forge-1.13.2/src/main/java/org/dynmap/forge_1_13_2/DynmapPlugin.java +++ b/forge-1.13.2/src/main/java/org/dynmap/forge_1_13_2/DynmapPlugin.java @@ -1456,6 +1456,10 @@ public class DynmapPlugin { return; } + // Extract default permission example, if needed + File filepermexample = new File(core.getDataFolder(), "permissions.yml.example"); + core.createDefaultFileFromResource("/permissions.yml.example", filepermexample); + DynmapCommonAPIListener.apiInitialized(core); } diff --git a/forge-1.14.4/src/main/java/org/dynmap/forge_1_14_4/DynmapPlugin.java b/forge-1.14.4/src/main/java/org/dynmap/forge_1_14_4/DynmapPlugin.java index b259cd94..5b8ba11b 100644 --- a/forge-1.14.4/src/main/java/org/dynmap/forge_1_14_4/DynmapPlugin.java +++ b/forge-1.14.4/src/main/java/org/dynmap/forge_1_14_4/DynmapPlugin.java @@ -1485,6 +1485,10 @@ public class DynmapPlugin { return; } + // Extract default permission example, if needed + File filepermexample = new File(core.getDataFolder(), "permissions.yml.example"); + core.createDefaultFileFromResource("/permissions.yml.example", filepermexample); + DynmapCommonAPIListener.apiInitialized(core); } diff --git a/forge-1.15.2/src/main/java/org/dynmap/forge_1_15_2/DynmapPlugin.java b/forge-1.15.2/src/main/java/org/dynmap/forge_1_15_2/DynmapPlugin.java index c4580327..31e76761 100644 --- a/forge-1.15.2/src/main/java/org/dynmap/forge_1_15_2/DynmapPlugin.java +++ b/forge-1.15.2/src/main/java/org/dynmap/forge_1_15_2/DynmapPlugin.java @@ -1485,6 +1485,10 @@ public class DynmapPlugin { return; } + // Extract default permission example, if needed + File filepermexample = new File(core.getDataFolder(), "permissions.yml.example"); + core.createDefaultFileFromResource("/permissions.yml.example", filepermexample); + DynmapCommonAPIListener.apiInitialized(core); } diff --git a/forge-1.16.1/src/main/java/org/dynmap/forge_1_16_1/DynmapPlugin.java b/forge-1.16.1/src/main/java/org/dynmap/forge_1_16_1/DynmapPlugin.java index 509d7102..422107b9 100644 --- a/forge-1.16.1/src/main/java/org/dynmap/forge_1_16_1/DynmapPlugin.java +++ b/forge-1.16.1/src/main/java/org/dynmap/forge_1_16_1/DynmapPlugin.java @@ -1482,6 +1482,10 @@ public class DynmapPlugin { return; } + // Extract default permission example, if needed + File filepermexample = new File(core.getDataFolder(), "permissions.yml.example"); + core.createDefaultFileFromResource("/permissions.yml.example", filepermexample); + DynmapCommonAPIListener.apiInitialized(core); }