X-Git-Url: https://code.wpia.club/?a=blobdiff_plain;f=src%2Forg%2Fcacert%2Fgigi%2FLauncher.java;h=5f767a63956a3da4ce8cb4be5256e8403b77da68;hb=d5901c90c1037698e8883e677294509a4ba4fa6e;hp=f5b65d73c64d0527ca7526a1803ae12410e5cfdb;hpb=cc328145806d21aa58f433db7774196972ac86a1;p=gigi.git diff --git a/src/org/cacert/gigi/Launcher.java b/src/org/cacert/gigi/Launcher.java index f5b65d73..5f767a63 100644 --- a/src/org/cacert/gigi/Launcher.java +++ b/src/org/cacert/gigi/Launcher.java @@ -1,7 +1,11 @@ package org.cacert.gigi; import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.InputStream; import java.io.IOException; +import java.net.HttpURLConnection; import java.net.InetSocketAddress; import java.security.GeneralSecurityException; import java.security.Key; @@ -95,18 +99,29 @@ public class Launcher { public static void main(String[] args) throws Exception { System.setProperty("jdk.tls.ephemeralDHKeySize", "4096"); - new Launcher().boot(); + InputStream in; + if (args.length >= 1) { + in = new FileInputStream(new File(args[0])); + } else { + in = System.in; + } + new Launcher().boot(in); } Server s; GigiConfig conf; - public synchronized void boot() throws Exception { + private boolean isSystemPort(int port) { + return 1 <= port && port <= 1024; + } + + public synchronized void boot(InputStream in) throws Exception { Locale.setDefault(Locale.ENGLISH); TimeZone.setDefault(TimeZone.getTimeZone("UTC")); + HttpURLConnection.setFollowRedirects(false); - conf = GigiConfig.parse(System.in); + conf = GigiConfig.parse(in); ServerConstants.init(conf.getMainProps()); initEmails(conf); @@ -116,7 +131,7 @@ public class Launcher { initHandlers(); s.start(); - if ((ServerConstants.getSecurePort() <= 1024 || ServerConstants.getPort() <= 1024) && !System.getProperty("os.name").toLowerCase().contains("win")) { + if ((isSystemPort(ServerConstants.getSecurePort()) || isSystemPort(ServerConstants.getPort())) && !System.getProperty("os.name").toLowerCase().contains("win")) { SetUID uid = new SetUID(); if ( !uid.setUid(65536 - 2, 65536 - 2).getSuccess()) { Log.getLogger(Launcher.class).warn("Couldn't set uid!"); @@ -137,7 +152,7 @@ public class Launcher { if (conf.getMainProps().getProperty("proxy", "false").equals("true")) { httpConfig.addCustomizer(new ExtendedForwarded()); s.setConnectors(new Connector[] { - ConnectorsLauncher.createConnector(conf, s, httpConfig, false) + ConnectorsLauncher.createConnector(conf, s, httpConfig, false) }); } else { HttpConfiguration httpsConfig = createHttpConfiguration(); @@ -151,8 +166,12 @@ public class Launcher { private void initEmails(GigiConfig conf) throws GeneralSecurityException, IOException, KeyStoreException, NoSuchAlgorithmException, UnrecoverableKeyException { KeyStore privateStore = conf.getPrivateStore(); - Certificate mail = privateStore.getCertificate("mail"); - Key k = privateStore.getKey("mail", conf.getPrivateStorePw().toCharArray()); + Certificate mail = null; + Key k = null; + if (privateStore != null && privateStore.containsAlias("mail")) { + mail = privateStore.getCertificate("mail"); + k = privateStore.getKey("mail", conf.getPrivateStorePw().toCharArray()); + } EmailProvider.initSystem(conf.getMainProps(), mail, k); } @@ -162,16 +181,19 @@ public class Launcher { protected static ServerConnector createConnector(GigiConfig conf, Server s, HttpConfiguration httpConfig, boolean doHttps) throws GeneralSecurityException, IOException { ServerConnector connector; + int port; if (doHttps) { connector = new ServerConnector(s, createConnectionFactory(conf), new HttpConnectionFactory(httpConfig)); + port = ServerConstants.getSecurePort(); } else { connector = new ServerConnector(s, new HttpConnectionFactory(httpConfig)); + port = ServerConstants.getPort(); } - connector.setHost(conf.getMainProps().getProperty("host")); - if (doHttps) { - connector.setPort(ServerConstants.getSecurePort()); + if (port == -1) { + connector.setInheritChannel(true); } else { - connector.setPort(ServerConstants.getPort()); + connector.setHost(conf.getMainProps().getProperty("host")); + connector.setPort(port); } connector.setAcceptQueueSize(100); return connector; @@ -282,11 +304,11 @@ public class Launcher { ContextHandler ch = generateGigiServletContext(webAppServlet); ch.setVirtualHosts(new String[] { - ServerConstants.getWwwHostName() + ServerConstants.getWwwHostName() }); ContextHandler chSecure = generateGigiServletContext(webAppServlet); chSecure.setVirtualHosts(new String[] { - ServerConstants.getSecureHostName() + ServerConstants.getSecureHostName() }); HandlerList hl = new HandlerList(); @@ -304,7 +326,7 @@ public class Launcher { hw.setHandler(rh); ServletContextHandler servlet = new ServletContextHandler(ServletContextHandler.SESSIONS); - servlet.setInitParameter(SessionManager.__SessionCookieProperty, "CACert-Session"); + servlet.setInitParameter(SessionManager.__SessionCookieProperty, "SomeCA-Session"); servlet.addServlet(webAppServlet, "/*"); ErrorPageErrorHandler epeh = new ErrorPageErrorHandler(); epeh.addErrorPage(404, "/error"); @@ -328,7 +350,7 @@ public class Launcher { ContextHandler ch = new ContextHandler(); ch.setHandler(rh); ch.setVirtualHosts(new String[] { - ServerConstants.getStaticHostName() + ServerConstants.getStaticHostName() }); return ch; @@ -351,7 +373,7 @@ public class Launcher { ServletContextHandler sch = new ServletContextHandler(); sch.addVirtualHosts(new String[] { - ServerConstants.getApiHostName() + ServerConstants.getApiHostName() }); sch.addServlet(new ServletHolder(new GigiAPI()), "/*"); return sch;