X-Git-Url: https://code.wpia.club/?p=gigi.git;a=blobdiff_plain;f=src%2Fclub%2Fwpia%2Fgigi%2Fpages%2FRootCertPage.java;h=9d1d9c90eff4ec01f5f7ba1fc22adac68048a25e;hp=c821e7c426aa6c13e757b824a229c232980282a9;hb=189f4896bdfa004f3b6a8df7794cc9a2cf0ae09e;hpb=079f745cc7a284e6964c568f83e1293929fd899f diff --git a/src/club/wpia/gigi/pages/RootCertPage.java b/src/club/wpia/gigi/pages/RootCertPage.java index c821e7c4..9d1d9c90 100644 --- a/src/club/wpia/gigi/pages/RootCertPage.java +++ b/src/club/wpia/gigi/pages/RootCertPage.java @@ -1,29 +1,96 @@ 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; public class RootCertPage extends Page { - private Certificate root; + private final Certificate root; + + private final CACertificate[] cs; + + private final OutputableCertificate rootP; + + 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 @@ -52,7 +119,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); }