From: Janis Streib Date: Fri, 5 Dec 2014 17:47:58 +0000 (+0100) Subject: ADD: "System Admin" (Support) user search forms X-Git-Url: https://code.wpia.club/?p=gigi.git;a=commitdiff_plain;h=c90d9f8e3d962c3bd25c720c4eb04631af8665ed ADD: "System Admin" (Support) user search forms --- diff --git a/src/org/cacert/gigi/Gigi.java b/src/org/cacert/gigi/Gigi.java index cf852073..634d9214 100644 --- a/src/org/cacert/gigi/Gigi.java +++ b/src/org/cacert/gigi/Gigi.java @@ -24,9 +24,9 @@ import org.cacert.gigi.localisation.Language; import org.cacert.gigi.output.Menu; import org.cacert.gigi.output.PageMenuItem; import org.cacert.gigi.output.SimpleMenuItem; +import org.cacert.gigi.output.template.Form.CSRFException; import org.cacert.gigi.output.template.Outputable; import org.cacert.gigi.output.template.Template; -import org.cacert.gigi.output.template.Form.CSRFException; import org.cacert.gigi.pages.LoginPage; import org.cacert.gigi.pages.LogoutPage; import org.cacert.gigi.pages.MainPage; @@ -43,6 +43,9 @@ import org.cacert.gigi.pages.account.certs.Certificates; import org.cacert.gigi.pages.account.domain.DomainOverview; import org.cacert.gigi.pages.account.mail.MailOverview; import org.cacert.gigi.pages.admin.TTPAdminPage; +import org.cacert.gigi.pages.admin.support.FindDomainPage; +import org.cacert.gigi.pages.admin.support.FindUserPage; +import org.cacert.gigi.pages.admin.support.SupportUserDetailsPage; import org.cacert.gigi.pages.error.AccessDenied; import org.cacert.gigi.pages.error.PageNotFound; import org.cacert.gigi.pages.main.RegisterPage; @@ -129,6 +132,9 @@ public class Gigi extends HttpServlet { putPage(TTPAdminPage.PATH + "/*", new TTPAdminPage(), "Admin"); putPage(CreateOrgPage.DEFAULT_PATH, new CreateOrgPage(), "Organisation Admin"); putPage(ViewOrgPage.DEFAULT_PATH + "/*", new ViewOrgPage(), "Organisation Admin"); + putPage(FindDomainPage.PATH, new FindDomainPage("Find Domain"), "System Admin"); + putPage(FindUserPage.PATH, new FindUserPage("Find User"), "System Admin"); + putPage(SupportUserDetailsPage.PATH + "*", new SupportUserDetailsPage("Support: User Details"), null); if (testing) { try { Class manager = Class.forName("org.cacert.gigi.pages.Manager"); diff --git a/src/org/cacert/gigi/dbObjects/User.java b/src/org/cacert/gigi/dbObjects/User.java index 0b77b97d..75c242f7 100644 --- a/src/org/cacert/gigi/dbObjects/User.java +++ b/src/org/cacert/gigi/dbObjects/User.java @@ -5,6 +5,7 @@ import java.util.ArrayList; import java.util.Calendar; import java.util.Collections; import java.util.HashSet; +import java.util.LinkedList; import java.util.List; import java.util.Locale; import java.util.Set; @@ -443,6 +444,18 @@ public class User extends CertificateOwner { return User.getById(rs.getInt(1)); } + public static User[] findByEmail(String mail) { + LinkedList results = new LinkedList(); + GigiPreparedStatement ps = DatabaseConnection.getInstance().prepare("SELECT users.id FROM users inner join certOwners on certOwners.id=users.id WHERE users.email LIKE ? AND deleted is null GROUP BY users.id ASC LIMIT 100"); + ps.setString(1, mail); + GigiResultSet rs = ps.executeQuery(); + while (rs.next()) { + results.add(User.getById(rs.getInt(1))); + System.out.println("Found user"); + } + return results.toArray(new User[results.size()]); + } + public boolean canIssue(CertificateProfile p) { switch (p.getCAId()) { case 0: @@ -458,4 +471,5 @@ public class User extends CertificateOwner { return false; } } + } diff --git a/src/org/cacert/gigi/pages/admin/support/FindDomainForm.java b/src/org/cacert/gigi/pages/admin/support/FindDomainForm.java new file mode 100644 index 00000000..dca6b34d --- /dev/null +++ b/src/org/cacert/gigi/pages/admin/support/FindDomainForm.java @@ -0,0 +1,55 @@ +package org.cacert.gigi.pages.admin.support; + +import java.io.PrintWriter; +import java.util.Map; + +import javax.servlet.http.HttpServletRequest; + +import org.cacert.gigi.GigiApiException; +import org.cacert.gigi.dbObjects.Domain; +import org.cacert.gigi.localisation.Language; +import org.cacert.gigi.output.template.Form; +import org.cacert.gigi.output.template.Template; + +public class FindDomainForm extends Form { + + private int userId = -1; + + private static Template t; + static { + t = new Template(FindDomainForm.class.getResource("FindDomainForm.templ")); + } + + public FindDomainForm(HttpServletRequest hsr) { + super(hsr); + } + + @Override + public boolean submit(PrintWriter out, HttpServletRequest req) throws GigiApiException { + String request = req.getParameter("domain"); + if (request.matches("#[0-9]+")) { + try { + Domain domainById = Domain.getById(Integer.parseInt(request.substring(1))); + userId = domainById.getOwner().getId(); + } catch (IllegalArgumentException e) { + throw (new GigiApiException("No personal domains found matching the id " + request.substring(1) + ".")); + } + } else { + userId = Domain.searchUserIdByDomain(request); + } + if (userId == -1) { + throw (new GigiApiException("No personal domains found matching " + request)); + } + return true; + } + + @Override + protected void outputContent(PrintWriter out, Language l, Map vars) { + t.output(out, l, vars); + } + + public int getUserId() { + return userId; + } + +} diff --git a/src/org/cacert/gigi/pages/admin/support/FindDomainForm.templ b/src/org/cacert/gigi/pages/admin/support/FindDomainForm.templ new file mode 100644 index 00000000..a35b1880 --- /dev/null +++ b/src/org/cacert/gigi/pages/admin/support/FindDomainForm.templ @@ -0,0 +1,13 @@ + + + + + + + + + + + + +
:
diff --git a/src/org/cacert/gigi/pages/admin/support/FindDomainPage.java b/src/org/cacert/gigi/pages/admin/support/FindDomainPage.java new file mode 100644 index 00000000..5662fa1d --- /dev/null +++ b/src/org/cacert/gigi/pages/admin/support/FindDomainPage.java @@ -0,0 +1,18 @@ +package org.cacert.gigi.pages.admin.support; + +import org.cacert.gigi.output.template.Form; +import org.cacert.gigi.pages.OneFormPage; + +public class FindDomainPage extends OneFormPage { + + public static final String PATH = "/support/find/domain"; + + public FindDomainPage(String title) { + super(title, FindDomainForm.class); + } + + @Override + public String getSuccessPath(Form f) { + return SupportUserDetailsPage.PATH + ((FindDomainForm) f).getUserId(); + } +} diff --git a/src/org/cacert/gigi/pages/admin/support/FindUserForm.java b/src/org/cacert/gigi/pages/admin/support/FindUserForm.java new file mode 100644 index 00000000..17799e3b --- /dev/null +++ b/src/org/cacert/gigi/pages/admin/support/FindUserForm.java @@ -0,0 +1,46 @@ +package org.cacert.gigi.pages.admin.support; + +import java.io.PrintWriter; +import java.util.Map; + +import javax.servlet.http.HttpServletRequest; + +import org.cacert.gigi.GigiApiException; +import org.cacert.gigi.dbObjects.User; +import org.cacert.gigi.localisation.Language; +import org.cacert.gigi.output.template.Form; +import org.cacert.gigi.output.template.Template; + +public class FindUserForm extends Form { + + private User users[]; + + private static Template t; + static { + t = new Template(FindDomainForm.class.getResource("FindUserForm.templ")); + } + + public FindUserForm(HttpServletRequest hsr) { + super(hsr); + } + + @Override + public boolean submit(PrintWriter out, HttpServletRequest req) throws GigiApiException { + User[] users = User.findByEmail(req.getParameter("email")); + if (users.length == 0) { + throw (new GigiApiException("No users found matching " + req.getParameter("email"))); + } + this.users = users; + return true; + } + + @Override + protected void outputContent(PrintWriter out, Language l, Map vars) { + t.output(out, l, vars); + } + + public User[] getUsers() { + return users; + } + +} diff --git a/src/org/cacert/gigi/pages/admin/support/FindUserForm.templ b/src/org/cacert/gigi/pages/admin/support/FindUserForm.templ new file mode 100644 index 00000000..b48bf4fd --- /dev/null +++ b/src/org/cacert/gigi/pages/admin/support/FindUserForm.templ @@ -0,0 +1,24 @@ + +

Multiple users where found.

+ + + + + + +
IdE-Mail
+ + + + + + + + + + + + + +
:
+ diff --git a/src/org/cacert/gigi/pages/admin/support/FindUserPage.java b/src/org/cacert/gigi/pages/admin/support/FindUserPage.java new file mode 100644 index 00000000..65d164d4 --- /dev/null +++ b/src/org/cacert/gigi/pages/admin/support/FindUserPage.java @@ -0,0 +1,66 @@ +package org.cacert.gigi.pages.admin.support; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +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.localisation.Language; +import org.cacert.gigi.output.template.Form; +import org.cacert.gigi.output.template.IterableDataset; +import org.cacert.gigi.pages.Page; + +public class FindUserPage extends Page { + + public static final String PATH = "/support/find/user"; + + public FindUserPage(String title) { + super(title); + } + + @Override + public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { + HashMap vars = new HashMap(); + vars.put("first", true); + new FindUserForm(req).output(resp.getWriter(), Page.getLanguage(req), vars); + } + + @Override + public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException { + 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()); + } else { + HashMap vars = new HashMap(); + vars.put("first", false); + vars.put("usertable", new IterableDataset() { + + int i = 0; + + @Override + public boolean next(Language l, Map vars) { + if (i == users.length) { + return false; + } + vars.put("usrid", users[i].getId()); + vars.put("usermail", users[i].getEmail()); + i++; + return true; + } + }); + form.output(resp.getWriter(), getLanguage(req), vars); + } + } catch (GigiApiException e) { + e.format(resp.getWriter(), Page.getLanguage(req)); + doGet(req, resp); + } + } + +} diff --git a/src/org/cacert/gigi/pages/admin/support/SupportUserDetailsForm.java b/src/org/cacert/gigi/pages/admin/support/SupportUserDetailsForm.java new file mode 100644 index 00000000..ee34a6b2 --- /dev/null +++ b/src/org/cacert/gigi/pages/admin/support/SupportUserDetailsForm.java @@ -0,0 +1,26 @@ +package org.cacert.gigi.pages.admin.support; + +import java.io.PrintWriter; +import java.util.Map; + +import javax.servlet.http.HttpServletRequest; + +import org.cacert.gigi.GigiApiException; +import org.cacert.gigi.localisation.Language; +import org.cacert.gigi.output.template.Form; + +public class SupportUserDetailsForm extends Form { + + public SupportUserDetailsForm(HttpServletRequest hsr) { + super(hsr); + } + + @Override + public boolean submit(PrintWriter out, HttpServletRequest req) throws GigiApiException { + return false; + } + + @Override + protected void outputContent(PrintWriter out, Language l, Map vars) {} + +} diff --git a/src/org/cacert/gigi/pages/admin/support/SupportUserDetailsForm.templ b/src/org/cacert/gigi/pages/admin/support/SupportUserDetailsForm.templ new file mode 100644 index 00000000..e69de29b diff --git a/src/org/cacert/gigi/pages/admin/support/SupportUserDetailsPage.java b/src/org/cacert/gigi/pages/admin/support/SupportUserDetailsPage.java new file mode 100644 index 00000000..9b135e74 --- /dev/null +++ b/src/org/cacert/gigi/pages/admin/support/SupportUserDetailsPage.java @@ -0,0 +1,21 @@ +package org.cacert.gigi.pages.admin.support; + +import java.io.IOException; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.cacert.gigi.pages.Page; + +public class SupportUserDetailsPage extends Page { + + public static final String PATH = "/support/user/"; + + public SupportUserDetailsPage(String title) { + super(title); + } + + @Override + public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {} + +}