]> WPIA git - gigi.git/commitdiff
Remove "list all emails from user"-queries.
authorFelix Dörre <felix@dogcraft.de>
Tue, 22 Jul 2014 21:36:47 +0000 (23:36 +0200)
committerFelix Dörre <felix@dogcraft.de>
Tue, 22 Jul 2014 21:49:33 +0000 (23:49 +0200)
src/org/cacert/gigi/User.java
src/org/cacert/gigi/pages/account/IssueCertificateForm.java
src/org/cacert/gigi/pages/account/MailCertificateAdd.java

index c3ca2164d542b8e3bd91d1bf82f983f76152622c..d5b0a9043bce2ff0575a8d48ba9129e05f40a21a 100644 (file)
@@ -219,4 +219,27 @@ public class User {
                return new User(id);
        }
 
+       public EmailAddress[] getEmails() {
+               try {
+                       PreparedStatement ps = DatabaseConnection.getInstance().prepare("SELECT id FROM email WHERE memid=?");
+                       ps.setInt(1, id);
+                       ResultSet rs = ps.executeQuery();
+                       rs.last();
+                       int count = rs.getRow();
+                       EmailAddress[] data = new EmailAddress[count];
+                       rs.beforeFirst();
+                       for (int i = 0; i < data.length; i++) {
+                               if (!rs.next()) {
+                                       throw new Error("Internal sql api violation.");
+                               }
+                               data[i] = EmailAddress.getById(rs.getInt(1));
+                       }
+                       rs.close();
+                       return data;
+               } catch (SQLException e) {
+                       e.printStackTrace();
+               }
+
+               return null;
+       }
 }
index 29565e0ee038a4c5e61de7fa9c80d6f1035e93df..a0dad7fd3753131eca9f003964f52d8103c9d182 100644 (file)
@@ -7,19 +7,18 @@ import java.security.PublicKey;
 import java.security.interfaces.DSAPublicKey;
 import java.security.interfaces.ECPublicKey;
 import java.security.interfaces.RSAPublicKey;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.util.Base64;
 import java.util.HashMap;
 import java.util.Map;
 
 import javax.servlet.http.HttpServletRequest;
+
 import org.cacert.gigi.Certificate;
 import org.cacert.gigi.Digest;
+import org.cacert.gigi.EmailAddress;
 import org.cacert.gigi.Language;
 import org.cacert.gigi.User;
-import org.cacert.gigi.database.DatabaseConnection;
 import org.cacert.gigi.output.Form;
 import org.cacert.gigi.output.template.HashAlgorithms;
 import org.cacert.gigi.output.template.IterableDataset;
@@ -128,33 +127,23 @@ public class IssueCertificateForm extends Form {
                HashMap<String, Object> vars2 = new HashMap<String, Object>(vars);
                vars2.put("CCA", "<a href='/policy/CAcertCommunityAgreement.html'>CCA</a>");
 
-               try {
-                       PreparedStatement ps = DatabaseConnection.getInstance().prepare(
-                               "SELECT `id`,`email` from `email` WHERE `memid`=? AND `deleted`=0");
-                       ps.setInt(1, u.getId());
-                       final ResultSet rs = ps.executeQuery();
-                       vars2.put("emails", new IterableDataset() {
-
-                               @Override
-                               public boolean next(Language l, Map<String, Object> vars) {
-                                       try {
-                                               if (!rs.next()) {
-                                                       return false;
-                                               }
-                                               vars.put("id", rs.getString(1));
-                                               vars.put("value", rs.getString(2));
-                                               return true;
-                                       } catch (SQLException e) {
-                                               e.printStackTrace();
-                                       }
+               final EmailAddress[] ea = u.getEmails();
+               vars2.put("emails", new IterableDataset() {
+                       int count;
+
+                       @Override
+                       public boolean next(Language l, Map<String, Object> vars) {
+                               if (count >= ea.length) {
                                        return false;
                                }
-                       });
-                       vars2.put("hashs", new HashAlgorithms(selectedDigest));
-                       t.output(out, l, vars2);
-               } catch (SQLException e) {
-                       e.printStackTrace();
-               }
+                               vars.put("id", ea[count].getId());
+                               vars.put("value", ea[count].getAddress());
+                               count++;
+                               return true;
+                       }
+               });
+               vars2.put("hashs", new HashAlgorithms(selectedDigest));
+               t.output(out, l, vars2);
        }
 
 }
index 3cbb537d05c16111ddac3c33b11fbc7c9d8c44fb..c25db15f89cf18f426ed9703f682a2740d9b4d47 100644 (file)
@@ -1,21 +1,11 @@
 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.Collections;
 import java.util.HashMap;
-import java.util.Map;
-
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
-import org.cacert.gigi.Language;
-import org.cacert.gigi.User;
-import org.cacert.gigi.database.DatabaseConnection;
-import org.cacert.gigi.output.template.IterableDataset;
-import org.cacert.gigi.pages.LoginPage;
 import org.cacert.gigi.Certificate;
 import org.cacert.gigi.output.Form;
 import org.cacert.gigi.output.template.Template;
@@ -34,34 +24,7 @@ public class MailCertificateAdd extends Page {
                HashMap<String, Object> vars = new HashMap<String, Object>();
                vars.put("CCA", "<a href='/policy/CAcertCommunityAgreement.html'>CCA</a>");
 
-               User u = LoginPage.getUser(req);
-               try {
-                       PreparedStatement ps = DatabaseConnection.getInstance().prepare(
-                               "SELECT `id`,`email` from `email` WHERE `memid`=? AND `deleted`=0");
-                       ps.setInt(1, u.getId());
-                       final ResultSet rs = ps.executeQuery();
-                       vars.put("emails", new IterableDataset() {
-
-                               @Override
-                               public boolean next(Language l, Map<String, Object> vars) {
-                                       try {
-                                               if (!rs.next()) {
-                                                       return false;
-                                               }
-                                               vars.put("id", rs.getString(1));
-                                               vars.put("value", rs.getString(2));
-                                               return true;
-                                       } catch (SQLException e) {
-                                               e.printStackTrace();
-                                       }
-                                       return false;
-                               }
-                       });
-                       t.output(resp.getWriter(), getLanguage(req), vars);
-                       rs.close();
-               } catch (SQLException e) {
-                       e.printStackTrace();
-               }
+               t.output(resp.getWriter(), getLanguage(req), vars);
        }
 
        @Override