From: Felix Dörre Date: Fri, 29 Aug 2014 18:59:44 +0000 (+0200) Subject: ADD: page for root certs download. X-Git-Url: https://code.wpia.club/?p=gigi.git;a=commitdiff_plain;h=ccccf71df5e25af791078b408eab30e162926868 ADD: page for root certs download. --- diff --git a/src/org/cacert/gigi/Gigi.java b/src/org/cacert/gigi/Gigi.java index 632757d7..79cf670f 100644 --- a/src/org/cacert/gigi/Gigi.java +++ b/src/org/cacert/gigi/Gigi.java @@ -26,6 +26,7 @@ import org.cacert.gigi.pages.LoginPage; import org.cacert.gigi.pages.LogoutPage; import org.cacert.gigi.pages.MainPage; import org.cacert.gigi.pages.Page; +import org.cacert.gigi.pages.RootCertPage; import org.cacert.gigi.pages.StaticPage; import org.cacert.gigi.pages.TestSecure; import org.cacert.gigi.pages.Verify; @@ -66,12 +67,15 @@ public class Gigi extends HttpServlet { private PingerDaemon pinger; + private KeyStore truststore; + public Gigi(Properties conf, KeyStore truststore) { if (instance != null) { throw new IllegalStateException("Multiple Gigi instances!"); } instance = this; DatabaseConnection.init(conf); + this.truststore = truststore; pinger = new PingerDaemon(truststore); pinger.start(); } @@ -82,6 +86,7 @@ public class Gigi extends HttpServlet { putPage("/error", new PageNotFound(), null); putPage("/login", new LoginPage("CAcert - Login"), "Join CAcert.org"); putPage("/", new MainPage("CAcert - Home"), null); + putPage("/roots", new RootCertPage(truststore), "Join CAcert.org"); putPage(ChangePasswordPage.PATH, new ChangePasswordPage(), "My Account"); putPage(LogoutPage.PATH, new LogoutPage("Logout"), "My Account"); putPage("/secure", new TestSecure(), null); diff --git a/src/org/cacert/gigi/pages/RootCertPage.java b/src/org/cacert/gigi/pages/RootCertPage.java new file mode 100644 index 00000000..d714af91 --- /dev/null +++ b/src/org/cacert/gigi/pages/RootCertPage.java @@ -0,0 +1,64 @@ +package org.cacert.gigi.pages; + +import java.io.IOException; +import java.security.KeyStore; +import java.security.KeyStoreException; +import java.security.cert.Certificate; +import java.security.cert.CertificateEncodingException; +import java.util.HashMap; + +import javax.servlet.ServletOutputStream; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.cacert.gigi.util.PEM; + +public class RootCertPage extends Page { + + private Certificate root; + + public RootCertPage(KeyStore ks) { + super("Root Certificates"); + try { + root = ks.getCertificate("root"); + } catch (KeyStoreException e) { + e.printStackTrace(); + } + } + + @Override + public boolean beforeTemplate(HttpServletRequest req, HttpServletResponse resp) throws IOException { + if (req.getParameter("pem") != null && root != null) { + resp.setContentType("application/x-x509-ca-cert"); + ServletOutputStream out = resp.getOutputStream(); + try { + out.println(PEM.encode("CERTIFICATE", root.getEncoded())); + } catch (CertificateEncodingException e) { + e.printStackTrace(); + } + return true; + } else if (req.getParameter("cer") != null && root != null) { + resp.setContentType("application/x-x509-ca-cert"); + ServletOutputStream out = resp.getOutputStream(); + try { + out.write(root.getEncoded()); + } catch (CertificateEncodingException e) { + e.printStackTrace(); + } + return true; + } + return false; + } + + @Override + public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { + getDefaultTemplate().output(resp.getWriter(), getLanguage(req), new HashMap()); + + } + + @Override + public boolean needsLogin() { + return false; + } + +} diff --git a/src/org/cacert/gigi/pages/RootCertPage.templ b/src/org/cacert/gigi/pages/RootCertPage.templ new file mode 100644 index 00000000..cd65445a --- /dev/null +++ b/src/org/cacert/gigi/pages/RootCertPage.templ @@ -0,0 +1,2 @@ +
+PEM CER