From d0d2f3e785adb16514e532da67e0534ab484cc43 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Felix=20D=C3=B6rre?= Date: Tue, 4 Nov 2014 15:06:15 +0100 Subject: [PATCH] ADD: A testsystem Manager. --- src/org/cacert/gigi/Gigi.java | 8 + src/org/cacert/gigi/pages/Manager.java | 187 +++++++++++++++++++ src/org/cacert/gigi/pages/Manager.templ | 32 ++++ src/org/cacert/gigi/pages/ManagerMails.templ | 5 + src/org/cacert/gigi/pages/Page.java | 4 - 5 files changed, 232 insertions(+), 4 deletions(-) create mode 100644 src/org/cacert/gigi/pages/Manager.java create mode 100644 src/org/cacert/gigi/pages/Manager.templ create mode 100644 src/org/cacert/gigi/pages/ManagerMails.templ diff --git a/src/org/cacert/gigi/Gigi.java b/src/org/cacert/gigi/Gigi.java index 10f0c1c2..e454819d 100644 --- a/src/org/cacert/gigi/Gigi.java +++ b/src/org/cacert/gigi/Gigi.java @@ -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.Manager; 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 boolean testing; + 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; @@ -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"); + 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"); diff --git a/src/org/cacert/gigi/pages/Manager.java b/src/org/cacert/gigi/pages/Manager.java new file mode 100644 index 00000000..4697d95f --- /dev/null +++ b/src/org/cacert/gigi/pages/Manager.java @@ -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> 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> mails = Manager.getInstance().emails; + LinkedList 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 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 mails = emails.get(mail); + HashMap vars = new HashMap<>(); + vars.put("mail", mail); + if (mails != null) { + vars.put("mails", new IterableDataset() { + + Iterator s = mails.iterator(); + + @Override + public boolean next(Language l, Map vars) { + if ( !s.hasNext()) + return false; + vars.put("body", s.next().replaceAll("(https?://\\S+)", "$1")); + 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()); + } +} diff --git a/src/org/cacert/gigi/pages/Manager.templ b/src/org/cacert/gigi/pages/Manager.templ new file mode 100644 index 00000000..0ab13fa7 --- /dev/null +++ b/src/org/cacert/gigi/pages/Manager.templ @@ -0,0 +1,32 @@ +
+Batch create users: +
+ Email: + NNN@ + +
+Amount: +
+
+Add privillege: +Email: + + + +
+ +
+Recive Mails: +Email: + +
\ 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 index 00000000..62988033 --- /dev/null +++ b/src/org/cacert/gigi/pages/ManagerMails.templ @@ -0,0 +1,5 @@ + Quick Link
+ + +
+ diff --git a/src/org/cacert/gigi/pages/Page.java b/src/org/cacert/gigi/pages/Page.java index 0bd02f78..5332fd9e 100644 --- a/src/org/cacert/gigi/pages/Page.java +++ b/src/org/cacert/gigi/pages/Page.java @@ -102,10 +102,6 @@ public abstract class Page implements PermissionCheckable { 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); -- 2.39.2