From b132dd10db97047f5f107c141507ae0a5bfd1167 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Felix=20D=C3=B6rre?= Date: Sat, 2 Aug 2014 12:36:07 +0200 Subject: [PATCH] Use bussiness-logic-api to get certificate list. --- src/org/cacert/gigi/User.java | 24 +++++++ .../gigi/output/CertificateIterable.java | 41 ++++++++++++ .../cacert/gigi/output/CertificateTable.java | 66 ------------------- .../cacert/gigi/output/CertificateTable.templ | 30 +++++++++ .../gigi/pages/account/Certificates.java | 21 ++---- 5 files changed, 100 insertions(+), 82 deletions(-) create mode 100644 src/org/cacert/gigi/output/CertificateIterable.java delete mode 100644 src/org/cacert/gigi/output/CertificateTable.java create mode 100644 src/org/cacert/gigi/output/CertificateTable.templ diff --git a/src/org/cacert/gigi/User.java b/src/org/cacert/gigi/User.java index 47da7188..69e35e6a 100644 --- a/src/org/cacert/gigi/User.java +++ b/src/org/cacert/gigi/User.java @@ -287,6 +287,30 @@ public class User { return null; } + public Certificate[] getCertificates() { + try { + PreparedStatement ps = DatabaseConnection.getInstance().prepare("SELECT serial FROM certs WHERE memid=? AND revoked=0"); + ps.setInt(1, id); + ResultSet rs = ps.executeQuery(); + rs.last(); + int count = rs.getRow(); + Certificate[] data = new Certificate[count]; + rs.beforeFirst(); + for (int i = 0; i < data.length; i++) { + if ( !rs.next()) { + throw new Error("Internal sql api violation."); + } + data[i] = Certificate.getBySerial(rs.getString(1)); + } + rs.close(); + return data; + } catch (SQLException e) { + e.printStackTrace(); + } + + return null; + } + public void updateDefaultEmail(EmailAddress newMail) throws GigiApiException { try { EmailAddress[] adrs = getEmails(); diff --git a/src/org/cacert/gigi/output/CertificateIterable.java b/src/org/cacert/gigi/output/CertificateIterable.java new file mode 100644 index 00000000..5108e1c8 --- /dev/null +++ b/src/org/cacert/gigi/output/CertificateIterable.java @@ -0,0 +1,41 @@ +package org.cacert.gigi.output; + +import java.sql.SQLException; +import java.util.Map; + +import org.cacert.gigi.Certificate; +import org.cacert.gigi.Language; +import org.cacert.gigi.output.template.IterableDataset; + +public class CertificateIterable implements IterableDataset { + + Certificate[] certificates; + + public CertificateIterable(Certificate[] certificates) { + this.certificates = certificates; + } + + int i = 0; + + @Override + public boolean next(Language l, Map vars) { + if (i >= certificates.length) { + return false; + } + Certificate c = certificates[i++]; + try { + vars.put("state", l.getTranslation(c.getStatus().toString().toLowerCase())); + } catch (SQLException e) { + vars.put("state", "Failed"); + e.printStackTrace(); + } + vars.put("CN", c.getDistinguishedName()); + vars.put("serial", c.getSerial()); + vars.put("digest", c.getMessageDigest()); + + vars.put("issued", "TODO"); // TODO output dates + vars.put("revoked", "TODO"); + vars.put("expire", "TODO"); + return true; + } +} diff --git a/src/org/cacert/gigi/output/CertificateTable.java b/src/org/cacert/gigi/output/CertificateTable.java deleted file mode 100644 index d64fb257..00000000 --- a/src/org/cacert/gigi/output/CertificateTable.java +++ /dev/null @@ -1,66 +0,0 @@ -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; -import org.cacert.gigi.pages.account.Certificates; - -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/output/CertificateTable.templ b/src/org/cacert/gigi/output/CertificateTable.templ new file mode 100644 index 00000000..f2870bba --- /dev/null +++ b/src/org/cacert/gigi/output/CertificateTable.templ @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
a
+
diff --git a/src/org/cacert/gigi/pages/account/Certificates.java b/src/org/cacert/gigi/pages/account/Certificates.java index 37869f4d..66f8e90f 100644 --- a/src/org/cacert/gigi/pages/account/Certificates.java +++ b/src/org/cacert/gigi/pages/account/Certificates.java @@ -5,8 +5,6 @@ import java.io.PrintWriter; import java.net.URLEncoder; import java.security.GeneralSecurityException; import java.security.cert.X509Certificate; -import java.sql.PreparedStatement; -import java.sql.ResultSet; import java.sql.SQLException; import java.util.HashMap; @@ -16,8 +14,7 @@ import javax.servlet.http.HttpServletResponse; import org.cacert.gigi.Certificate; import org.cacert.gigi.User; -import org.cacert.gigi.database.DatabaseConnection; -import org.cacert.gigi.output.CertificateTable; +import org.cacert.gigi.output.CertificateIterable; import org.cacert.gigi.output.template.Template; import org.cacert.gigi.pages.LoginPage; import org.cacert.gigi.pages.Page; @@ -25,8 +22,6 @@ import org.cacert.gigi.util.PEM; public class Certificates extends Page { - CertificateTable myTable = new CertificateTable("mailcerts"); - Template certDisplay = new Template(Certificates.class.getResource("CertificateDisplay.templ")); public static final String PATH = "/account/certs"; @@ -90,6 +85,8 @@ public class Certificates extends Page { return true; } + Template certTable = new Template(CertificateIterable.class.getResource("CertificateTable.templ")); + @Override public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { PrintWriter out = resp.getWriter(); @@ -119,16 +116,8 @@ public class Certificates extends Page { HashMap vars = new HashMap(); User us = LoginPage.getUser(req); - try { - PreparedStatement ps = DatabaseConnection.getInstance().prepare("SELECT `id`, `CN`, `serial`, `revoked`, `expire`, `disablelogin` FROM `certs` 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(); - } + vars.put("certs", new CertificateIterable(us.getCertificates())); + certTable.output(out, getLanguage(req), vars); } } -- 2.39.2