]> WPIA git - gigi.git/blob - src/club/wpia/gigi/pages/RootCertPage.java
add: revocation state in the result list of support cert search
[gigi.git] / src / club / wpia / gigi / pages / RootCertPage.java
1 package club.wpia.gigi.pages;
2
3 import java.io.IOException;
4 import java.io.PrintWriter;
5 import java.security.KeyStore;
6 import java.security.KeyStoreException;
7 import java.security.cert.Certificate;
8 import java.security.cert.CertificateEncodingException;
9 import java.util.Collections;
10 import java.util.Comparator;
11 import java.util.HashMap;
12 import java.util.LinkedList;
13 import java.util.Map;
14
15 import javax.servlet.ServletOutputStream;
16 import javax.servlet.http.HttpServletRequest;
17 import javax.servlet.http.HttpServletResponse;
18
19 import club.wpia.gigi.dbObjects.CACertificate;
20 import club.wpia.gigi.localisation.Language;
21 import club.wpia.gigi.output.template.Outputable;
22 import club.wpia.gigi.util.HTMLEncoder;
23 import club.wpia.gigi.util.PEM;
24
25 public class RootCertPage extends Page {
26
27     private final Certificate root;
28
29     private final CACertificate[] cs;
30
31     private final OutputableCertificate rootP;
32
33     private class OutputableCertificate implements Outputable {
34
35         private final CACertificate target;
36
37         private final OutputableCertificate[] children;
38
39         public OutputableCertificate(CACertificate c) {
40             target = c;
41             LinkedList<OutputableCertificate> children = new LinkedList<>();
42             for (CACertificate c0 : cs) {
43                 if (c0.getParent() == c && c0 != c) {
44                     children.add(new OutputableCertificate(c0));
45                 }
46             }
47
48             Collections.sort(children, new Comparator<OutputableCertificate>() {
49
50                 @Override
51                 public int compare(OutputableCertificate o1, OutputableCertificate o2) {
52                     return o1.target.getKeyname().compareTo(o2.target.getKeyname());
53                 }
54             });
55             this.children = children.toArray(new OutputableCertificate[children.size()]);
56         }
57
58         @Override
59         public void output(PrintWriter out, Language l, Map<String, Object> vars) {
60             out.println("<a href='" + HTMLEncoder.encodeHTML(target.getLink()) + "'>");
61             out.println(HTMLEncoder.encodeHTML(target.getKeyname()));
62             out.println("</a>");
63             out.println(HTMLEncoder.encodeHTML(target.getCertificate().getSubjectX500Principal().toString()));
64             out.println("<ul>");
65             for (OutputableCertificate c : children) {
66                 out.print("<li>");
67                 c.output(out, l, vars);
68                 out.print("</li>");
69             }
70             out.println("</ul>");
71         }
72
73     }
74
75     public RootCertPage(KeyStore ks) {
76         super("Root Certificates");
77         try {
78             root = ks.getCertificate("root");
79         } catch (KeyStoreException e) {
80             throw new Error(e);
81         }
82         cs = CACertificate.getAll();
83         CACertificate rootC = null;
84         for (CACertificate c : cs) {
85             if (c.isSelfsigned()) {
86                 rootC = c;
87                 break;
88             }
89         }
90         if (rootC == null) {
91             throw new Error();
92         }
93         rootP = new OutputableCertificate(rootC);
94     }
95
96     @Override
97     public boolean beforeTemplate(HttpServletRequest req, HttpServletResponse resp) throws IOException {
98         if (req.getParameter("pem") != null && root != null) {
99             resp.setContentType("application/x-x509-ca-cert");
100             ServletOutputStream out = resp.getOutputStream();
101             try {
102                 out.println(PEM.encode("CERTIFICATE", root.getEncoded()));
103             } catch (CertificateEncodingException e) {
104                 e.printStackTrace();
105             }
106             return true;
107         } else if (req.getParameter("cer") != null && root != null) {
108             resp.setContentType("application/x-x509-ca-cert");
109             ServletOutputStream out = resp.getOutputStream();
110             try {
111                 out.write(root.getEncoded());
112             } catch (CertificateEncodingException e) {
113                 e.printStackTrace();
114             }
115             return true;
116         }
117         return false;
118     }
119
120     @Override
121     public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
122         HashMap<String, Object> map = new HashMap<String, Object>();
123         map.put("root", rootP);
124         getDefaultTemplate().output(resp.getWriter(), getLanguage(req), map);
125
126     }
127
128     @Override
129     public boolean needsLogin() {
130         return false;
131     }
132
133 }