From 33a87a70ba2320451c3b3b1faa9b487dbcbd3540 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Felix=20D=C3=B6rre?= Date: Sun, 15 Nov 2015 00:24:55 +0100 Subject: [PATCH] add: domains for org accounts --- src/org/cacert/gigi/dbObjects/Domain.java | 8 ++-- .../pages/account/domain/DomainAddForm.java | 2 +- src/org/cacert/gigi/pages/orga/EditOrg.templ | 2 + .../gigi/pages/orga/OrgDomainAddForm.java | 39 +++++++++++++++++++ .../gigi/pages/orga/OrgDomainAddForm.templ | 10 +++++ .../cacert/gigi/pages/orga/ViewOrgPage.java | 6 +++ src/org/cacert/gigi/ping/DNSPinger.java | 4 +- src/org/cacert/gigi/ping/DomainPinger.java | 4 +- src/org/cacert/gigi/ping/EmailPinger.java | 11 +++++- src/org/cacert/gigi/ping/HTTPFetch.java | 4 +- src/org/cacert/gigi/ping/SSLPinger.java | 6 +-- tests/org/cacert/gigi/TestDomain.java | 12 +++--- tests/org/cacert/gigi/TestObjectCache.java | 3 +- tests/org/cacert/gigi/TestUser.java | 6 +-- .../TestSEAdminPageUserDomainSearch.java | 4 +- 15 files changed, 93 insertions(+), 28 deletions(-) create mode 100644 src/org/cacert/gigi/pages/orga/OrgDomainAddForm.java create mode 100644 src/org/cacert/gigi/pages/orga/OrgDomainAddForm.templ diff --git a/src/org/cacert/gigi/dbObjects/Domain.java b/src/org/cacert/gigi/dbObjects/Domain.java index bf76d435..b76add29 100644 --- a/src/org/cacert/gigi/dbObjects/Domain.java +++ b/src/org/cacert/gigi/dbObjects/Domain.java @@ -19,7 +19,7 @@ import org.cacert.gigi.util.PublicSuffixes; public class Domain implements IdCachable, Verifyable { - private User owner; + private CertificateOwner owner; private String suffix; @@ -51,9 +51,9 @@ public class Domain implements IdCachable, Verifyable { rs.close(); } - public Domain(User owner, String suffix) throws GigiApiException { + public Domain(User actor, CertificateOwner owner, String suffix) throws GigiApiException { synchronized (Domain.class) { - checkCertifyableDomain(suffix, owner.isInGroup(Group.CODESIGNING)); + checkCertifyableDomain(suffix, actor.isInGroup(Group.CODESIGNING)); this.owner = owner; this.suffix = suffix; insert(); @@ -150,7 +150,7 @@ public class Domain implements IdCachable, Verifyable { ps.execute(); } - public User getOwner() { + public CertificateOwner getOwner() { return owner; } diff --git a/src/org/cacert/gigi/pages/account/domain/DomainAddForm.java b/src/org/cacert/gigi/pages/account/domain/DomainAddForm.java index 5b1c76e1..a0e5685b 100644 --- a/src/org/cacert/gigi/pages/account/domain/DomainAddForm.java +++ b/src/org/cacert/gigi/pages/account/domain/DomainAddForm.java @@ -35,7 +35,7 @@ public class DomainAddForm extends Form { if (parameter.trim().isEmpty()) { throw new GigiApiException("No domain inserted."); } - Domain d = new Domain(target, parameter); + Domain d = new Domain(target, target, parameter); pcf.setTarget(d); pcf.submit(out, req); return true; diff --git a/src/org/cacert/gigi/pages/orga/EditOrg.templ b/src/org/cacert/gigi/pages/orga/EditOrg.templ index bd415d7f..1971bb79 100644 --- a/src/org/cacert/gigi/pages/orga/EditOrg.templ +++ b/src/org/cacert/gigi/pages/orga/EditOrg.templ @@ -1,3 +1,5 @@
+
+ \ No newline at end of file diff --git a/src/org/cacert/gigi/pages/orga/OrgDomainAddForm.java b/src/org/cacert/gigi/pages/orga/OrgDomainAddForm.java new file mode 100644 index 00000000..1b0c00f1 --- /dev/null +++ b/src/org/cacert/gigi/pages/orga/OrgDomainAddForm.java @@ -0,0 +1,39 @@ +package org.cacert.gigi.pages.orga; + +import java.io.PrintWriter; +import java.util.Map; + +import javax.servlet.http.HttpServletRequest; + +import org.cacert.gigi.GigiApiException; +import org.cacert.gigi.dbObjects.CertificateOwner; +import org.cacert.gigi.dbObjects.Domain; +import org.cacert.gigi.dbObjects.Organisation; +import org.cacert.gigi.localisation.Language; +import org.cacert.gigi.output.template.Form; +import org.cacert.gigi.output.template.Template; +import org.cacert.gigi.pages.LoginPage; + +public class OrgDomainAddForm extends Form { + + public static Template t = new Template(OrgDomainAddForm.class.getResource("OrgDomainAddForm.templ")); + + CertificateOwner target; + + public OrgDomainAddForm(HttpServletRequest hsr, Organisation target) { + super(hsr); + this.target = target; + } + + @Override + public boolean submit(PrintWriter out, HttpServletRequest req) throws GigiApiException { + String domain = req.getParameter("domain"); + new Domain(LoginPage.getUser(req), target, domain); + return true; + } + + @Override + protected void outputContent(PrintWriter out, Language l, Map vars) { + t.output(out, l, vars); + } +} diff --git a/src/org/cacert/gigi/pages/orga/OrgDomainAddForm.templ b/src/org/cacert/gigi/pages/orga/OrgDomainAddForm.templ new file mode 100644 index 00000000..c9f70b4e --- /dev/null +++ b/src/org/cacert/gigi/pages/orga/OrgDomainAddForm.templ @@ -0,0 +1,10 @@ + + + + + + + + +
+
diff --git a/src/org/cacert/gigi/pages/orga/ViewOrgPage.java b/src/org/cacert/gigi/pages/orga/ViewOrgPage.java index b2b39f1a..9e470240 100644 --- a/src/org/cacert/gigi/pages/orga/ViewOrgPage.java +++ b/src/org/cacert/gigi/pages/orga/ViewOrgPage.java @@ -47,6 +47,11 @@ public class ViewOrgPage extends Page { resp.sendRedirect(DEFAULT_PATH + "/" + form.getOrganisation().getId()); } return; + } else if (req.getParameter("addDomain") != null) { + if (Form.getForm(req, OrgDomainAddForm.class).submit(resp.getWriter(), req)) { + // resp.sendRedirect(DEFAULT_PATH + "/" + + // form.getOrganisation().getId()); + } } else { if ( !u.isInGroup(CreateOrgPage.ORG_ASSURER)) { resp.sendError(403, "Access denied"); @@ -91,6 +96,7 @@ public class ViewOrgPage extends Page { HashMap vars = new HashMap<>(); vars.put("editForm", new CreateOrgForm(req, o)); vars.put("affForm", new AffiliationForm(req, o)); + vars.put("addDom", new OrgDomainAddForm(req, o)); mainTempl.output(out, lang, vars); } diff --git a/src/org/cacert/gigi/ping/DNSPinger.java b/src/org/cacert/gigi/ping/DNSPinger.java index f2882678..eb6327b3 100644 --- a/src/org/cacert/gigi/ping/DNSPinger.java +++ b/src/org/cacert/gigi/ping/DNSPinger.java @@ -5,14 +5,14 @@ import java.util.List; import javax.naming.NamingException; +import org.cacert.gigi.dbObjects.CertificateOwner; import org.cacert.gigi.dbObjects.Domain; -import org.cacert.gigi.dbObjects.User; import org.cacert.gigi.util.DNSUtil; public class DNSPinger extends DomainPinger { @Override - public void ping(Domain domain, String expToken, User u, int confId) { + public void ping(Domain domain, String expToken, CertificateOwner u, int confId) { String[] tokenParts = expToken.split(":", 2); List nameservers; try { diff --git a/src/org/cacert/gigi/ping/DomainPinger.java b/src/org/cacert/gigi/ping/DomainPinger.java index 68ef91eb..550c86af 100644 --- a/src/org/cacert/gigi/ping/DomainPinger.java +++ b/src/org/cacert/gigi/ping/DomainPinger.java @@ -2,8 +2,8 @@ package org.cacert.gigi.ping; import org.cacert.gigi.database.DatabaseConnection; import org.cacert.gigi.database.GigiPreparedStatement; +import org.cacert.gigi.dbObjects.CertificateOwner; import org.cacert.gigi.dbObjects.Domain; -import org.cacert.gigi.dbObjects.User; public abstract class DomainPinger { @@ -11,7 +11,7 @@ public abstract class DomainPinger { public static final String PING_SUCCEDED = ""; - public abstract void ping(Domain domain, String configuration, User user, int confId); + public abstract void ping(Domain domain, String configuration, CertificateOwner target, int confId); protected static void enterPingResult(int configId, String state, String result, String token) { GigiPreparedStatement enterPingResult = DatabaseConnection.getInstance().prepare("INSERT INTO `domainPinglog` SET `configId`=?, `state`=?::`pingState`, `result`=?, `challenge`=?"); diff --git a/src/org/cacert/gigi/ping/EmailPinger.java b/src/org/cacert/gigi/ping/EmailPinger.java index 9cc9c351..dfb2b74a 100644 --- a/src/org/cacert/gigi/ping/EmailPinger.java +++ b/src/org/cacert/gigi/ping/EmailPinger.java @@ -1,7 +1,9 @@ package org.cacert.gigi.ping; import java.io.IOException; +import java.util.Locale; +import org.cacert.gigi.dbObjects.CertificateOwner; import org.cacert.gigi.dbObjects.Domain; import org.cacert.gigi.dbObjects.User; import org.cacert.gigi.email.MailProbe; @@ -11,12 +13,17 @@ import org.cacert.gigi.util.RandomToken; public class EmailPinger extends DomainPinger { @Override - public void ping(Domain domain, String configuration, User u, int confId) { + public void ping(Domain domain, String configuration, CertificateOwner u, int confId) { String mail = configuration + "@" + domain.getSuffix(); String token = RandomToken.generateToken(16); try { enterPingResult(confId, PING_STILL_PENDING, "", token); - MailProbe.sendMailProbe(Language.getInstance(u.getPreferredLocale()), "domain", domain.getId(), token, mail); + Locale l = Locale.ENGLISH; + if (u instanceof User) { + l = ((User) u).getPreferredLocale(); + // TODO what to do with orgs? + } + MailProbe.sendMailProbe(Language.getInstance(l), "domain", domain.getId(), token, mail); } catch (IOException e) { e.printStackTrace(); updatePingResult(confId, "error", "Mail connection interrupted", token); diff --git a/src/org/cacert/gigi/ping/HTTPFetch.java b/src/org/cacert/gigi/ping/HTTPFetch.java index 03244833..a5755844 100644 --- a/src/org/cacert/gigi/ping/HTTPFetch.java +++ b/src/org/cacert/gigi/ping/HTTPFetch.java @@ -6,13 +6,13 @@ import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; +import org.cacert.gigi.dbObjects.CertificateOwner; import org.cacert.gigi.dbObjects.Domain; -import org.cacert.gigi.dbObjects.User; public class HTTPFetch extends DomainPinger { @Override - public void ping(Domain domain, String expToken, User user, int confId) { + public void ping(Domain domain, String expToken, CertificateOwner user, int confId) { try { String[] tokenParts = expToken.split(":", 2); URL u = new URL("http://" + domain.getSuffix() + "/cacert-" + tokenParts[0] + ".txt"); diff --git a/src/org/cacert/gigi/ping/SSLPinger.java b/src/org/cacert/gigi/ping/SSLPinger.java index 1e34c8b0..6dab6b52 100644 --- a/src/org/cacert/gigi/ping/SSLPinger.java +++ b/src/org/cacert/gigi/ping/SSLPinger.java @@ -27,8 +27,8 @@ import javax.net.ssl.TrustManagerFactory; import javax.security.cert.X509Certificate; import org.cacert.gigi.dbObjects.Certificate; +import org.cacert.gigi.dbObjects.CertificateOwner; import org.cacert.gigi.dbObjects.Domain; -import org.cacert.gigi.dbObjects.User; public class SSLPinger extends DomainPinger { @@ -43,7 +43,7 @@ public class SSLPinger extends DomainPinger { } @Override - public void ping(Domain domain, String configuration, User u, int confId) { + public void ping(Domain domain, String configuration, CertificateOwner u, int confId) { try (SocketChannel sch = SocketChannel.open()) { sch.socket().setSoTimeout(5000); String[] parts = configuration.split(":", 2); @@ -149,7 +149,7 @@ public class SSLPinger extends DomainPinger { } } - private String test(SocketChannel sch, String domain, User subject) { + private String test(SocketChannel sch, String domain, CertificateOwner subject) { try { sch.socket().setSoTimeout(5000); SSLContext sc = SSLContext.getInstance("SSL"); diff --git a/tests/org/cacert/gigi/TestDomain.java b/tests/org/cacert/gigi/TestDomain.java index 6a9599a0..00919975 100644 --- a/tests/org/cacert/gigi/TestDomain.java +++ b/tests/org/cacert/gigi/TestDomain.java @@ -19,7 +19,7 @@ public class TestDomain extends ManagedTest { @Test public void testDomain() throws InterruptedException, GigiApiException { assertEquals(0, us.getDomains().length); - Domain d = new Domain(us, "v1example.org"); + Domain d = new Domain(us, us, "v1example.org"); Domain[] domains = us.getDomains(); assertEquals(1, domains.length); assertEquals("v1example.org", domains[0].getSuffix()); @@ -28,7 +28,7 @@ public class TestDomain extends ManagedTest { assertNotEquals(0, d.getId()); assertEquals(d.getId(), domains[0].getId()); - new Domain(us, "v2-example.org"); + new Domain(us, us, "v2-example.org"); domains = us.getDomains(); assertEquals(2, domains.length); @@ -48,9 +48,9 @@ public class TestDomain extends ManagedTest { @Test public void testDoubleDomain() throws InterruptedException, GigiApiException { - new Domain(us, "dub-example.org"); + new Domain(us, us, "dub-example.org"); try { - new Domain(us, "dub-example.org"); + new Domain(us, us, "dub-example.org"); fail("expected exception"); } catch (GigiApiException e) { // expected @@ -59,9 +59,9 @@ public class TestDomain extends ManagedTest { @Test public void testDoubleDomainDelete() throws InterruptedException, GigiApiException { - Domain d = new Domain(us, "delexample.org"); + Domain d = new Domain(us, us, "delexample.org"); d.delete(); - new Domain(us, "delexample.org"); + new Domain(us, us, "delexample.org"); } } diff --git a/tests/org/cacert/gigi/TestObjectCache.java b/tests/org/cacert/gigi/TestObjectCache.java index b1272a0f..e4dec8a3 100644 --- a/tests/org/cacert/gigi/TestObjectCache.java +++ b/tests/org/cacert/gigi/TestObjectCache.java @@ -34,7 +34,8 @@ public class TestObjectCache extends ManagedTest { @Test public void testDomainCache() throws GigiApiException { - Domain d = new Domain(User.getById(uid), "example.org"); + User u = User.getById(uid); + Domain d = new Domain(u, u, "example.org"); assertThat(d, is(sameInstance(Domain.getById(d.getId())))); assertThat(Domain.getById(d.getId()), is(sameInstance(Domain.getById(d.getId())))); diff --git a/tests/org/cacert/gigi/TestUser.java b/tests/org/cacert/gigi/TestUser.java index 2bf1c941..1124179a 100644 --- a/tests/org/cacert/gigi/TestUser.java +++ b/tests/org/cacert/gigi/TestUser.java @@ -68,9 +68,9 @@ public class TestUser extends ManagedTest { getMailReciever().receive().verify(); new EmailAddress(u, uq + "c@email.org", Locale.ENGLISH); getMailReciever().receive();// no-verify - verify(new Domain(u, uq + "a-testdomain.org")); - verify(new Domain(u, uq + "b-testdomain.org")); - verify(new Domain(u, uq + "c-testdomain.org")); + verify(new Domain(u, u, uq + "a-testdomain.org")); + verify(new Domain(u, u, uq + "b-testdomain.org")); + verify(new Domain(u, u, uq + "c-testdomain.org")); assertEquals(3, u.getEmails().length); assertEquals(3, u.getDomains().length); assertTrue(u.isValidDomain(uq + "a-testdomain.org")); diff --git a/tests/org/cacert/gigi/pages/admin/TestSEAdminPageUserDomainSearch.java b/tests/org/cacert/gigi/pages/admin/TestSEAdminPageUserDomainSearch.java index 81d727bc..966adc17 100644 --- a/tests/org/cacert/gigi/pages/admin/TestSEAdminPageUserDomainSearch.java +++ b/tests/org/cacert/gigi/pages/admin/TestSEAdminPageUserDomainSearch.java @@ -36,7 +36,7 @@ public class TestSEAdminPageUserDomainSearch extends ClientTest { int id = createVerifiedUser("Först", "Secönd", mail, TEST_PASSWORD); User user = User.getById(id); String domainName = createUniqueName() + ".org"; - new Domain(user, domainName); + new Domain(user, user, domainName); URLConnection uc = new URL("https://" + getServerName() + FindDomainPage.PATH).openConnection(); uc.addRequestProperty("Cookie", cookie); String csrf = getCSRF(uc, 0); @@ -57,7 +57,7 @@ public class TestSEAdminPageUserDomainSearch extends ClientTest { int id = createVerifiedUser("Först", "Secönd", mail, TEST_PASSWORD); User user = User.getById(id); String domainName = createUniqueName() + ".org"; - Domain d = new Domain(user, domainName); + Domain d = new Domain(user, user, domainName); URLConnection uc = new URL("https://" + getServerName() + FindDomainPage.PATH).openConnection(); uc.addRequestProperty("Cookie", cookie); String csrf = getCSRF(uc, 0); -- 2.39.2