Mercurial Hosting > nabble
view src/nabble/utils/Jetty.java @ 62:4674ed7d56df default tip
remove n2
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Sat, 30 Sep 2023 20:25:29 -0600 |
parents | 7ecd1a4ef557 |
children |
line wrap: on
line source
package nabble.utils; import cachingfilter.CachingFilter; import fschmidt.util.executor.JettyThreadPool; import fschmidt.util.java.IoUtils; import fschmidt.util.servlet.AuthenticatingFilter; import fschmidt.util.servlet.BadBotFilter; import fschmidt.util.servlet.JarDefaultServlet; import fschmidt.util.servlet.JtpContext; import nabble.view.lib.JtpContextServlet; import fschmidt.util.servlet.NoCacheDefaultServlet; import fschmidt.util.servlet.RedirectFilter; import nabble.model.Init; import nabble.view.lib.MyJtpServlet; import nabble.view.lib.NabbleConnectionLimitFilter; import nabble.view.lib.NabbleErrorFilter; import nabble.view.lib.NabbleErrorHandler; import org.eclipse.jetty.http.MimeTypes; import org.eclipse.jetty.server.Connector; import org.eclipse.jetty.server.Handler; import org.eclipse.jetty.server.NCSARequestLog; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.server.handler.ContextHandlerCollection; import org.eclipse.jetty.server.handler.HandlerCollection; import org.eclipse.jetty.server.handler.RequestLogHandler; import org.eclipse.jetty.server.nio.SelectChannelConnector; import org.eclipse.jetty.servlet.FilterHolder; import org.eclipse.jetty.servlet.Holder; import org.eclipse.jetty.servlet.ServletContextHandler; import org.eclipse.jetty.servlet.ServletHolder; import org.eclipse.jetty.servlets.GzipFilter; import org.eclipse.jetty.servlets.WelcomeFilter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.servlet.http.HttpServlet; import java.net.MalformedURLException; import java.net.URL; import java.util.Map; public class Jetty { private static final Logger logger = LoggerFactory.getLogger(Jetty.class); private ContextHandlerCollection contexts = new ContextHandlerCollection(); public static volatile boolean isJetty = false; public Jetty() { isJetty = true; } public ServletContextHandler newContext(String path) throws MalformedURLException { return new ServletContextHandler(contexts, path, ServletContextHandler.SESSIONS); } public ServletContextHandler newContext(String path, String resourceBase) throws MalformedURLException { ServletContextHandler context = new ServletContextHandler(contexts, path, ServletContextHandler.SESSIONS); setResourceBase(context, resourceBase); return context; } public ServletHolder newServletHolder(HttpServlet servlet, ServletContextHandler context, String[] paths) { ServletHolder sh = new ServletHolder(servlet); for (String path : paths) { context.addServlet(sh, path); } return sh; } public ServletContextHandler newFolderContext(String path, String folderPath, String[] paths, boolean dirAllowed) throws MalformedURLException { ServletContextHandler context = new ServletContextHandler(contexts, path, ServletContextHandler.SESSIONS); context.setResourceBase(folderPath); ServletHolder sh = new ServletHolder(new NoCacheDefaultServlet()); sh.setInitParameter("maxCacheSize", "0"); sh.setInitParameter("dirAllowed", String.valueOf(dirAllowed)); for (String p : paths) { context.addServlet(sh, p); } return context; } public ServletContextHandler newTools2Context() throws MalformedURLException { ServletContextHandler context = newContext("/tools2", "fschmidt/tools/web/Index.class"); // context.setMaxFormContentSize(0); ??? context.addFilter(WelcomeFilter.class,"/*",0).setInitParameter("welcome","Index.jtp"); ServletHolder sh = newServletHolder(new JtpContextServlet(), context, new String[] { "/", "*.jtp", "*.class", "*.txt" }); sh.setInitParameter("base", "fschmidt.tools.web"); addDefaultServlet(context, new String[]{"*.html"} ); return context; } public void setResourceBase(ServletContextHandler context,String name) throws MalformedURLException { URL url = IoUtils.getUrlFromResource(name); url = new URL(url,"."); context.setResourceBase(url.toString()); } public ServletContextHandler newWebContext(Map<String, String> initParams) throws MalformedURLException { ServletContextHandler context = newContext("/", "nabble/view/web/Index.class"); newServletHolder( new LuanServlet("classpath:nabble/view/web"), context, new String[]{"*.luan"} ); JtpContext mainServlet = MyJtpServlet.getJtpContext(); String[] paths = new String[] { "/", "*.jtp", "*.class", "*.html", "*.xml", "*.xml.gz", "*.txt", "/file/*", "/attachment/*" }; ServletHolder sh = newServletHolder((HttpServlet) mainServlet, context, paths); sh.setInitParameter("urlMapping", "true"); sh.setInitParameter("characterEncoding", "utf-8"); setInitParameters(sh, initParams); context.setErrorHandler(new NabbleErrorHandler()); addDefaultServlet(context); return context; } public ServletHolder addDefaultServlet(ServletContextHandler context) { return addDefaultServlet(context, new String[0]); } public NCSARequestLog newNCSARequestLog() { return newNCSARequestLog(null); } public NCSARequestLog newNCSARequestLog(String filename) { NCSARequestLog log = filename == null? new NCSARequestLog() : new NCSARequestLog(filename); log.setPreferProxiedForAddress(true); log.setExtended(false); return log; } public Server newServer(int port, NCSARequestLog log) { Server server = new Server(port); RequestLogHandler rlh = new RequestLogHandler(); rlh.setRequestLog(log); HandlerCollection handlers = new HandlerCollection(); handlers.setHandlers(new Handler[] {contexts, rlh}); server.setHandler(handlers); return server; } public Server newServer(int port, String host, NCSARequestLog log) { Server server = new Server(); SelectChannelConnector con = new SelectChannelConnector(); con.setPort(port); con.setHost(host); server.setConnectors( new Connector[] {con}); RequestLogHandler rlh = new RequestLogHandler(); rlh.setRequestLog(log); HandlerCollection handlers = new HandlerCollection(); handlers.setHandlers(new Handler[] {contexts, rlh}); server.setHandler(handlers); return server; } public void setThreadPool(Server server) { server.setThreadPool(new JettyThreadPool(nabble.model.Executors.foregroundExecutor)); } public ServletHolder addDefaultServlet(ServletContextHandler context, String[] paths) { ServletHolder sh = new ServletHolder(new JarDefaultServlet()); context.addServlet(sh, "*.gif"); context.addServlet(sh, "*.js"); context.addServlet(sh, "*.css"); context.addServlet(sh, "*.xls"); context.addServlet(sh, "*.ico"); context.addServlet(sh, "*.png"); context.addServlet(sh, "*.htm"); context.addServlet(sh, "*.woff"); context.addServlet(sh, "*.woff2"); context.addServlet(sh, "*.svg"); for (String path : paths) { context.addServlet(sh, path); } sh.setInitParameter("dirAllowed","false"); sh.setInitParameter("gzip","false"); sh.setInitParameter("maxCacheSize","0"); return sh; } public void authenticate(ServletContextHandler context, String path, String username, String password) { FilterHolder fh = context.addFilter(AuthenticatingFilter.class, path, 0); fh.setInitParameter("realm", "Nabble"); fh.setInitParameter("username", username); fh.setInitParameter("password", password); } public void addShutdownHook(final Server server) { Runnable runnable = new Runnable() { public void run() { try { server.stop(); logger.info("Jetty shutdown done"); } catch (Exception e) { logger.error("jetty shutdown failed", e); } } }; Init.addShutdownHook(runnable); } public void addNabbleErrorFilter(ServletContextHandler context) { context.addFilter(NabbleErrorFilter.class, "/*", 0); } public void addGzipFilter(ServletContextHandler context) { context.addFilter(GzipFilter.class, "/*", 0); } public void addNabbleConnectionLimitFilter(ServletContextHandler context, Map<String, String> initParams) { FilterHolder fh = context.addFilter(NabbleConnectionLimitFilter.class,"/*",0); setInitParameters(fh, initParams); } public void addBadBotFilter(ServletContextHandler context, Map<String, String> initParams) { FilterHolder fh = context.addFilter(BadBotFilter.class,"/*",0); setInitParameters(fh, initParams); } public void addCachingFilter(ServletContextHandler context, Map<String, String> initParams) { FilterHolder fh = context.addFilter(CachingFilter.class,"/*",0); setInitParameters(fh, initParams); } public void addRedirectFilter(ServletContextHandler context, String domain) { FilterHolder fh = context.addFilter(RedirectFilter.class, "/*", 0); fh.setInitParameter("host", domain); } private void setInitParameters(Holder fh, Map<String, String> initParams) { for (Map.Entry<String, String> entry : initParams.entrySet()) fh.setInitParameter(entry.getKey(), entry.getValue()); } public void addCustomMimeTypes(MimeTypes mimeTypes) { mimeTypes.addMimeMapping("docm", "application/vnd.ms-word.document.macroEnabled.12"); mimeTypes.addMimeMapping("docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document"); mimeTypes.addMimeMapping("dotx", "application/vnd.openxmlformats-officedocument.wordprocessingml.template"); mimeTypes.addMimeMapping("potm", "application/vnd.ms-powerpoint.template.macroEnabled.12"); mimeTypes.addMimeMapping("potx", "application/vnd.openxmlformats-officedocument.presentationml.template"); mimeTypes.addMimeMapping("ppam", "application/vnd.ms-powerpoint.addin.macroEnabled.12"); mimeTypes.addMimeMapping("ppsm", "application/vnd.ms-powerpoint.slideshow.macroEnabled.12"); mimeTypes.addMimeMapping("ppsx", "application/vnd.openxmlformats-officedocument.presentationml.slideshow"); mimeTypes.addMimeMapping("pptm", "application/vnd.ms-powerpoint.presentation.macroEnabled.12"); mimeTypes.addMimeMapping("pptx", "application/vnd.openxmlformats-officedocument.presentationml.presentation"); mimeTypes.addMimeMapping("xlam", "application/vnd.ms-excel.addin.macroEnabled.12"); mimeTypes.addMimeMapping("xlsb", "application/vnd.ms-excel.sheet.binary.macroEnabled.12"); mimeTypes.addMimeMapping("xlsm", "application/vnd.ms-excel.sheet.macroEnabled.12"); mimeTypes.addMimeMapping("xlsx", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); mimeTypes.addMimeMapping("xltm", "application/vnd.ms-excel.template.macroEnabled.12"); mimeTypes.addMimeMapping("xltx", "application/vnd.openxmlformats-officedocument.spreadsheetml.template"); } }