X-Git-Url: https://code.wpia.club/?p=gigi.git;a=blobdiff_plain;f=src%2Fclub%2Fwpia%2Fgigi%2Fpages%2FRootCertPage.java;h=25c024138093310a7173d0a4236bece2b3c321b6;hp=c821e7c426aa6c13e757b824a229c232980282a9;hb=59bc09e6a04eda765ab63b5a27a6f48bfdcbeda7;hpb=bccd4cc0dba0f89aa045b113bac46eb8cc1dab4e diff --git a/src/club/wpia/gigi/pages/RootCertPage.java b/src/club/wpia/gigi/pages/RootCertPage.java index c821e7c4..25c02413 100644 --- a/src/club/wpia/gigi/pages/RootCertPage.java +++ b/src/club/wpia/gigi/pages/RootCertPage.java @@ -1,35 +1,106 @@ package club.wpia.gigi.pages; import java.io.IOException; +import java.io.PrintWriter; import java.security.KeyStore; import java.security.KeyStoreException; import java.security.cert.Certificate; import java.security.cert.CertificateEncodingException; +import java.util.Collections; +import java.util.Comparator; import java.util.HashMap; +import java.util.LinkedList; +import java.util.Map; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import club.wpia.gigi.dbObjects.CACertificate; +import club.wpia.gigi.localisation.Language; +import club.wpia.gigi.output.template.Outputable; +import club.wpia.gigi.util.HTMLEncoder; import club.wpia.gigi.util.PEM; +import club.wpia.gigi.util.ServerConstants; public class RootCertPage extends Page { - private Certificate root; + private final Certificate root; + + private final CACertificate[] cs; + + private final OutputableCertificate rootP; + + private final String appName = ServerConstants.getAppName().toLowerCase(); + + private class OutputableCertificate implements Outputable { + + private final CACertificate target; + + private final OutputableCertificate[] children; + + public OutputableCertificate(CACertificate c) { + target = c; + LinkedList children = new LinkedList<>(); + for (CACertificate c0 : cs) { + if (c0.getParent() == c && c0 != c) { + children.add(new OutputableCertificate(c0)); + } + } + + Collections.sort(children, new Comparator() { + + @Override + public int compare(OutputableCertificate o1, OutputableCertificate o2) { + return o1.target.getKeyname().compareTo(o2.target.getKeyname()); + } + }); + this.children = children.toArray(new OutputableCertificate[children.size()]); + } + + @Override + public void output(PrintWriter out, Language l, Map vars) { + out.println(""); + out.println(HTMLEncoder.encodeHTML(target.getKeyname())); + out.println(""); + out.println(HTMLEncoder.encodeHTML(target.getCertificate().getSubjectX500Principal().toString())); + out.println("
    "); + for (OutputableCertificate c : children) { + out.print("
  • "); + c.output(out, l, vars); + out.print("
  • "); + } + out.println("
"); + } + + } public RootCertPage(KeyStore ks) { super("Root Certificates"); try { root = ks.getCertificate("root"); } catch (KeyStoreException e) { - e.printStackTrace(); + throw new Error(e); + } + cs = CACertificate.getAll(); + CACertificate rootC = null; + for (CACertificate c : cs) { + if (c.isSelfsigned()) { + rootC = c; + break; + } + } + if (rootC == null) { + throw new Error(); } + rootP = new OutputableCertificate(rootC); } @Override public boolean beforeTemplate(HttpServletRequest req, HttpServletResponse resp) throws IOException { if (req.getParameter("pem") != null && root != null) { resp.setContentType("application/x-x509-ca-cert"); + resp.setHeader("Content-Disposition", "attachment; filename=\"" + appName + "_roots.crt\""); ServletOutputStream out = resp.getOutputStream(); try { out.println(PEM.encode("CERTIFICATE", root.getEncoded())); @@ -39,6 +110,7 @@ public class RootCertPage extends Page { return true; } else if (req.getParameter("cer") != null && root != null) { resp.setContentType("application/x-x509-ca-cert"); + resp.setHeader("Content-Disposition", "attachment; filename=\"" + appName + "_roots.cer\""); ServletOutputStream out = resp.getOutputStream(); try { out.write(root.getEncoded()); @@ -52,7 +124,9 @@ public class RootCertPage extends Page { @Override public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { - getDefaultTemplate().output(resp.getWriter(), getLanguage(req), new HashMap()); + HashMap map = new HashMap(); + map.put("root", rootP); + getDefaultTemplate().output(resp.getWriter(), getLanguage(req), map); }