From ea6ee43a84f9a1f055d97ff0de8196569154e4d0 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Felix=20D=C3=B6rre?= Date: Tue, 24 Jun 2014 18:30:16 +0200 Subject: [PATCH] Implement prititive "show email certificates" --- src/org/cacert/gigi/Gigi.java | 7 ++- .../gigi/database/DatabaseConnection.java | 3 +- .../cacert/gigi/output/CertificateTable.java | 58 +++++++++++++++++++ src/org/cacert/gigi/pages/LoginPage.java | 3 + .../gigi/pages/account/MailCertificates.java | 46 +++++++++++++++ 5 files changed, 113 insertions(+), 4 deletions(-) create mode 100644 src/org/cacert/gigi/output/CertificateTable.java create mode 100644 src/org/cacert/gigi/pages/account/MailCertificates.java diff --git a/src/org/cacert/gigi/Gigi.java b/src/org/cacert/gigi/Gigi.java index 286f5eb9..0420eb7f 100644 --- a/src/org/cacert/gigi/Gigi.java +++ b/src/org/cacert/gigi/Gigi.java @@ -18,6 +18,7 @@ import org.cacert.gigi.pages.LoginPage; import org.cacert.gigi.pages.MainPage; import org.cacert.gigi.pages.Page; import org.cacert.gigi.pages.TestSecure; +import org.cacert.gigi.pages.account.MailCertificates; import org.cacert.gigi.pages.account.MyDetails; import org.cacert.gigi.pages.main.RegisterPage; import org.eclipse.jetty.util.log.Log; @@ -34,12 +35,12 @@ public class Gigi extends HttpServlet { pages.put("/login", new LoginPage("CACert - Login")); pages.put("/", new MainPage("CACert - Home")); pages.put("/secure", new TestSecure()); + pages.put(MailCertificates.PATH, new MailCertificates()); pages.put(MyDetails.PATH, new MyDetails()); pages.put(RegisterPage.PATH, new RegisterPage()); String templ = ""; - try { - BufferedReader reader = new BufferedReader(new InputStreamReader( - new FileInputStream(new File("templates/base.html")))); + try (BufferedReader reader = new BufferedReader(new InputStreamReader( + new FileInputStream(new File("templates/base.html"))))) { String tmp; while ((tmp = reader.readLine()) != null) { templ += tmp; diff --git a/src/org/cacert/gigi/database/DatabaseConnection.java b/src/org/cacert/gigi/database/DatabaseConnection.java index 68ddd8c8..c1eed41b 100644 --- a/src/org/cacert/gigi/database/DatabaseConnection.java +++ b/src/org/cacert/gigi/database/DatabaseConnection.java @@ -28,7 +28,8 @@ public class DatabaseConnection { e.printStackTrace(); } try { - c = DriverManager.getConnection(credentials.getProperty("url"), + c = DriverManager.getConnection(credentials.getProperty("url") + + "?zeroDateTimeBehavior=convertToNull", credentials.getProperty("user"), credentials.getProperty("password")); } catch (SQLException e) { diff --git a/src/org/cacert/gigi/output/CertificateTable.java b/src/org/cacert/gigi/output/CertificateTable.java new file mode 100644 index 00000000..413de877 --- /dev/null +++ b/src/org/cacert/gigi/output/CertificateTable.java @@ -0,0 +1,58 @@ +package org.cacert.gigi.output; + +import java.io.PrintWriter; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.Map; + +import org.cacert.gigi.Language; + +public class CertificateTable implements Outputable { + String resultSet; + public CertificateTable(String resultSet) { + this.resultSet = resultSet; + } + private static final String[] columnNames = new String[]{ + "Renew/Revoke/Delete", "Status", "Email Address", "SerialNumber", + "Revoked", "Expires", "Login"}; + + @Override + public void output(PrintWriter out, Language l, Map vars) { + ResultSet rs = (ResultSet) vars.get(resultSet); + try { + out.println("
"); + out.println(""); + out.println(""); + for (String column : columnNames) { + out.print(""); + } + out.print(""); + + rs.beforeFirst(); + while (rs.next()) { + // out.println(rs.getString("id")); + out.print(""); + } + out.println("
"); + out.print(l.getTranslation(column)); + out.println(""); + out.print(l.getTranslation("Comment *")); + out.println("
 State"); + out.println(rs.getString("CN")); + out.print(""); + out.println(rs.getString("serial")); + out.print(""); + if (rs.getString("revoked") == null) { + out.println("N/A"); + } else { + out.println(rs.getString("revoked")); + } + out.print(""); + out.println(rs.getString("expire")); + out.println("aa
"); + } catch (SQLException e) { + e.printStackTrace(); + } + + } +} diff --git a/src/org/cacert/gigi/pages/LoginPage.java b/src/org/cacert/gigi/pages/LoginPage.java index 134a0898..49b42dbe 100644 --- a/src/org/cacert/gigi/pages/LoginPage.java +++ b/src/org/cacert/gigi/pages/LoginPage.java @@ -72,6 +72,9 @@ public class LoginPage extends Page { e.printStackTrace(); } } + public static User getUser(HttpServletRequest req) { + return (User) req.getSession().getAttribute(USER); + } private void tryAuthWithCertificate(HttpServletRequest req, X509Certificate x509Certificate) { String serial = x509Certificate.getSerialNumber().toString(16) diff --git a/src/org/cacert/gigi/pages/account/MailCertificates.java b/src/org/cacert/gigi/pages/account/MailCertificates.java new file mode 100644 index 00000000..72952d4b --- /dev/null +++ b/src/org/cacert/gigi/pages/account/MailCertificates.java @@ -0,0 +1,46 @@ +package org.cacert.gigi.pages.account; + +import java.io.IOException; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.HashMap; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.cacert.gigi.User; +import org.cacert.gigi.database.DatabaseConnection; +import org.cacert.gigi.output.CertificateTable; +import org.cacert.gigi.pages.LoginPage; +import org.cacert.gigi.pages.Page; + +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 void doGet(HttpServletRequest req, HttpServletResponse resp) + throws IOException { + 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(resp.getWriter(), getLanguage(req), vars); + rs.close(); + } catch (SQLException e) { + e.printStackTrace(); + } + } + +} -- 2.39.2