mirror of
https://github.com/mitb-archive/filebot
synced 2024-08-13 17:03:45 -04:00
64 lines
1.7 KiB
Java
64 lines
1.7 KiB
Java
package net.filebot.format;
|
|
|
|
import static net.filebot.format.ExpressionFormat.*;
|
|
|
|
import java.security.AccessController;
|
|
|
|
import javax.script.Bindings;
|
|
import javax.script.CompiledScript;
|
|
import javax.script.ScriptContext;
|
|
import javax.script.ScriptException;
|
|
import javax.script.SimpleScriptContext;
|
|
|
|
import org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation;
|
|
|
|
public class ExpressionFilter {
|
|
|
|
private final String expression;
|
|
private final CompiledScript compiledExpression;
|
|
|
|
private Throwable lastException;
|
|
|
|
public ExpressionFilter(String expression) throws ScriptException {
|
|
this.expression = expression;
|
|
this.compiledExpression = new SecureCompiledScript(compileScriptlet(expression));
|
|
}
|
|
|
|
public String getExpression() {
|
|
return expression;
|
|
}
|
|
|
|
public Throwable getLastException() {
|
|
return lastException;
|
|
}
|
|
|
|
public boolean matches(Object value) throws ScriptException {
|
|
return matches(new ExpressionBindings(value));
|
|
}
|
|
|
|
public boolean matches(Bindings bindings) throws ScriptException {
|
|
this.lastException = null;
|
|
|
|
// use privileged bindings so we are not restricted by the script sandbox
|
|
Bindings priviledgedBindings = PrivilegedInvocation.newProxy(Bindings.class, bindings, AccessController.getContext());
|
|
|
|
// initialize script context with the privileged bindings
|
|
ScriptContext context = new SimpleScriptContext();
|
|
context.setBindings(priviledgedBindings, ScriptContext.GLOBAL_SCOPE);
|
|
|
|
try {
|
|
// evaluate user script
|
|
Object value = compiledExpression.eval(context);
|
|
|
|
// value as boolean
|
|
return DefaultTypeTransformation.castToBoolean(value);
|
|
} catch (Throwable e) {
|
|
// ignore any and all scripting exceptions
|
|
this.lastException = e;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
}
|