]> WPIA git - gigi.git/commitdiff
ADD: "System Admin" (Support) user search forms
authorJanis Streib <janis@dogcraft.de>
Fri, 5 Dec 2014 17:47:58 +0000 (18:47 +0100)
committerJanis Streib <janis@dogcraft.de>
Wed, 31 Dec 2014 01:41:06 +0000 (02:41 +0100)
src/org/cacert/gigi/Gigi.java
src/org/cacert/gigi/dbObjects/User.java
src/org/cacert/gigi/pages/admin/support/FindDomainForm.java [new file with mode: 0644]
src/org/cacert/gigi/pages/admin/support/FindDomainForm.templ [new file with mode: 0644]
src/org/cacert/gigi/pages/admin/support/FindDomainPage.java [new file with mode: 0644]
src/org/cacert/gigi/pages/admin/support/FindUserForm.java [new file with mode: 0644]
src/org/cacert/gigi/pages/admin/support/FindUserForm.templ [new file with mode: 0644]
src/org/cacert/gigi/pages/admin/support/FindUserPage.java [new file with mode: 0644]
src/org/cacert/gigi/pages/admin/support/SupportUserDetailsForm.java [new file with mode: 0644]
src/org/cacert/gigi/pages/admin/support/SupportUserDetailsForm.templ [new file with mode: 0644]
src/org/cacert/gigi/pages/admin/support/SupportUserDetailsPage.java [new file with mode: 0644]

index cf852073ae78465d06cf3de7eb8636a09366be59..634d92145e3c1b4d421c98244a1969006322a0d2 100644 (file)
@@ -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");
index 0b77b97d6e53d76be0cdc2759eff6ae73ae45fe7..75c242f7ae9243df01d4d3bdf822a3e785613d6f 100644 (file)
@@ -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<User> results = new LinkedList<User>();
+        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 (file)
index 0000000..dca6b34
--- /dev/null
@@ -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<String, Object> 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 (file)
index 0000000..a35b188
--- /dev/null
@@ -0,0 +1,13 @@
+<table class="wrapper dataTable">
+  <tbody><tr>
+    <th colspan="2"><?=_Find User by Domain?></th>
+  </tr>
+  <tr>
+    <td><?=_Domain?>:</td>
+    <td><input type="text" value="" name="domain" placeholder="<?=_For search by ID use # prefix e.g. #123456?>"></td>
+  </tr>
+  <tr>
+    <td colspan="2"><input type="submit" value="<?=_Next?>" name="process"></td>
+  </tr>
+</tbody>
+</table>
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 (file)
index 0000000..5662fa1
--- /dev/null
@@ -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 (file)
index 0000000..17799e3
--- /dev/null
@@ -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<String, Object> 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 (file)
index 0000000..b48bf4f
--- /dev/null
@@ -0,0 +1,24 @@
+<? if($usertable) {?>
+<p>Multiple users where found.</p>
+<table class="dataTable wrapper">
+<tr>
+<th>Id</th><th>E-Mail</th></tr>
+<? foreach($usertable) {?>
+       <tr><td><a href="/support/user/<?=$usrid?>"><?=$usrid?></a></td><td><a href="/support/user/<?=$usrid?>"><?=$usermail?></a></td></tr>
+<? } ?>
+</table>
+<? } ?>
+<? if($first) {?>
+<table class="wrapper dataTable">
+  <tbody><tr>
+    <th colspan="2"><?=_Find User?></th>
+  </tr>
+  <tr>
+    <td><?=_Email?>:</td>
+    <td><input name="email" value="" size="30" title="<?=_use % as wildcard?>" placeholder="<?=_use % as wildcard?>" type="text"/></td>
+  </tr>
+  <tr>
+    <td colspan="2"><input name="process" value="<?=_Next?>" type="submit"/></td>
+  </tr>
+</tbody></table>
+<? } ?>
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 (file)
index 0000000..65d164d
--- /dev/null
@@ -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<String, Object> vars = new HashMap<String, Object>();
+        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<String, Object> vars = new HashMap<String, Object>();
+                vars.put("first", false);
+                vars.put("usertable", new IterableDataset() {
+
+                    int i = 0;
+
+                    @Override
+                    public boolean next(Language l, Map<String, Object> 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 (file)
index 0000000..ee34a6b
--- /dev/null
@@ -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<String, Object> 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 (file)
index 0000000..e69de29
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 (file)
index 0000000..9b135e7
--- /dev/null
@@ -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 {}
+
+}