]> WPIA git - gigi.git/commitdiff
ADD: A testsystem Manager.
authorFelix Dörre <felix@dogcraft.de>
Tue, 4 Nov 2014 14:06:15 +0000 (15:06 +0100)
committerJanis Streib <janis@dogcraft.de>
Wed, 31 Dec 2014 01:35:59 +0000 (02:35 +0100)
src/org/cacert/gigi/Gigi.java
src/org/cacert/gigi/pages/Manager.java [new file with mode: 0644]
src/org/cacert/gigi/pages/Manager.templ [new file with mode: 0644]
src/org/cacert/gigi/pages/ManagerMails.templ [new file with mode: 0644]
src/org/cacert/gigi/pages/Page.java

index 10f0c1c210dfd9cc2d977e0b4e21adaf65c057f4..e454819d7185348f8a37b9413c7cf5ed77d19394 100644 (file)
@@ -29,6 +29,7 @@ import org.cacert.gigi.output.template.Template;
 import org.cacert.gigi.pages.LoginPage;
 import org.cacert.gigi.pages.LogoutPage;
 import org.cacert.gigi.pages.MainPage;
 import org.cacert.gigi.pages.LoginPage;
 import org.cacert.gigi.pages.LogoutPage;
 import org.cacert.gigi.pages.MainPage;
+import org.cacert.gigi.pages.Manager;
 import org.cacert.gigi.pages.Page;
 import org.cacert.gigi.pages.PolicyIndex;
 import org.cacert.gigi.pages.RootCertPage;
 import org.cacert.gigi.pages.Page;
 import org.cacert.gigi.pages.PolicyIndex;
 import org.cacert.gigi.pages.RootCertPage;
@@ -78,10 +79,13 @@ public class Gigi extends HttpServlet {
 
     private KeyStore truststore;
 
 
     private KeyStore truststore;
 
+    private boolean testing;
+
     public Gigi(Properties conf, KeyStore truststore) {
         if (instance != null) {
             throw new IllegalStateException("Multiple Gigi instances!");
         }
     public Gigi(Properties conf, KeyStore truststore) {
         if (instance != null) {
             throw new IllegalStateException("Multiple Gigi instances!");
         }
+        testing = conf.getProperty("testing") != null;
         instance = this;
         DatabaseConnection.init(conf);
         this.truststore = truststore;
         instance = this;
         DatabaseConnection.init(conf);
         this.truststore = truststore;
@@ -112,6 +116,10 @@ public class Gigi extends HttpServlet {
             putPage(TTPAdminPage.PATH + "/*", new TTPAdminPage(), "Admin");
             putPage(CreateOrgPage.DEFAULT_PATH, new CreateOrgPage(), "Admin");
             putPage(ViewOrgPage.DEFAULT_PATH + "/*", new ViewOrgPage(), "Admin");
             putPage(TTPAdminPage.PATH + "/*", new TTPAdminPage(), "Admin");
             putPage(CreateOrgPage.DEFAULT_PATH, new CreateOrgPage(), "Admin");
             putPage(ViewOrgPage.DEFAULT_PATH + "/*", new ViewOrgPage(), "Admin");
+            if (testing) {
+                putPage(Manager.PATH + "/*", Manager.getInstance(), "Admin");
+            }
+
             putPage("/wot/rules", new StaticPage("CAcert Web of Trust Rules", AssurePage.class.getResourceAsStream("Rules.templ")), "CAcert Web of Trust");
             baseTemplate = new Template(Gigi.class.getResource("Gigi.templ"));
             rootMenu = new Menu("Main");
             putPage("/wot/rules", new StaticPage("CAcert Web of Trust Rules", AssurePage.class.getResourceAsStream("Rules.templ")), "CAcert Web of Trust");
             baseTemplate = new Template(Gigi.class.getResource("Gigi.templ"));
             rootMenu = new Menu("Main");
diff --git a/src/org/cacert/gigi/pages/Manager.java b/src/org/cacert/gigi/pages/Manager.java
new file mode 100644 (file)
index 0000000..4697d95
--- /dev/null
@@ -0,0 +1,187 @@
+package org.cacert.gigi.pages;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.lang.reflect.Field;
+import java.sql.Date;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Properties;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.cacert.gigi.GigiApiException;
+import org.cacert.gigi.dbObjects.EmailAddress;
+import org.cacert.gigi.dbObjects.Group;
+import org.cacert.gigi.dbObjects.User;
+import org.cacert.gigi.email.EmailProvider;
+import org.cacert.gigi.localisation.Language;
+import org.cacert.gigi.output.Form;
+import org.cacert.gigi.output.template.IterableDataset;
+import org.cacert.gigi.output.template.Template;
+
+public class Manager extends Page {
+
+    public static final String PATH = "/manager";
+
+    private Manager() {
+        super("Test Manager");
+    }
+
+    private static Manager instance;
+
+    Template t = new Template(Manager.class.getResource("ManagerMails.templ"));
+
+    HashMap<String, LinkedList<String>> emails = new HashMap<>();
+
+    public static Manager getInstance() {
+        if (instance == null) {
+            instance = new Manager();
+        }
+        return instance;
+    }
+
+    public static class MailFetcher extends EmailProvider {
+
+        public MailFetcher(Properties p) {}
+
+        @Override
+        public String checkEmailServer(int forUid, String address) throws IOException {
+            return OK;
+        }
+
+        @Override
+        public synchronized void sendmail(String to, String subject, String message, String from, String replyto, String toname, String fromname, String errorsto, boolean extra) throws IOException {
+            HashMap<String, LinkedList<String>> mails = Manager.getInstance().emails;
+            LinkedList<String> hismails = mails.get(to);
+            if (hismails == null) {
+                mails.put(to, hismails = new LinkedList<>());
+            }
+            hismails.addFirst(subject + "\n" + message);
+        }
+
+    }
+
+    public class ManagementForm extends Form {
+
+        public ManagementForm(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) {
+            getDefaultTemplate().output(out, l, vars);
+        }
+
+    }
+
+    public void batchCreateUsers(String mailPrefix, String domain, int amount, PrintWriter out) {
+
+        try {
+            if (amount > 100) {
+                out.print("100 at most, please.");
+                return;
+            }
+            Field f = EmailAddress.class.getDeclaredField("hash");
+            f.setAccessible(true);
+            for (int i = 0; i < amount; i++) {
+                String email = mailPrefix + i + "@" + domain;
+                User u = new User();
+                u.setFname("Först");
+                u.setMname("Müddle");
+                u.setLname("Läst");
+                u.setSuffix("Süffix");
+                u.setEmail(email);
+                u.setDob(new Date(System.currentTimeMillis() - 366 * 18));
+                u.setPreferredLocale(Locale.ENGLISH);
+                u.insert("xvXV12°§");
+                EmailAddress ea = new EmailAddress(u, email);
+                ea.insert(Language.getInstance(Locale.ENGLISH));
+                String hash = (String) f.get(ea);
+
+                ea.verify(hash);
+            }
+
+            f.setAccessible(false);
+        } catch (ReflectiveOperationException e) {
+            out.println("failed");
+            e.printStackTrace();
+        } catch (GigiApiException e) {
+            out.println("failed: " + e.getMessage());
+            e.printStackTrace();
+        }
+    }
+
+    @Override
+    public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
+        if (req.getParameter("create") != null) {
+            batchCreateUsers(req.getParameter("prefix"), req.getParameter("suffix"), Integer.parseInt(req.getParameter("amount")), resp.getWriter());
+        } else if (req.getParameter("addpriv") != null || req.getParameter("delpriv") != null) {
+            User u = User.getByEmail(req.getParameter("email"));
+            if (u == null) {
+                resp.getWriter().println("User not found.");
+                return;
+            }
+            if (req.getParameter("addpriv") != null) {
+                u.grantGroup(u, Group.getByString(req.getParameter("priv")));
+            } else {
+                u.revokeGroup(u, Group.getByString(req.getParameter("priv")));
+            }
+
+        } else if (req.getParameter("fetch") != null) {
+            String mail = req.getParameter("femail");
+            fetchMails(req, resp, mail);
+        }
+    }
+
+    private void fetchMails(HttpServletRequest req, HttpServletResponse resp, String mail) throws IOException {
+        final LinkedList<String> mails = emails.get(mail);
+        HashMap<String, Object> vars = new HashMap<>();
+        vars.put("mail", mail);
+        if (mails != null) {
+            vars.put("mails", new IterableDataset() {
+
+                Iterator<String> s = mails.iterator();
+
+                @Override
+                public boolean next(Language l, Map<String, Object> vars) {
+                    if ( !s.hasNext())
+                        return false;
+                    vars.put("body", s.next().replaceAll("(https?://\\S+)", "<a href=\"$1\">$1</a>"));
+                    return true;
+                }
+            });
+        }
+        t.output(resp.getWriter(), getLanguage(req), vars);
+        if (mails == null) {
+            resp.getWriter().println("No mails");
+
+        }
+    }
+
+    @Override
+    public boolean needsLogin() {
+        return false;
+    }
+
+    @Override
+    public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
+        String pi = req.getPathInfo().substring(PATH.length());
+        if (pi.length() > 1 && pi.startsWith("/fetch-")) {
+            String mail = pi.substring(pi.indexOf('-', 2) + 1);
+            fetchMails(req, resp, mail);
+            return;
+        }
+
+        new ManagementForm(req).output(resp.getWriter(), getLanguage(req), new HashMap<String, Object>());
+    }
+}
diff --git a/src/org/cacert/gigi/pages/Manager.templ b/src/org/cacert/gigi/pages/Manager.templ
new file mode 100644 (file)
index 0000000..0ab13fa
--- /dev/null
@@ -0,0 +1,32 @@
+<div>
+Batch create users:
+<div>
+  Email: 
+  <input type="text" name="prefix"/> NNN@
+  <input type="text" name="suffix"/>
+</div>
+Amount:  <input type="slider" name="amount"/> <input type="submit" name="create" value="Create Users"/>
+</div>
+<div>
+Add privillege:
+Email: <input type="text" name="email"/> 
+<select name="priv">
+<option>supporter</option>
+<option>arbitrator</option>
+<option>blockedassuree</option>
+<option>blockedassurer</option>
+<option>blockedlogin</option>
+<option>ttp-assurer</option>
+<option>ttp-applicant</option>
+<option>codesigning</option>
+<option>orgassurer</option>
+</select>
+<input type="submit" name="addpriv" value="Grant Privillege"/>
+<input type="submit" name="delpriv" value="Revoke Privillege"/>
+</div>
+
+<div>
+Recive Mails:
+Email: <input type="text" name="femail"/>
+<input type="submit" value="Recieve Mails" name="fetch"/>
+</div>
\ No newline at end of file
diff --git a/src/org/cacert/gigi/pages/ManagerMails.templ b/src/org/cacert/gigi/pages/ManagerMails.templ
new file mode 100644 (file)
index 0000000..6298803
--- /dev/null
@@ -0,0 +1,5 @@
+<a href="/manager/fetch-<?=$mail?>"> Quick Link </a><br/>
+
+<? foreach($mails) { ?>
+<pre><?=$!body?></pre>
+<? } ?>
index 0bd02f789f115022277cd02391f41e676970b1c3..5332fd9e2c0342902314c897f52e51e924581385 100644 (file)
@@ -102,10 +102,6 @@ public abstract class Page implements PermissionCheckable {
         return title;
     }
 
         return title;
     }
 
-    public void setTitle(String title) {
-        this.title = title;
-    }
-
     public static Language getLanguage(ServletRequest req) {
         HttpSession session = ((HttpServletRequest) req).getSession();
         Locale sessval = (Locale) session.getAttribute(Language.SESSION_ATTRIB_NAME);
     public static Language getLanguage(ServletRequest req) {
         HttpSession session = ((HttpServletRequest) req).getSession();
         Locale sessval = (Locale) session.getAttribute(Language.SESSION_ATTRIB_NAME);