package org.dynmap.forge_1_19_3.permissions; import java.io.File; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Set; import org.dynmap.ConfigurationNode; import org.dynmap.Log; import org.dynmap.forge_1_19_3.DynmapPlugin; import net.minecraft.server.level.ServerPlayer; public class FilePermissions implements PermissionProvider { private HashMap> perms; private Set defperms; public static FilePermissions create() { File f = new File("dynmap/permissions.yml"); if(!f.exists()) return null; ConfigurationNode cfg = new ConfigurationNode(f); cfg.load(); Log.info("Using permissions.yml for access control"); return new FilePermissions(cfg); } private FilePermissions(ConfigurationNode cfg) { perms = new HashMap>(); for(String k : cfg.keySet()) { List p = cfg.getStrings(k, null); if(p != null) { k = k.toLowerCase(); HashSet pset = new HashSet(); for(String perm : p) { pset.add(perm.toLowerCase()); } perms.put(k, pset); if(k.equals("defaultuser")) { defperms = pset; } } } } private boolean hasPerm(String player, String perm) { Set ps = perms.get(player); if((ps != null) && (ps.contains(perm))) { return true; } if(defperms.contains(perm)) { return true; } return false; } @Override public Set hasOfflinePermissions(String player, Set perms) { player = player.toLowerCase(); HashSet rslt = new HashSet(); if(DynmapPlugin.plugin.isOp(player)) { rslt.addAll(perms); } else { for(String p : perms) { if(hasPerm(player, p)) { rslt.add(p); } } } return rslt; } @Override public boolean hasOfflinePermission(String player, String perm) { player = player.toLowerCase(); if(DynmapPlugin.plugin.isOp(player)) { return true; } else { return hasPerm(player, perm); } } @Override public boolean has(ServerPlayer psender, String permission) { if(psender != null) { String n = psender.getName().getString().toLowerCase(); return hasPerm(n, permission); } return true; } @Override public boolean hasPermissionNode(ServerPlayer psender, String permission) { if(psender != null) { String player = psender.getName().getString().toLowerCase(); return DynmapPlugin.plugin.isOp(player); } return false; } }