From 1198a01aa75975da0af93ec8928ce416e4da323b Mon Sep 17 00:00:00 2001 From: INOPIAE Date: Thu, 16 Jun 2016 16:06:01 +0200 Subject: [PATCH] Adding new fields to organisation account split update function into update certificate data which need to start the revoking of certificates and the update organisation data Change-Id: I813dc3a285d721ef19894e58843b0bd0bac7a565 --- .../cacert/gigi/dbObjects/Organisation.java | 45 +++++++++++++--- .../cacert/gigi/pages/orga/CreateOrgForm.java | 54 ++++++++++++++++--- .../gigi/pages/orga/CreateOrgForm.templ | 45 ++++++++++++---- .../cacert/gigi/pages/orga/ViewOrgPage.java | 5 +- tests/org/cacert/gigi/TestOrga.java | 2 +- .../org/cacert/gigi/api/ImportCATSResult.java | 2 +- tests/org/cacert/gigi/api/IssueCert.java | 2 +- .../cacert/gigi/pages/orga/TestOrgDomain.java | 2 +- .../gigi/pages/orga/TestOrgaManagement.java | 10 ++-- 9 files changed, 132 insertions(+), 35 deletions(-) diff --git a/src/org/cacert/gigi/dbObjects/Organisation.java b/src/org/cacert/gigi/dbObjects/Organisation.java index 36119424..101c973e 100644 --- a/src/org/cacert/gigi/dbObjects/Organisation.java +++ b/src/org/cacert/gigi/dbObjects/Organisation.java @@ -56,7 +56,11 @@ public class Organisation extends CertificateOwner { private String email; - public Organisation(String name, String state, String province, String city, String email, User creator) throws GigiApiException { + private String optionalName; + + private String postalAddress; + + public Organisation(String name, String state, String province, String city, String email, String optionalName, String postalAddress, User creator) throws GigiApiException { if ( !creator.isInGroup(Group.ORGASSURER)) { throw new GigiApiException("Only org-assurers may create organisations."); } @@ -65,15 +69,19 @@ public class Organisation extends CertificateOwner { this.province = province; this.city = city; this.email = email; + this.optionalName = optionalName; + this.postalAddress = postalAddress; int id = getId(); - try (GigiPreparedStatement ps = new GigiPreparedStatement("INSERT INTO organisations SET id=?, name=?, state=?, province=?, city=?, contactEmail=?, creator=?")) { + try (GigiPreparedStatement ps = new GigiPreparedStatement("INSERT INTO organisations SET id=?, name=?, state=?, province=?, city=?, contactEmail=?, optional_name=?, postal_address=?, creator=?")) { ps.setInt(1, id); ps.setString(2, name); ps.setString(3, state); ps.setString(4, province); ps.setString(5, city); ps.setString(6, email); - ps.setInt(7, creator.getId()); + ps.setString(7, optionalName); + ps.setString(8, postalAddress); + ps.setInt(9, creator.getId()); synchronized (Organisation.class) { ps.execute(); } @@ -87,6 +95,8 @@ public class Organisation extends CertificateOwner { province = rs.getString("province"); city = rs.getString("city"); email = rs.getString("contactEmail"); + optionalName = rs.getString("optional_name"); + postalAddress = rs.getString("postal_address"); } public String getName() { @@ -109,6 +119,14 @@ public class Organisation extends CertificateOwner { return email; } + public String getOptionalName() { + return optionalName; + } + + public String getPostalAddress() { + return postalAddress; + } + public static synchronized Organisation getById(int id) { CertificateOwner co = CertificateOwner.getById(id); if (co instanceof Organisation) { @@ -183,28 +201,39 @@ public class Organisation extends CertificateOwner { } } - public void update(String o, String c, String st, String l, String mail) { + public void updateCertData(String o, String c, String st, String l) { for (Certificate cert : getCertificates(false)) { if (cert.getStatus() == CertificateStatus.ISSUED) { cert.revoke(); } } - try (GigiPreparedStatement ps = new GigiPreparedStatement("UPDATE `organisations` SET `name`=?, `state`=?, `province`=?, `city`=?, `contactEmail`=? WHERE `id`=?")) { + try (GigiPreparedStatement ps = new GigiPreparedStatement("UPDATE `organisations` SET `name`=?, `state`=?, `province`=?, `city`=? WHERE `id`=?")) { ps.setString(1, o); ps.setString(2, c); ps.setString(3, st); ps.setString(4, l); - ps.setString(5, mail); - ps.setInt(6, getId()); + ps.setInt(5, getId()); ps.executeUpdate(); } - email = mail; name = o; state = c; province = st; city = l; } + public void updateOrgData(String mail, String o_name, String p_address) { + try (GigiPreparedStatement ps = new GigiPreparedStatement("UPDATE `organisations` SET `contactEmail`=?, `optional_name`=?, `postal_address`=? WHERE `id`=?")) { + ps.setString(1, mail); + ps.setString(2, o_name); + ps.setString(3, p_address); + ps.setInt(4, getId()); + ps.executeUpdate(); + } + email = mail; + optionalName = o_name; + postalAddress = p_address; + } + public boolean isMaster(User u) { for (Affiliation i : getAllAdmins()) { if (i.isMaster() && i.getTarget() == u) { diff --git a/src/org/cacert/gigi/pages/orga/CreateOrgForm.java b/src/org/cacert/gigi/pages/orga/CreateOrgForm.java index 32a9ceb7..5e6b35a2 100644 --- a/src/org/cacert/gigi/pages/orga/CreateOrgForm.java +++ b/src/org/cacert/gigi/pages/orga/CreateOrgForm.java @@ -28,6 +28,10 @@ public class CreateOrgForm extends Form { private String email = ""; + private String optionalName = ""; + + private String postalAddress = ""; + private boolean isEdit = false; public CreateOrgForm(HttpServletRequest hsr) { @@ -43,22 +47,54 @@ public class CreateOrgForm extends Form { st = t.getProvince(); l = t.getCity(); email = t.getContactEmail(); + optionalName = t.getOptionalName(); + postalAddress = t.getPostalAddress(); } @Override public boolean submit(PrintWriter out, HttpServletRequest req) throws GigiApiException { + String action = req.getParameter("action"); + if (action == null) { + return false; + } + if (action.equals("new")) { + o = req.getParameter("O"); + c = req.getParameter("C"); + st = req.getParameter("ST"); + l = req.getParameter("L"); + email = req.getParameter("contact"); + optionalName = req.getParameter("optionalName"); + postalAddress = req.getParameter("postalAddress"); + + Organisation ne = new Organisation(o, c, st, l, email, optionalName, postalAddress, LoginPage.getUser(req)); + result = ne; + return true; + } else if (action.equals("updateOrganisationData")) { + updateOrganisationData(out, req); + return true; + } else if (action.equals("updateCertificateData")) { + updateCertificateData(out, req); + return true; + } + + return false; + } + + private void updateOrganisationData(PrintWriter out, HttpServletRequest req) throws GigiApiException { + email = req.getParameter("contact"); + optionalName = req.getParameter("optionalName"); + postalAddress = req.getParameter("postalAddress"); + + result.updateOrgData(email, optionalName, postalAddress); + } + + private void updateCertificateData(PrintWriter out, HttpServletRequest req) throws GigiApiException { o = req.getParameter("O"); c = req.getParameter("C"); st = req.getParameter("ST"); l = req.getParameter("L"); - email = req.getParameter("contact"); - if (result != null) { - result.update(o, c, st, l, email); - return true; - } - Organisation ne = new Organisation(o, c, st, l, email, LoginPage.getUser(req)); - result = ne; - return true; + + result.updateCertData(o, c, st, l); } public Organisation getResult() { @@ -72,6 +108,8 @@ public class CreateOrgForm extends Form { vars.put("ST", st); vars.put("L", this.l); vars.put("email", email); + vars.put("optionalName", optionalName); + vars.put("postalAddress", postalAddress); if (isEdit) { vars.put("edit", true); } diff --git a/src/org/cacert/gigi/pages/orga/CreateOrgForm.templ b/src/org/cacert/gigi/pages/orga/CreateOrgForm.templ index b858a623..b050f23d 100644 --- a/src/org/cacert/gigi/pages/orga/CreateOrgForm.templ +++ b/src/org/cacert/gigi/pages/orga/CreateOrgForm.templ @@ -8,12 +8,13 @@ - : - + - : - + : + + + : @@ -26,20 +27,46 @@ : - 'ISO code!'')?> + 'ISO code!'')?> + + + + + + + + + + + + + + : + + + + + + : + + + + : + + : - - + - + - + + diff --git a/src/org/cacert/gigi/pages/orga/ViewOrgPage.java b/src/org/cacert/gigi/pages/orga/ViewOrgPage.java index c8259412..49833e57 100644 --- a/src/org/cacert/gigi/pages/orga/ViewOrgPage.java +++ b/src/org/cacert/gigi/pages/orga/ViewOrgPage.java @@ -65,7 +65,10 @@ public class ViewOrgPage extends Page { resp.sendRedirect(DEFAULT_PATH + "/" + form.getTarget().getId()); } } else { - Form.getForm(req, CreateOrgForm.class).submit(resp.getWriter(), req); + CreateOrgForm form = Form.getForm(req, CreateOrgForm.class); + if (form.submit(resp.getWriter(), req)) { + resp.sendRedirect(DEFAULT_PATH + "/" + form.getResult().getId()); + } } } diff --git a/tests/org/cacert/gigi/TestOrga.java b/tests/org/cacert/gigi/TestOrga.java index bf4f9def..91afa2e7 100644 --- a/tests/org/cacert/gigi/TestOrga.java +++ b/tests/org/cacert/gigi/TestOrga.java @@ -22,7 +22,7 @@ public class TestOrga extends ManagedTest { u3.grantGroup(u1, Group.ORGASSURER); User u4 = User.getById(createAssuranceUser("fn", "ln", createUniqueName() + "@email.org", TEST_PASSWORD)); u4.grantGroup(u1, Group.ORGASSURER); - Organisation o1 = new Organisation("name", "ST", "prov", "city", "email", u1); + Organisation o1 = new Organisation("name", "ST", "prov", "city", "email", "optional name", "postal address", u1); assertEquals(0, o1.getAllAdmins().size()); o1.addAdmin(u2, u1, false); assertEquals(1, o1.getAllAdmins().size()); diff --git a/tests/org/cacert/gigi/api/ImportCATSResult.java b/tests/org/cacert/gigi/api/ImportCATSResult.java index 4a90500d..db19380d 100644 --- a/tests/org/cacert/gigi/api/ImportCATSResult.java +++ b/tests/org/cacert/gigi/api/ImportCATSResult.java @@ -42,7 +42,7 @@ public class ImportCATSResult extends ClientTest { grant(u.getEmail(), Group.ORGASSURER); clearCaches(); u = User.getById(u.getId()); - Organisation o = new Organisation(Organisation.SELF_ORG_NAME, "NA", "NA", "NA", "contact@cacert.org", u); + Organisation o = new Organisation(Organisation.SELF_ORG_NAME, "NA", "NA", "NA", "contact@cacert.org", "", "", u); assertTrue(o.isSelfOrganisation()); KeyPair kp = generateKeypair(); String key1 = generatePEMCSR(kp, "EMAIL=cats@cacert.org"); diff --git a/tests/org/cacert/gigi/api/IssueCert.java b/tests/org/cacert/gigi/api/IssueCert.java index b37626ce..ca4b9036 100644 --- a/tests/org/cacert/gigi/api/IssueCert.java +++ b/tests/org/cacert/gigi/api/IssueCert.java @@ -88,7 +88,7 @@ public class IssueCert extends ClientTest { makeAssurer(id); u.grantGroup(u, Group.ORGASSURER); - Organisation o1 = new Organisation("name", "st", "pr", "st", "test@mail", u); + Organisation o1 = new Organisation("name", "st", "pr", "st", "test@mail", "", "", u); o1.addAdmin(u, u, false); String testdom = createUniqueName() + "-example.com"; Domain d2 = new Domain(u, o1, testdom); diff --git a/tests/org/cacert/gigi/pages/orga/TestOrgDomain.java b/tests/org/cacert/gigi/pages/orga/TestOrgDomain.java index 15eec419..806ec964 100644 --- a/tests/org/cacert/gigi/pages/orga/TestOrgDomain.java +++ b/tests/org/cacert/gigi/pages/orga/TestOrgDomain.java @@ -77,7 +77,7 @@ public class TestOrgDomain extends ClientTest { } private Organisation createUniqueOrg() throws GigiApiException { - Organisation o1 = new Organisation(createUniqueName(), "st", "pr", "city", "test@example.com", u); + Organisation o1 = new Organisation(createUniqueName(), "st", "pr", "city", "test@example.com", "", "", u); return o1; } diff --git a/tests/org/cacert/gigi/pages/orga/TestOrgaManagement.java b/tests/org/cacert/gigi/pages/orga/TestOrgaManagement.java index 6fe4f182..7800d02f 100644 --- a/tests/org/cacert/gigi/pages/orga/TestOrgaManagement.java +++ b/tests/org/cacert/gigi/pages/orga/TestOrgaManagement.java @@ -40,7 +40,7 @@ public class TestOrgaManagement extends ClientTest { for (Organisation i : Organisation.getOrganisations(0, 30)) { i.delete(); } - executeBasicWebInteraction(cookie, CreateOrgPage.DEFAULT_PATH, "O=name&contact=mail&L=K%C3%B6ln&ST=%C3%9C%C3%96%C3%84%C3%9F&C=DE&comments=jkl%C3%B6loiuzfdfgjlh%C3%B6", 0); + executeBasicWebInteraction(cookie, CreateOrgPage.DEFAULT_PATH, "action=new&O=name&contact=mail&L=K%C3%B6ln&ST=%C3%9C%C3%96%C3%84%C3%9F&C=DE&comments=jkl%C3%B6loiuzfdfgjlh%C3%B6", 0); Organisation[] orgs = Organisation.getOrganisations(0, 30); assertEquals(1, orgs.length); assertEquals("mail", orgs[0].getContactEmail()); @@ -72,7 +72,7 @@ public class TestOrgaManagement extends ClientTest { executeBasicWebInteraction(cookie, ViewOrgPage.DEFAULT_PATH + "/" + orgs[0].getId(), "del=" + URLEncoder.encode(u2.getEmail(), "UTF-8") + "&email=&do_affiliate=y", 1); assertEquals(0, orgs[0].getAllAdmins().size()); - executeBasicWebInteraction(cookie, ViewOrgPage.DEFAULT_PATH + "/" + orgs[0].getId(), "O=name1&contact=&L=K%C3%B6ln&ST=%C3%9C%C3%96%C3%84%C3%9F&C=DE&comments=jkl%C3%B6loiuzfdfgjlh%C3%B6", 0); + executeBasicWebInteraction(cookie, ViewOrgPage.DEFAULT_PATH + "/" + orgs[0].getId(), "action=updateCertificateData&O=name1&contact=&L=K%C3%B6ln&ST=%C3%9C%C3%96%C3%84%C3%9F&C=DE&comments=jkl%C3%B6loiuzfdfgjlh%C3%B6", 0); clearCaches(); orgs = Organisation.getOrganisations(0, 30); assertEquals("name1", orgs[0].getName()); @@ -81,8 +81,8 @@ public class TestOrgaManagement extends ClientTest { @Test public void testNonAssurerSeeOnlyOwn() throws IOException, GigiApiException { User u2 = User.getById(createAssuranceUser("testworker", "testname", createUniqueName() + "@testdom.com", TEST_PASSWORD)); - Organisation o1 = new Organisation("name21", "DE", "sder", "Rostov", "email", u); - Organisation o2 = new Organisation("name12", "DE", "sder", "Rostov", "email", u); + Organisation o1 = new Organisation("name21", "DE", "sder", "Rostov", "email", "", "", u); + Organisation o2 = new Organisation("name12", "DE", "sder", "Rostov", "email", "", "", u); o1.addAdmin(u2, u, false); String session2 = login(u2.getEmail(), TEST_PASSWORD); @@ -115,7 +115,7 @@ public class TestOrgaManagement extends ClientTest { User u2 = User.getById(createAssuranceUser("testworker", "testname", createUniqueName() + "@testdom.com", TEST_PASSWORD)); User u3 = User.getById(createAssuranceUser("testmaster", "testname", createUniqueName() + "@testdom.com", TEST_PASSWORD)); User u4_dummy = User.getById(createVerifiedUser("testmaster", "testname", createUniqueName() + "@testdom.com", TEST_PASSWORD)); - Organisation o1 = new Organisation("name21", "DE", "sder", "Rostov", "email", u); + Organisation o1 = new Organisation("name21", "DE", "sder", "Rostov", "email", "", "", u); o1.addAdmin(u3, u, true); try { // must fail because u4 is no assurer -- 2.39.2