package hudson.plugins.greenballs;
import hudson.Plugin;
import hudson.PluginWrapper;
import hudson.util.ColorPalette;
import hudson.util.PluginServletFilter;
import java.awt.Color;
import java.io.IOException;
import java.lang.reflect.Field;
import java.net.URL;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletResponse;
import org.kohsuke.stapler.StaplerRequest;
import org.kohsuke.stapler.StaplerResponse;
/**
* Entry point of a plugin.
*
* <p>
* There must be one {@link Plugin} class in each plugin. See javadoc of {@link Plugin} for more about what can be done
* on this class.
*
* @author Kohsuke Kawaguchi
*/
public class PluginImpl extends Plugin {
PluginWrapper wrapper;
final Logger logger = Logger.getLogger("hudson.plugins.greenballs");
@Override
public void start() throws Exception {
super.start();
PluginServletFilter.addFilter(new GreenBallFilter());
try {
wrapper = null;
Field wrapperField = Plugin.class.getDeclaredField("wrapper");
wrapperField.setAccessible(true);
wrapper = (PluginWrapper) wrapperField.get(this);
} catch (Exception e) {
logger.log(Level.WARNING, "Unable to access plugin wrapper", e);
}
try {
Field colorValue = Color.class.getDeclaredField("value");
colorValue.setAccessible(true);
colorValue.setInt(ColorPalette.BLUE, new Color(172, 218, 0).getRGB());
} catch (Exception e) {
logger.log(Level.WARNING, "Unable to change BLUE ColorPalette", e);
}
logger.log(Level.INFO, "Green Balls!");
}
@Override
public void doDynamic(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException {
rsp.setHeader("Cache-Control", "public, s-maxage=86400");
if (wrapper == null) {
super.doDynamic(req, rsp);
return;
}
String path = req.getRestOfPath();
if (path.length() == 0)
path = "/";
if (path.indexOf("..") != -1 || path.length() < 1) {
// don't serve anything other than files in the sub directory.
rsp.sendError(HttpServletResponse.SC_BAD_REQUEST);
return;
}
// use serveLocalizedFile to support automatic locale selection
logger.log(Level.FINE, "Serving cached resource {0}", path);
rsp.serveLocalizedFile(req, new URL(wrapper.baseResourceURL, '.' + path), 86400000);
}
}