]> WPIA git - gigi.git/commitdiff
ADD: page for root certs download.
authorFelix Dörre <felix@dogcraft.de>
Fri, 29 Aug 2014 18:59:44 +0000 (20:59 +0200)
committerFelix Dörre <felix@dogcraft.de>
Fri, 29 Aug 2014 18:59:44 +0000 (20:59 +0200)
src/org/cacert/gigi/Gigi.java
src/org/cacert/gigi/pages/RootCertPage.java [new file with mode: 0644]
src/org/cacert/gigi/pages/RootCertPage.templ [new file with mode: 0644]

index 632757d7691a95c7530e11fa80dc61912d79f195..79cf670f9ba3a2eb1f3a932dc06e14129235636c 100644 (file)
@@ -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 (file)
index 0000000..d714af9
--- /dev/null
@@ -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<String, Object>());
+
+    }
+
+    @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 (file)
index 0000000..cd65445
--- /dev/null
@@ -0,0 +1,2 @@
+<?=_The Root certificates are available for download here. Choose your preferred format:?><br/>
+<a href="?pem">PEM</a> <a href="?cer">CER</a>