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;
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();
}
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);
--- /dev/null
+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;
+ }
+
+}