]> WPIA git - gigi.git/blob - src/org/cacert/gigi/pages/account/MailCertificates.java
Format code according do BenBE's formatter.
[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.Base64;
11 import java.util.HashMap;
12
13 import javax.servlet.ServletOutputStream;
14 import javax.servlet.http.HttpServletRequest;
15 import javax.servlet.http.HttpServletResponse;
16
17 import org.cacert.gigi.Certificate;
18 import org.cacert.gigi.User;
19 import org.cacert.gigi.database.DatabaseConnection;
20 import org.cacert.gigi.output.CertificateTable;
21 import org.cacert.gigi.pages.LoginPage;
22 import org.cacert.gigi.pages.Page;
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 || LoginPage.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("-----BEGIN CERTIFICATE-----");
72                 String block = Base64.getEncoder().encodeToString(cert.getEncoded()).replaceAll("(.{64})(?=.)", "$1\n");
73                 out.println(block);
74                 out.println("-----END CERTIFICATE-----");
75             } else if (cer) {
76                 out.write(cert.getEncoded());
77             }
78         } catch (IllegalArgumentException e) {
79             resp.sendError(404);
80             return true;
81         } catch (GeneralSecurityException e) {
82             resp.sendError(404);
83             return true;
84         } catch (SQLException e) {
85             resp.sendError(404);
86             return true;
87         }
88
89         return true;
90     }
91
92     @Override
93     public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
94         PrintWriter out = resp.getWriter();
95         String pi = req.getPathInfo().substring(PATH.length());
96         if (pi.length() != 0) {
97             pi = pi.substring(1);
98
99             String serial = pi;
100             Certificate c = Certificate.getBySerial(serial);
101             if (c == null || LoginPage.getUser(req).getId() != c.getOwnerId()) {
102                 resp.sendError(404);
103                 return;
104             }
105             out.print("<a href='");
106             out.print(serial);
107             out.print(".crt'>");
108             out.print(translate(req, "PEM encoded Certificate"));
109             out.println("</a><br/>");
110
111             out.print("<a href='");
112             out.print(serial);
113             out.print(".cer'>");
114             out.print(translate(req, "DER encoded Certificate"));
115             out.println("</a><br/>");
116             out.print("<a href='");
117             out.print(serial);
118             out.print(".cer?install'>");
119             out.print(translate(req, "Install into browser."));
120             out.println("</a><br/>");
121
122             out.println("<pre>");
123             try {
124                 X509Certificate cert = c.cert();
125                 out.print(cert);
126             } catch (GeneralSecurityException e) {
127                 e.printStackTrace();
128             } catch (SQLException e) {
129                 e.printStackTrace();
130             }
131             out.println("</pre>");
132             return;
133         }
134
135         HashMap<String, Object> vars = new HashMap<String, Object>();
136         User us = LoginPage.getUser(req);
137         try {
138             PreparedStatement ps = DatabaseConnection.getInstance().prepare("SELECT `id`, `CN`, `serial`, `revoked`, `expire`, `disablelogin` FROM `emailcerts` WHERE `memid`=?");
139             ps.setInt(1, us.getId());
140             ResultSet rs = ps.executeQuery();
141             vars.put("mailcerts", rs);
142             myTable.output(out, getLanguage(req), vars);
143             rs.close();
144         } catch (SQLException e) {
145             e.printStackTrace();
146         }
147     }
148
149 }