X-Git-Url: https://code.wpia.club/?p=gigi.git;a=blobdiff_plain;f=src%2Forg%2Fcacert%2Fgigi%2Fpages%2Faccount%2FMailCertificates.java;h=ed8661708464bff6696e5b469688fefd9b2e7dfa;hp=e0dd947a06d3dfe37c47683f4c3ec9b8ee3e3b5a;hb=1d24b8e1fe36651f22339ddbb7b1a3b34b48c081;hpb=baa0986163014f20ca273c1502754940f60b7d41 diff --git a/src/org/cacert/gigi/pages/account/MailCertificates.java b/src/org/cacert/gigi/pages/account/MailCertificates.java index e0dd947a..ed866170 100644 --- a/src/org/cacert/gigi/pages/account/MailCertificates.java +++ b/src/org/cacert/gigi/pages/account/MailCertificates.java @@ -7,7 +7,6 @@ import java.security.cert.X509Certificate; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; -import java.util.Base64; import java.util.HashMap; import javax.servlet.ServletOutputStream; @@ -20,129 +19,128 @@ import org.cacert.gigi.database.DatabaseConnection; import org.cacert.gigi.output.CertificateTable; import org.cacert.gigi.pages.LoginPage; import org.cacert.gigi.pages.Page; +import org.cacert.gigi.util.PEM; public class MailCertificates extends Page { - CertificateTable myTable = new CertificateTable("mailcerts"); - public static final String PATH = "/account/certs/email"; - - public MailCertificates() { - super("Email Certificates"); - } - - @Override - public boolean beforeTemplate(HttpServletRequest req, HttpServletResponse resp) throws IOException { - String pi = req.getPathInfo().substring(PATH.length()); - if (pi.length() == 0) { - return false; - } - pi = pi.substring(1); - boolean crt = false; - boolean cer = false; - if (pi.endsWith(".crt")) { - crt = true; - pi = pi.substring(0, pi.length() - 4); - } else if (pi.endsWith(".cer")) { - cer = true; - pi = pi.substring(0, pi.length() - 4); - } - int serial = 0; - try { - serial = Integer.parseInt(pi); - } catch (NumberFormatException nfe) { - resp.sendError(404); - return true; - } - try { - Certificate c = new Certificate(serial); - if (LoginPage.getUser(req).getId() != c.getOwnerId()) { - resp.sendError(404); - return true; - } - X509Certificate cert = c.cert(); - if (!crt && !cer) { - return false; - } - ServletOutputStream out = resp.getOutputStream(); - if (crt) { - out.println("-----BEGIN CERTIFICATE-----"); - String block = Base64.getEncoder().encodeToString(cert.getEncoded()).replaceAll("(.{64})(?=.)", "$1\n"); - out.println(block); - out.println("-----END CERTIFICATE-----"); - } else if (cer) { - out.write(cert.getEncoded()); - } - } catch (IllegalArgumentException e) { - resp.sendError(404); - return true; - } catch (GeneralSecurityException e) { - resp.sendError(404); - return true; - } catch (SQLException e) { - resp.sendError(404); - return true; - } - - return true; - } - - @Override - public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { - PrintWriter out = resp.getWriter(); - String pi = req.getPathInfo().substring(PATH.length()); - if (pi.length() != 0) { - pi = pi.substring(1); - - int serial = 0; - try { - serial = Integer.parseInt(pi); - } catch (NumberFormatException nfe) { - } - Certificate c = null; - if (serial != 0) { - c = new Certificate(serial); - } - if (c == null || LoginPage.getUser(req).getId() != c.getOwnerId()) { - resp.sendError(404); - return; - } - out.print(""); - out.print(translate(req, "PEM encoded Certificate")); - out.println("
"); - - out.print(""); - out.print(translate(req, "DER encoded Certificate")); - out.println("
"); - - out.println("
");
-			try {
-				X509Certificate cert = c.cert();
-				out.print(cert);
-			} catch (GeneralSecurityException e) {
-				e.printStackTrace();
-			} catch (SQLException e) {
-				e.printStackTrace();
-			}
-			out.println("
"); - return; - } - - HashMap vars = new HashMap(); - User us = LoginPage.getUser(req); - try { - PreparedStatement ps = DatabaseConnection.getInstance().prepare( - "SELECT `id`, `CN`, `serial`, `revoked`, `expire`, `disablelogin` FROM `emailcerts` WHERE `memid`=?"); - ps.setInt(1, us.getId()); - ResultSet rs = ps.executeQuery(); - vars.put("mailcerts", rs); - myTable.output(out, getLanguage(req), vars); - rs.close(); - } catch (SQLException e) { - e.printStackTrace(); - } - } + + CertificateTable myTable = new CertificateTable("mailcerts"); + + public static final String PATH = "/account/certs/email"; + + public MailCertificates() { + super("Email Certificates"); + } + + @Override + public boolean beforeTemplate(HttpServletRequest req, HttpServletResponse resp) throws IOException { + + String pi = req.getPathInfo().substring(PATH.length()); + if (pi.length() == 0) { + return false; + } + pi = pi.substring(1); + boolean crt = false; + boolean cer = false; + resp.setContentType("application/pkix-cert"); + if (pi.endsWith(".crt")) { + crt = true; + pi = pi.substring(0, pi.length() - 4); + } else if (pi.endsWith(".cer")) { + if (req.getParameter("install") != null) { + resp.setContentType("application/x-x509-user-cert"); + } + cer = true; + pi = pi.substring(0, pi.length() - 4); + } else if (pi.endsWith(".cer")) { + cer = true; + pi = pi.substring(0, pi.length() - 4); + } + String serial = pi; + try { + Certificate c = Certificate.getBySerial(serial); + if (c == null || getUser(req).getId() != c.getOwnerId()) { + resp.sendError(404); + return true; + } + X509Certificate cert = c.cert(); + if ( !crt && !cer) { + return false; + } + ServletOutputStream out = resp.getOutputStream(); + if (crt) { + out.println(PEM.encode("CERTIFICATE", cert.getEncoded())); + } else if (cer) { + out.write(cert.getEncoded()); + } + } catch (IllegalArgumentException e) { + resp.sendError(404); + return true; + } catch (GeneralSecurityException e) { + resp.sendError(404); + return true; + } catch (SQLException e) { + resp.sendError(404); + return true; + } + + return true; + } + + @Override + public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { + PrintWriter out = resp.getWriter(); + String pi = req.getPathInfo().substring(PATH.length()); + if (pi.length() != 0) { + pi = pi.substring(1); + + String serial = pi; + Certificate c = Certificate.getBySerial(serial); + if (c == null || LoginPage.getUser(req).getId() != c.getOwnerId()) { + resp.sendError(404); + return; + } + out.print(""); + out.print(translate(req, "PEM encoded Certificate")); + out.println("
"); + + out.print(""); + out.print(translate(req, "DER encoded Certificate")); + out.println("
"); + out.print(""); + out.print(translate(req, "Install into browser.")); + out.println("
"); + + out.println("
");
+            try {
+                X509Certificate cert = c.cert();
+                out.print(cert);
+            } catch (GeneralSecurityException e) {
+                e.printStackTrace();
+            } catch (SQLException e) {
+                e.printStackTrace();
+            }
+            out.println("
"); + return; + } + + HashMap vars = new HashMap(); + User us = LoginPage.getUser(req); + try { + PreparedStatement ps = DatabaseConnection.getInstance().prepare("SELECT `id`, `CN`, `serial`, `revoked`, `expire`, `disablelogin` FROM `emailcerts` WHERE `memid`=?"); + ps.setInt(1, us.getId()); + ResultSet rs = ps.executeQuery(); + vars.put("mailcerts", rs); + myTable.output(out, getLanguage(req), vars); + rs.close(); + } catch (SQLException e) { + e.printStackTrace(); + } + } }