Implemented banned classes config for Nashorn scripts.

This commit is contained in:
Luis C.M committed 2024-02-27 21:18:53 -06:00
1 parent c24a900f18
commit df88e5b4f9
2 files changed
+34 -2

No files matched your search

@@ -11,6 +11,8 @@ import noppes.npcs.config.legacy.LegacyConfig;
import org.apache.logging.log4j.Level;
import java.io.File;
import java.util.Arrays;
import java.util.HashSet;
import java.util.UUID;
public class ConfigScript
@@ -50,6 +52,9 @@ public class ConfigScript
public static Property ScriptDevIDsProperty;
public static String ScriptDevIDs = "";
public static Property BannedClassesProperty;
public final static HashSet<String> BannedClasses = new HashSet<>();
public static void init(File configFile)
{
config = new Configuration(configFile);
@@ -133,6 +138,16 @@ public class ConfigScript
}
} catch (Exception ignored) {}
BannedClassesProperty = config.get(CUSTOMIZATION, "Banned Classes", "java.net.URL,java.net.URI",
"Comma separated list of classes that cannot be used in scripts through Java.for().\n" +
"Classes must be fully written out with library names preceding them.\n" +
"This is a feature ONLY AVAILABLE ON NASHORN.");
String bannedClassesString = BannedClassesProperty.getString();
try {
BannedClasses.clear();
BannedClasses.addAll(Arrays.asList(bannedClassesString.split(",")));
} catch (Exception ignored) {}
}
catch (Exception e)
{
@@ -1,6 +1,8 @@
package noppes.npcs.controllers;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import jdk.nashorn.api.scripting.ClassFilter;
import jdk.nashorn.api.scripting.NashornScriptEngineFactory;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
@@ -248,7 +250,22 @@ public class ScriptController {
private static final List<String> nashornNames = immutableList("nashorn", "Nashorn", "js", "JS", "JavaScript", "javascript", "ECMAScript", "ecmascript");
public ScriptEngine getEngineByName(String language) {
if (nashornNames.contains(language) && this.nashornFactory != null) {
ScriptEngine scriptEngine = this.nashornFactory.getScriptEngine();
ScriptEngine scriptEngine;
try {
ClassFilter filter = s -> {
for (String className : ConfigScript.BannedClasses) {
if (s.compareTo(className) == 0) {
return false;
}
}
return true;
};
NashornScriptEngineFactory nashornScriptEngineFactory = (NashornScriptEngineFactory) this.nashornFactory;
scriptEngine = nashornScriptEngineFactory.getScriptEngine(filter);
} catch (Exception e) {
scriptEngine = this.nashornFactory.getScriptEngine();
}
scriptEngine.setBindings(this.manager.getBindings(), ScriptContext.GLOBAL_SCOPE);
return scriptEngine;
}
@@ -300,4 +317,4 @@ public class ScriptController {
shouldSave = false;
}
}
}