]> WPIA git - gigi.git/blob - src/org/cacert/gigi/pages/account/MailCertificates.java
UPD: moved getUser up
[gigi.git] / src / org / cacert / gigi / pages / account / MailCertificates.java
1 package org.cacert.gigi.pages.account;
2
3 import java.io.IOException;
4 import java.io.PrintWriter;
5 import java.security.GeneralSecurityException;
6 import java.security.cert.X509Certificate;
7 import java.sql.PreparedStatement;
8 import java.sql.ResultSet;
9 import java.sql.SQLException;
10 import java.util.HashMap;
11
12 import javax.servlet.ServletOutputStream;
13 import javax.servlet.http.HttpServletRequest;
14 import javax.servlet.http.HttpServletResponse;
15
16 import org.cacert.gigi.Certificate;
17 import org.cacert.gigi.User;
18 import org.cacert.gigi.database.DatabaseConnection;
19 import org.cacert.gigi.output.CertificateTable;
20 import org.cacert.gigi.pages.LoginPage;
21 import org.cacert.gigi.pages.Page;
22 import org.cacert.gigi.util.PEM;
23
24 public class MailCertificates extends Page {
25
26     CertificateTable myTable = new CertificateTable("mailcerts");
27
28     public static final String PATH = "/account/certs/email";
29
30     public MailCertificates() {
31         super("Email Certificates");
32     }
33
34     @Override
35     public boolean beforeTemplate(HttpServletRequest req, HttpServletResponse resp) throws IOException {
36
37         String pi = req.getPathInfo().substring(PATH.length());
38         if (pi.length() == 0) {
39             return false;
40         }
41         pi = pi.substring(1);
42         boolean crt = false;
43         boolean cer = false;
44         resp.setContentType("application/pkix-cert");
45         if (pi.endsWith(".crt")) {
46             crt = true;
47             pi = pi.substring(0, pi.length() - 4);
48         } else if (pi.endsWith(".cer")) {
49             if (req.getParameter("install") != null) {
50                 resp.setContentType("application/x-x509-user-cert");
51             }
52             cer = true;
53             pi = pi.substring(0, pi.length() - 4);
54         } else if (pi.endsWith(".cer")) {
55             cer = true;
56             pi = pi.substring(0, pi.length() - 4);
57         }
58         String serial = pi;
59         try {
60             Certificate c = Certificate.getBySerial(serial);
61             if (c == null || getUser(req).getId() != c.getOwnerId()) {
62                 resp.sendError(404);
63                 return true;
64             }
65             X509Certificate cert = c.cert();
66             if ( !crt && !cer) {
67                 return false;
68             }
69             ServletOutputStream out = resp.getOutputStream();
70             if (crt) {
71                 out.println(PEM.encode("CERTIFICATE", cert.getEncoded()));
72             } else if (cer) {
73                 out.write(cert.getEncoded());
74             }
75         } catch (IllegalArgumentException e) {
76             resp.sendError(404);
77             return true;
78         } catch (GeneralSecurityException e) {
79             resp.sendError(404);
80             return true;
81         } catch (SQLException e) {
82             resp.sendError(404);
83             return true;
84         }
85
86         return true;
87     }
88
89     @Override
90     public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
91         PrintWriter out = resp.getWriter();
92         String pi = req.getPathInfo().substring(PATH.length());
93         if (pi.length() != 0) {
94             pi = pi.substring(1);
95
96             String serial = pi;
97             Certificate c = Certificate.getBySerial(serial);
98             if (c == null || LoginPage.getUser(req).getId() != c.getOwnerId()) {
99                 resp.sendError(404);
100                 return;
101             }
102             out.print("<a href='");
103             out.print(serial);
104             out.print(".crt'>");
105             out.print(translate(req, "PEM encoded Certificate"));
106             out.println("</a><br/>");
107
108             out.print("<a href='");
109             out.print(serial);
110             out.print(".cer'>");
111             out.print(translate(req, "DER encoded Certificate"));
112             out.println("</a><br/>");
113             out.print("<a href='");
114             out.print(serial);
115             out.print(".cer?install'>");
116             out.print(translate(req, "Install into browser."));
117             out.println("</a><br/>");
118
119             out.println("<pre>");
120             try {
121                 X509Certificate cert = c.cert();
122                 out.print(cert);
123             } catch (GeneralSecurityException e) {
124                 e.printStackTrace();
125             } catch (SQLException e) {
126                 e.printStackTrace();
127             }
128             out.println("</pre>");
129             return;
130         }
131
132         HashMap<String, Object> vars = new HashMap<String, Object>();
133         User us = LoginPage.getUser(req);
134         try {
135             PreparedStatement ps = DatabaseConnection.getInstance().prepare("SELECT `id`, `CN`, `serial`, `revoked`, `expire`, `disablelogin` FROM `emailcerts` WHERE `memid`=?");
136             ps.setInt(1, us.getId());
137             ResultSet rs = ps.executeQuery();
138             vars.put("mailcerts", rs);
139             myTable.output(out, getLanguage(req), vars);
140             rs.close();
141         } catch (SQLException e) {
142             e.printStackTrace();
143         }
144     }
145
146 }