From f6ad4c3784fd9864b52def8a564006d1a459cf3d Mon Sep 17 00:00:00 2001 From: INOPIAE Date: Sat, 30 Jul 2016 22:55:06 +0200 Subject: [PATCH] upd: change the find user routine to search for all email addresses instead of just the primary one fixes issue #99 Change-Id: I3ed6e9007357d2091a832aabbd3c97249af77ff2 --- src/org/cacert/gigi/dbObjects/EmailAddress.java | 17 +++++++++++++++++ .../gigi/pages/admin/support/FindUserForm.java | 14 +++++++------- .../gigi/pages/admin/support/FindUserPage.java | 14 +++++++------- 3 files changed, 31 insertions(+), 14 deletions(-) diff --git a/src/org/cacert/gigi/dbObjects/EmailAddress.java b/src/org/cacert/gigi/dbObjects/EmailAddress.java index 964d1b68..a3208165 100644 --- a/src/org/cacert/gigi/dbObjects/EmailAddress.java +++ b/src/org/cacert/gigi/dbObjects/EmailAddress.java @@ -2,6 +2,7 @@ package org.cacert.gigi.dbObjects; import java.io.IOException; import java.util.Date; +import java.util.LinkedList; import java.util.Locale; import org.cacert.gigi.GigiApiException; @@ -149,4 +150,20 @@ public class EmailAddress implements IdCachable, Verifyable { } return em; } + + public User getOwner() { + return owner; + } + + public static EmailAddress[] findByAllEmail(String mail) { + LinkedList results = new LinkedList(); + try (GigiPreparedStatement ps = new GigiPreparedStatement("SELECT `emails`.`id` FROM `emails` INNER JOIN `users` ON `users`.`id` = `emails`.`memid` INNER JOIN `certOwners` ON `certOwners`.`id` = `users`.`id` WHERE `emails`.`email` LIKE ? AND `emails`.`deleted` IS NULL AND `certOwners`.`deleted` IS NULL ORDER BY `users`.`id`, `emails`.`email` LIMIT 100")) { + ps.setString(1, mail); + GigiResultSet rs = ps.executeQuery(); + while (rs.next()) { + results.add(EmailAddress.getById(rs.getInt(1))); + } + return results.toArray(new EmailAddress[results.size()]); + } + } } diff --git a/src/org/cacert/gigi/pages/admin/support/FindUserForm.java b/src/org/cacert/gigi/pages/admin/support/FindUserForm.java index 3a7bf07c..025e28a8 100644 --- a/src/org/cacert/gigi/pages/admin/support/FindUserForm.java +++ b/src/org/cacert/gigi/pages/admin/support/FindUserForm.java @@ -6,7 +6,7 @@ import java.util.Map; import javax.servlet.http.HttpServletRequest; import org.cacert.gigi.GigiApiException; -import org.cacert.gigi.dbObjects.User; +import org.cacert.gigi.dbObjects.EmailAddress; import org.cacert.gigi.localisation.Language; import org.cacert.gigi.output.template.Form; import org.cacert.gigi.output.template.SprintfCommand; @@ -14,7 +14,7 @@ import org.cacert.gigi.output.template.Template; public class FindUserForm extends Form { - private User users[]; + private EmailAddress emails[]; private static final Template t = new Template(FindDomainForm.class.getResource("FindUserForm.templ")); @@ -24,11 +24,11 @@ public class FindUserForm extends Form { @Override public boolean submit(PrintWriter out, HttpServletRequest req) throws GigiApiException { - User[] users = User.findByEmail(req.getParameter("email")); - if (users.length == 0) { + EmailAddress[] emails = EmailAddress.findByAllEmail(req.getParameter("email")); + if (emails.length == 0) { throw new GigiApiException(SprintfCommand.createSimple("No users found matching {0}", req.getParameter("email"))); } - this.users = users; + this.emails = emails; return true; } @@ -37,8 +37,8 @@ public class FindUserForm extends Form { t.output(out, l, vars); } - public User[] getUsers() { - return users; + public EmailAddress[] getEmails() { + return emails; } } diff --git a/src/org/cacert/gigi/pages/admin/support/FindUserPage.java b/src/org/cacert/gigi/pages/admin/support/FindUserPage.java index 059298f8..02e2889b 100644 --- a/src/org/cacert/gigi/pages/admin/support/FindUserPage.java +++ b/src/org/cacert/gigi/pages/admin/support/FindUserPage.java @@ -8,7 +8,7 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.cacert.gigi.GigiApiException; -import org.cacert.gigi.dbObjects.User; +import org.cacert.gigi.dbObjects.EmailAddress; import org.cacert.gigi.localisation.Language; import org.cacert.gigi.output.template.Form; import org.cacert.gigi.output.template.IterableDataset; @@ -35,9 +35,9 @@ public class FindUserPage extends Page { FindUserForm form = Form.getForm(req, FindUserForm.class); try { form.submit(resp.getWriter(), req); - final User[] users = form.getUsers(); - if (users.length == 1) { - resp.sendRedirect(SupportUserDetailsPage.PATH + users[0].getId()); + final EmailAddress[] emails = form.getEmails(); + if (emails.length == 1) { + resp.sendRedirect(SupportUserDetailsPage.PATH + emails[0].getOwner().getId()); } else { HashMap vars = new HashMap(); vars.put("first", false); @@ -47,11 +47,11 @@ public class FindUserPage extends Page { @Override public boolean next(Language l, Map vars) { - if (i == users.length) { + if (i == emails.length) { return false; } - vars.put("usrid", users[i].getId()); - vars.put("usermail", users[i].getEmail()); + vars.put("usrid", emails[i].getOwner().getId()); + vars.put("usermail", emails[i].getAddress()); i++; return true; } -- 2.39.2