package hudson.plugins.emailext.groovy.sandbox; import org.jenkinsci.plugins.scriptsecurity.sandbox.Whitelist; import org.jenkinsci.plugins.scriptsecurity.sandbox.whitelists.StaticWhitelist; import javax.annotation.CheckForNull; import javax.annotation.Nonnull; import java.io.IOException; import java.lang.reflect.Field; import java.lang.reflect.Method; /** * {@link ObjectInstanceWhitelist} backed by a set of {@link StaticWhitelist}s. */ public class StaticProxyInstanceWhitelist extends ObjectInstanceWhitelist<Object> { private Whitelist[] proxies; public StaticProxyInstanceWhitelist(Object instance, @Nonnull String... resources) throws IOException { super(instance); proxies = new Whitelist[resources.length]; for (int i = 0; i < resources.length; i++) { String resource = resources[i]; proxies[i] = StaticWhitelist.from(getClass().getResource(resource)); } } @Override public boolean permitsMethod(@Nonnull Method method, @Nonnull Object receiver, @Nonnull Object[] args) { if (permitsInstance(receiver)) { for (Whitelist proxy : proxies) { if (proxy.permitsMethod(method, receiver, args)) { return true; } } } return false; } @Override public boolean permitsFieldGet(@Nonnull Field field, @Nonnull Object receiver) { if (permitsInstance(receiver)) { for (Whitelist proxy : proxies) { if (proxy.permitsFieldGet(field, receiver)) { return true; } } } return false; } @Override public boolean permitsFieldSet(@Nonnull Field field, @Nonnull Object receiver, @CheckForNull Object value) { return false; } }