use of io.nosqlbench.docsys.handlers.FavIconHandler in project nosqlbench by nosqlbench.
the class NBWebServer method run.
public void run() {
// new InetSocketAddress("")
Server server = new Server(bindPort);
handlers = new HandlerList();
if (this.basePaths.size() == 0 && this.servletClasses.size() == 0) {
logger.warn("No service endpoints or doc paths have been added. Loading dynamically.");
}
RewriteHandler rh = new RewriteHandler();
// rh.addRule(new RedirectRegexRule("/","/docs/"));
// rh.addRule(new RedirectPatternRule("/","/docs/"));
handlers.addHandler(rh);
// Favicon
for (Path basePath : basePaths) {
Path icon = basePath.resolve("/favicon.ico");
if (Files.exists(icon)) {
FavIconHandler favIconHandler = new FavIconHandler(basePaths.get(0) + "/favicon.ico", false);
handlers.addHandler(favIconHandler);
break;
}
}
if (basePaths.size() == 0) {
Docs docs = new Docs();
// Load static path contexts which are published within the runtime.
docs.merge(DocsysPathLoader.loadStaticPaths());
// default static copy of the docs app
if (!docs.getPathMap().containsKey("docsys-app")) {
docs.merge(new DocsysDefaultAppPath().getDocs());
}
basePaths.addAll(docs.getPaths());
}
for (Path basePath : basePaths) {
logger.info("Adding path to server: " + basePath.toString());
ResourceHandler resourceHandler = new ResourceHandler();
resourceHandler.setDirAllowed(true);
resourceHandler.setAcceptRanges(true);
resourceHandler.setWelcomeFiles(new String[] { "index.html" });
resourceHandler.setRedirectWelcome(false);
Resource baseResource = new PathResource(basePath);
if (basePath.toUri().toString().startsWith("jar:")) {
try {
baseResource = JarResource.newResource(basePath.toUri());
} catch (MalformedURLException e) {
throw new RuntimeException(e);
}
}
resourceHandler.setBaseResource(baseResource);
resourceHandler.setCacheControl("no-cache");
handlers.addHandler(resourceHandler);
}
// ResourceConfig statusResourceCfg = new ResourceConfig(DocServerStatusEndpoint.class);
// statusResourceCfg.property("server", this);
// ServletContainer statusResourceContainer = new ServletContainer(statusResourceCfg);
// ServletHolder statusResourceServletHolder = new ServletHolder(statusResourceContainer);
// getContextHandler().addServlet(statusResourceServletHolder, "/_");
logger.info("adding " + servletClasses.size() + " context handlers...");
loadDynamicEndpoints();
ResourceConfig rc = new ResourceConfig();
rc.addProperties(contextParams);
rc.property("server", this);
ServletContainer container = new ServletContainer(rc);
ServletHolder servlets = new ServletHolder(container);
String classnames = this.servletClasses.stream().map(Class::getCanonicalName).collect(Collectors.joining(","));
rc.property(ServerProperties.PROVIDER_CLASSNAMES, classnames);
// servlets.setInitParameter(ServerProperties.PROVIDER_CLASSNAMES,
// classnames
// );
ServletContextHandler sch = new ServletContextHandler();
sch.setContextPath("/*");
sch.addServlet(servlets, "/*");
FilterHolder filter = new FilterHolder();
filter.setInitParameter("allowedOrigins", "*");
filter.setInitParameter("allowedMethods", "POST,GET,OPTIONS,PUT,DELETE,HEAD");
filter.setInitParameter("allowedHeaders", "X-PINGOTHER, Origin, X-Requested-With, Content-Type, Accept");
filter.setInitParameter("preflightMaxAge", "1800");
filter.setInitParameter("allowCredentials", "true");
CrossOriginFilter corsFilter = new CrossOriginFilter();
filter.setFilter(corsFilter);
FilterMapping filterMapping = new FilterMapping();
filterMapping.setDispatcherTypes(EnumSet.of(DispatcherType.REQUEST));
filterMapping.setPathSpec("/*");
filterMapping.setServletName("cross-origin");
sch.addFilter(filter, "/*", EnumSet.of(DispatcherType.REQUEST, DispatcherType.ASYNC));
handlers.addHandler(sch);
// Show contexts
DefaultHandler defaultHandler = new DefaultHandler();
defaultHandler.setShowContexts(true);
defaultHandler.setServeIcon(false);
handlers.addHandler(defaultHandler);
// FilterMapping corsMapping = new FilterMapping();
// corsMapping.set
//
// ServletHandler CorsHandler = new ServletHandler();
// CorsHandler.setH
server.setHandler(handlers);
for (Connector connector : server.getConnectors()) {
if (connector instanceof AbstractConnector) {
logger.debug("Setting idle timeout for " + connector + " to 300,000ms");
((AbstractConnector) connector).setIdleTimeout(300000);
}
}
try {
List<Connector> connectors = new ArrayList<>();
if (bindScheme.equals("http")) {
ServerConnector sc = new ServerConnector(server);
sc.setPort(bindPort);
sc.setHost(bindHost);
// sc.setDefaultProtocol(bindScheme);
connectors.add(sc);
} else if (bindScheme.equals("https")) {
SslContextFactory.Server server1 = new SslContextFactory.Server();
ServerConnector sc = new ServerConnector(server, server1);
sc.setPort(bindPort);
sc.setHost(bindHost);
// sc.setDefaultProtocol(bindScheme);
connectors.add(sc);
}
server.setConnectors(connectors.toArray(new Connector[0]));
server.start();
System.out.println("Started documentation server at " + bindScheme + "://" + bindHost + ":" + bindPort + "/");
if (Desktop.isDesktopSupported() && Desktop.getDesktop().isSupported(Desktop.Action.BROWSE)) {
System.out.println("Browsing to documentation server at " + bindScheme + "://" + bindHost + ":" + bindPort + "/");
Desktop.getDesktop().browse(new URI(bindScheme + "://" + bindHost + ":" + bindPort + "/"));
System.out.println("If the docs app did not open automatically in your browser, open to the the url above.");
}
server.join();
} catch (Exception e) {
logger.error("error while starting doc server", e);
e.printStackTrace(System.out);
System.exit(2);
}
}
Aggregations