]> WPIA git - gigi.git/commitdiff
Use bussiness-logic-api to get certificate list.
authorFelix Dörre <felix@dogcraft.de>
Sat, 2 Aug 2014 10:36:07 +0000 (12:36 +0200)
committerFelix Dörre <felix@dogcraft.de>
Sat, 2 Aug 2014 10:36:07 +0000 (12:36 +0200)
src/org/cacert/gigi/User.java
src/org/cacert/gigi/output/CertificateIterable.java [new file with mode: 0644]
src/org/cacert/gigi/output/CertificateTable.java [deleted file]
src/org/cacert/gigi/output/CertificateTable.templ [new file with mode: 0644]
src/org/cacert/gigi/pages/account/Certificates.java

index 47da71886c17646598cece3d123445b3bb7e84da..69e35e6a35e51df1c80a1125eacf2f30e162ccac 100644 (file)
@@ -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 (file)
index 0000000..5108e1c
--- /dev/null
@@ -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<String, Object> 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 (file)
index d64fb25..0000000
+++ /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<String, Object> vars) {
-        ResultSet rs = (ResultSet) vars.get(resultSet);
-        try {
-            out.println("<form method=\"post\">");
-            out.println("<table class=\"wrapper dataTable\">");
-            out.println("<thead><tr>");
-            for (String column : columnNames) {
-                out.print("<td>");
-                out.print(l.getTranslation(column));
-                out.println("</td>");
-            }
-            out.print("<td colspan=\"2\">");
-            out.print(l.getTranslation("Comment *"));
-            out.println("</td></tr></thead><tbody>");
-
-            rs.beforeFirst();
-            while (rs.next()) {
-                // out.println(rs.getString("id"));
-                out.print("<tr><td>&nbsp;</td><td>State</td><td>");
-                out.println(rs.getString("CN"));
-                out.print("</td><td><a href='");
-                out.print(Certificates.PATH);
-                out.print("/");
-                out.print(rs.getString("serial"));
-                out.print("'>");
-                out.println(rs.getString("serial"));
-                out.print("</a></td><td>");
-                if (rs.getString("revoked") == null) {
-                    out.println("N/A");
-                } else {
-                    out.println(rs.getString("revoked"));
-                }
-                out.print("</td><td>");
-                out.println(rs.getString("expire"));
-                out.println("</td><td>a</td><td>a</td></tr>");
-            }
-            out.println("</tbody></table>");
-        } 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 (file)
index 0000000..f2870bb
--- /dev/null
@@ -0,0 +1,30 @@
+<form method="post">
+<table class="wrapper dataTable">
+<thead><tr>
+<td><?=_Renew/Revoke/Delete?></td>
+<td><?=_Status?></td>
+<td><?=_Email Address?></td>
+<td><?=_SerialNumber?></td>
+<td><?=_Digest?></td>
+<td><?=_Issued?></td>
+<td><?=_Revoked?></td>
+<td><?=_Expires?></td>
+<td><?=_Login?></td>
+</tr></thead>
+<tbody>
+<? foreach($certs) {?>
+<tr>
+       <td><input type='checkbox' name='certs[]' value='<?=$serial?>'></td>
+       <td><?=$state?></td>
+       <td><?=$CN?></td>
+       <td><a href='/account/certs/<?=$serial?>'><?=$serial?></a></td>
+       <td><?=$digest?></td>
+       <td><?=$issued?></td>
+       <td><?=$revoked?></td>
+       <td><?=$expire?></td>
+       <td>a</td>
+</tr>
+<? } ?>
+</tbody>
+</table>
+</form>
index 37869f4ddf52714cef266ab05e9c750ef6debf76..66f8e90fcfbbe229f2580711180c00426f1da36d 100644 (file)
@@ -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<String, Object> vars = new HashMap<String, Object>();
         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);
     }
 
 }