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();
--- /dev/null
+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;
+ }
+}
+++ /dev/null
-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> </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();
- }
-
- }
-}
--- /dev/null
+<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>
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;
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;
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";
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();
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);
}
}