PageRenderTime 27ms CodeModel.GetById 15ms RepoModel.GetById 1ms app.codeStats 0ms

/worldedit-bukkit/src/main/java/com/sk89q/wepif/NijiPermissionsResolver.java

https://gitlab.com/Skull3x/WorldEdit
Java | 178 lines | 132 code | 26 blank | 20 comment | 18 complexity | de4b21c9d85c2628180e9d4b21bd03f9 MD5 | raw file
  1. /*
  2. * WorldEdit, a Minecraft world manipulation toolkit
  3. * Copyright (C) sk89q <http://www.sk89q.com>
  4. * Copyright (C) WorldEdit team and contributors
  5. *
  6. * This program is free software: you can redistribute it and/or modify it
  7. * under the terms of the GNU Lesser General Public License as published by the
  8. * Free Software Foundation, either version 3 of the License, or
  9. * (at your option) any later version.
  10. *
  11. * This program is distributed in the hope that it will be useful, but WITHOUT
  12. * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13. * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
  14. * for more details.
  15. *
  16. * You should have received a copy of the GNU Lesser General Public License
  17. * along with this program. If not, see <http://www.gnu.org/licenses/>.
  18. */
  19. package com.sk89q.wepif;
  20. import com.sk89q.util.yaml.YAMLProcessor;
  21. import org.bukkit.Bukkit;
  22. import org.bukkit.OfflinePlayer;
  23. import org.bukkit.Server;
  24. import org.bukkit.command.PluginCommand;
  25. import org.bukkit.entity.Player;
  26. import org.bukkit.plugin.Plugin;
  27. import org.bukkit.plugin.PluginManager;
  28. import com.nijikokun.bukkit.Permissions.Permissions;
  29. import java.util.logging.Level;
  30. import java.util.logging.Logger;
  31. public class NijiPermissionsResolver implements PermissionsResolver {
  32. private static final Logger log = Logger.getLogger(NijiPermissionsResolver.class.getCanonicalName());
  33. private Server server;
  34. private Permissions api;
  35. public static PermissionsResolver factory(Server server, YAMLProcessor config) {
  36. PluginManager pluginManager = server.getPluginManager();
  37. try {
  38. Class.forName("com.nijikokun.bukkit.Permissions.Permissions");
  39. } catch (ClassNotFoundException e) {
  40. return null;
  41. }
  42. Plugin plugin = pluginManager.getPlugin("Permissions");
  43. // Check if plugin is loaded and has Permissions interface
  44. if (plugin == null || !(plugin instanceof Permissions)) {
  45. return null;
  46. }
  47. // Check for fake permissions
  48. if (config.getBoolean("ignore-nijiperms-bridges", true) && isFakeNijiPerms(plugin)) {
  49. return null;
  50. }
  51. return new NijiPermissionsResolver(server, (Permissions) plugin);
  52. }
  53. @Override
  54. public void load() {
  55. }
  56. public NijiPermissionsResolver(Server server, Permissions plugin) {
  57. this.server = server;
  58. this.api = plugin;
  59. }
  60. @Override
  61. @SuppressWarnings("static-access")
  62. public boolean hasPermission(String name, String permission) {
  63. try {
  64. Player player = server.getPlayerExact(name);
  65. if (player == null) return false;
  66. try {
  67. return api.getHandler().has(player, permission);
  68. } catch (Throwable t) {
  69. return api.Security.permission(player, permission);
  70. }
  71. } catch (Throwable t) {
  72. log.log(Level.WARNING, "Failed to check permissions", t);
  73. return false;
  74. }
  75. }
  76. @Override
  77. public boolean hasPermission(String worldName, String name, String permission) {
  78. try {
  79. try {
  80. return api.getHandler().has(worldName, name, permission);
  81. } catch (Throwable t) {
  82. return api.getHandler().has(server.getPlayerExact(name), permission);
  83. }
  84. } catch (Throwable t) {
  85. log.log(Level.WARNING, "Failed to check permissions", t);
  86. return false;
  87. }
  88. }
  89. @Override
  90. @SuppressWarnings("static-access")
  91. public boolean inGroup(String name, String group) {
  92. try {
  93. Player player = server.getPlayerExact(name);
  94. if (player == null) return false;
  95. try {
  96. return api.getHandler().inGroup(player.getWorld().getName(), name, group);
  97. } catch (Throwable t) {
  98. return api.Security.inGroup(name, group);
  99. }
  100. } catch (Throwable t) {
  101. log.log(Level.WARNING, "Failed to check groups", t);
  102. return false;
  103. }
  104. }
  105. @Override
  106. @SuppressWarnings("static-access")
  107. public String[] getGroups(String name) {
  108. try {
  109. Player player = server.getPlayerExact(name);
  110. if (player == null) return new String[0];
  111. String[] groups = null;
  112. try {
  113. groups = api.getHandler().getGroups(player.getWorld().getName(), player.getName());
  114. } catch (Throwable t) {
  115. String group = api.Security.getGroup(player.getWorld().getName(), player.getName());
  116. if (group != null) groups = new String[] { group };
  117. }
  118. if (groups == null) {
  119. return new String[0];
  120. } else {
  121. return groups;
  122. }
  123. } catch (Throwable t) {
  124. log.log(Level.WARNING, "Failed to get groups", t);
  125. return new String[0];
  126. }
  127. }
  128. @Override
  129. public boolean hasPermission(OfflinePlayer player, String permission) {
  130. return hasPermission(player.getName(), permission);
  131. }
  132. @Override
  133. public boolean hasPermission(String worldName, OfflinePlayer player, String permission) {
  134. return hasPermission(worldName, player.getName(), permission);
  135. }
  136. @Override
  137. public boolean inGroup(OfflinePlayer player, String group) {
  138. return inGroup(player.getName(), group);
  139. }
  140. @Override
  141. public String[] getGroups(OfflinePlayer player) {
  142. return getGroups(player.getName());
  143. }
  144. public static boolean isFakeNijiPerms(Plugin plugin) {
  145. PluginCommand permsCommand = Bukkit.getServer().getPluginCommand("permissions");
  146. return permsCommand == null || !(permsCommand.getPlugin().equals(plugin));
  147. }
  148. @Override
  149. public String getDetectionMessage() {
  150. return "Permissions plugin detected! Using Permissions plugin for permissions.";
  151. }
  152. }