X-Git-Url: https://code.wpia.club/?a=blobdiff_plain;f=util-testing%2Forg%2Fcacert%2Fgigi%2Fpages%2FManager.java;h=4028e0692ce174f9f723e287381f66a8a5cbb280;hb=db51d6dc2bf587d1d41a1cab9c2225004c80a508;hp=4697d95f623bc314408858924dee12c45819415e;hpb=381dec657b91bb1c494c7bf1b4aaf7792c21d0fe;p=gigi.git diff --git a/util-testing/org/cacert/gigi/pages/Manager.java b/util-testing/org/cacert/gigi/pages/Manager.java index 4697d95f..4028e069 100644 --- a/util-testing/org/cacert/gigi/pages/Manager.java +++ b/util-testing/org/cacert/gigi/pages/Manager.java @@ -3,7 +3,14 @@ package org.cacert.gigi.pages; import java.io.IOException; import java.io.PrintWriter; import java.lang.reflect.Field; +import java.security.GeneralSecurityException; +import java.security.KeyPair; +import java.security.KeyPairGenerator; +import java.security.Signature; import java.sql.Date; +import java.util.Base64; +import java.util.Calendar; +import java.util.GregorianCalendar; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedList; @@ -15,21 +22,76 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.cacert.gigi.GigiApiException; +import org.cacert.gigi.crypto.SPKAC; +import org.cacert.gigi.database.DatabaseConnection; +import org.cacert.gigi.database.GigiPreparedStatement; +import org.cacert.gigi.dbObjects.Certificate; +import org.cacert.gigi.dbObjects.Certificate.CertificateStatus; +import org.cacert.gigi.dbObjects.Digest; import org.cacert.gigi.dbObjects.EmailAddress; import org.cacert.gigi.dbObjects.Group; +import org.cacert.gigi.dbObjects.Name; 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; +import org.cacert.gigi.pages.account.certs.CertificateRequest; +import org.cacert.gigi.util.Notary; + +import sun.security.x509.X509Key; public class Manager extends Page { public static final String PATH = "/manager"; + Field f; + private Manager() { super("Test Manager"); + try { + f = EmailAddress.class.getDeclaredField("hash"); + f.setAccessible(true); + } catch (ReflectiveOperationException e) { + throw new Error(e); + } + } + + public User[] getAssurers() { + if (assurers != null) { + return assurers; + } + assurers = new User[10]; + try { + GigiPreparedStatement ps = DatabaseConnection.getInstance().prepare("INSERT INTO `notary` SET `from`=?, `to`=?, `points`=?, `location`=?, `date`=?"); + for (int i = 0; i < assurers.length; i++) { + String mail = "test-assurer" + i + "@example.com"; + User u = User.getByEmail(mail); + if (u == null) { + System.out.println("Creating assurer"); + createUser(mail); + u = User.getByEmail(mail); + passCATS(u); + ps.setInt(1, u.getId()); + ps.setInt(2, u.getId()); + ps.setInt(3, 100); + ps.setString(4, "Manager init code"); + ps.setString(5, "1990-01-01"); + ps.execute(); + } + assurers[i] = u; + + } + } catch (ReflectiveOperationException | GigiApiException e) { + e.printStackTrace(); + } + return assurers; + } + + private void passCATS(User u) { + GigiPreparedStatement ps = DatabaseConnection.getInstance().prepare("INSERT INTO cats_passed SET user_id=?, variant_id=3"); + ps.setInt(1, u.getId()); + ps.execute(); } private static Manager instance; @@ -66,24 +128,6 @@ public class Manager extends Page { } - 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 { @@ -91,27 +135,10 @@ public class Manager extends Page { 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); + createUser(email); } - - f.setAccessible(false); } catch (ReflectiveOperationException e) { out.println("failed"); e.printStackTrace(); @@ -121,10 +148,29 @@ public class Manager extends Page { } } + private void createUser(String email) throws GigiApiException, IllegalAccessException { + User u = new User(); + u.setName(new Name("Först", "Läst", "Müddle", "Süffix")); + u.setEmail(email); + Calendar gc = GregorianCalendar.getInstance(); + gc.set(1990, 0, 1); + u.setDoB(new Date(gc.getTime().getTime())); + 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); + } + + User[] assurers; + @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()); + resp.getWriter().println("User batch created."); } else if (req.getParameter("addpriv") != null || req.getParameter("delpriv") != null) { User u = User.getByEmail(req.getParameter("email")); if (u == null) { @@ -133,13 +179,86 @@ public class Manager extends Page { } if (req.getParameter("addpriv") != null) { u.grantGroup(u, Group.getByString(req.getParameter("priv"))); + resp.getWriter().println("Privilege granted"); } else { u.revokeGroup(u, Group.getByString(req.getParameter("priv"))); + resp.getWriter().println("Privilege revoked"); } - } else if (req.getParameter("fetch") != null) { String mail = req.getParameter("femail"); fetchMails(req, resp, mail); + } else if (req.getParameter("cats") != null) { + String mail = req.getParameter("catsEmail"); + User byEmail = User.getByEmail(mail); + if (byEmail == null) { + resp.getWriter().println("User not found."); + return; + } + passCATS(byEmail); + resp.getWriter().println("User has been passed CATS"); + } else if (req.getParameter("assure") != null) { + String mail = req.getParameter("assureEmail"); + User byEmail = User.getByEmail(mail); + if (byEmail == null) { + resp.getWriter().println("User not found."); + return; + } + try { + for (int i = 0; i < getAssurers().length; i++) { + Notary.assure(getAssurers()[i], byEmail, byEmail.getName(), byEmail.getDoB(), 10, "Testmanager Assure up code", "2014-11-06"); + } + } catch (GigiApiException e) { + throw new Error(e); + } + resp.getWriter().println("User has been assured."); + } else if (req.getParameter("addEmail") != null) { + User u = User.getByEmail(req.getParameter("addEmailEmail")); + EmailAddress ea = new EmailAddress(u, req.getParameter("addEmailNew")); + try { + ea.insert(Language.getInstance(Locale.ENGLISH)); + String hash = (String) f.get(ea); + ea.verify(hash); + resp.getWriter().println("Email added and verified"); + } catch (IllegalArgumentException e) { + e.printStackTrace(); + resp.getWriter().println("An internal error occured."); + } catch (IllegalAccessException e) { + e.printStackTrace(); + resp.getWriter().println("An internal error occured."); + } catch (GigiApiException e) { + e.format(resp.getWriter(), Language.getInstance(Locale.ENGLISH)); + } + } else if (req.getParameter("addCert") != null) { + User u = User.getByEmail(req.getParameter("addCertEmail")); + try { + KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA"); + kpg.initialize(4096); + KeyPair kp = kpg.generateKeyPair(); + SPKAC s = new SPKAC((X509Key) kp.getPublic(), "challange"); + Signature sign = Signature.getInstance("SHA512withRSA"); + sign.initSign(kp.getPrivate()); + + byte[] res = s.getEncoded(sign); + + CertificateRequest cr = new CertificateRequest(u, Base64.getEncoder().encodeToString(res), "challange"); + cr.update(CertificateRequest.DEFAULT_CN, Digest.SHA512.toString(), "client", null, "", "email:" + u.getEmail(), resp.getWriter(), req); + Certificate draft = cr.draft(); + draft.issue(null, "2y").waitFor(10000); + if (draft.getStatus() == CertificateStatus.ISSUED) { + resp.getWriter().println("added certificate"); + } else { + resp.getWriter().println("signer failed"); + } + } catch (GeneralSecurityException e1) { + e1.printStackTrace(); + resp.getWriter().println("error"); + } catch (GigiApiException e) { + e.format(resp.getWriter(), Language.getInstance(Locale.ENGLISH)); + } catch (InterruptedException e) { + e.printStackTrace(); + resp.getWriter().println("interrupted"); + } + } } @@ -154,8 +273,9 @@ public class Manager extends Page { @Override public boolean next(Language l, Map vars) { - if ( !s.hasNext()) + if ( !s.hasNext()) { return false; + } vars.put("body", s.next().replaceAll("(https?://\\S+)", "$1")); return true; } @@ -168,6 +288,8 @@ public class Manager extends Page { } } + private Template form = new Template(Manager.class.getResource("Manager.templ")); + @Override public boolean needsLogin() { return false; @@ -175,6 +297,7 @@ public class Manager extends Page { @Override public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { + getAssurers(); String pi = req.getPathInfo().substring(PATH.length()); if (pi.length() > 1 && pi.startsWith("/fetch-")) { String mail = pi.substring(pi.indexOf('-', 2) + 1); @@ -182,6 +305,6 @@ public class Manager extends Page { return; } - new ManagementForm(req).output(resp.getWriter(), getLanguage(req), new HashMap()); + form.output(resp.getWriter(), getLanguage(req), new HashMap()); } }