From ab9818f784c71e0f75c1c1dd621da8a3a88cffa4 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Felix=20D=C3=B6rre?= Date: Sat, 13 Aug 2016 19:03:43 +0200 Subject: [PATCH] add: make name selection exclusive. Change-Id: I572e85ce835c9c1e997161bf53a9e289d019e2c7 --- src/org/cacert/gigi/output/NameInput.java | 10 +++++++- src/org/cacert/gigi/output/NameInput.templ | 24 ++++++++++++++----- src/org/cacert/gigi/pages/main/Signup.java | 17 +++++++++++-- static/static/js/expert.js | 19 ++++++++++++--- .../gigi/pages/account/TestMyDetailsEdit.java | 2 +- .../gigi/pages/main/RegisterPageTest.java | 2 +- .../cacert/gigi/testUtils/ManagedTest.java | 2 +- 7 files changed, 61 insertions(+), 15 deletions(-) diff --git a/src/org/cacert/gigi/output/NameInput.java b/src/org/cacert/gigi/output/NameInput.java index 5eeba5e9..a4745a27 100644 --- a/src/org/cacert/gigi/output/NameInput.java +++ b/src/org/cacert/gigi/output/NameInput.java @@ -26,6 +26,8 @@ public class NameInput implements Outputable { private String name = ""; + private String scheme = "western"; + public NameInput() {} public void update(HttpServletRequest req) throws GigiApiException { @@ -33,6 +35,7 @@ public class NameInput implements Outputable { lname = req.getParameter("lname"); suffix = req.getParameter("suffix"); name = req.getParameter("name"); + scheme = req.getParameter("name-type"); if (fname == null) { fname = ""; } @@ -45,6 +48,9 @@ public class NameInput implements Outputable { if (name == null) { name = ""; } + if ( !"western".equals(scheme) && !"single".equals("scheme")) { + throw new GigiApiException("Invalid name type."); + } if (name != null && name.contains(" ")) { throw new GigiApiException("Single names may only have one part."); } @@ -57,6 +63,8 @@ public class NameInput implements Outputable { vars.put("lname", lname); vars.put("suffix", suffix); vars.put("name", name); + vars.put("western", "western".equals(scheme)); + vars.put("single", "single".equals(scheme)); t.output(out, l, vars); } @@ -65,7 +73,7 @@ public class NameInput implements Outputable { } public NamePart[] getNameParts() throws GigiApiException { - if (name != null && !name.isEmpty()) { + if ("single".equals(scheme)) { return new NamePart[] { new NamePart(NamePartType.SINGLE_NAME, name) }; diff --git a/src/org/cacert/gigi/output/NameInput.templ b/src/org/cacert/gigi/output/NameInput.templ index 2c996830..b80ff2e7 100644 --- a/src/org/cacert/gigi/output/NameInput.templ +++ b/src/org/cacert/gigi/output/NameInput.templ @@ -1,7 +1,9 @@ -

-

- -

+
+

checked>

+
+

+ +

  • @@ -16,9 +18,15 @@
    + +
+
+ -

-

+
+

checked>

+
+

    @@ -27,3 +35,7 @@
    +
+
+ + diff --git a/src/org/cacert/gigi/pages/main/Signup.java b/src/org/cacert/gigi/pages/main/Signup.java index 416788e5..a10a68d7 100644 --- a/src/org/cacert/gigi/pages/main/Signup.java +++ b/src/org/cacert/gigi/pages/main/Signup.java @@ -60,7 +60,6 @@ public class Signup extends Form { } private void update(HttpServletRequest r) throws GigiApiException { - ni.update(r); if (r.getParameter("email") != null) { email = r.getParameter("email"); } @@ -68,9 +67,19 @@ public class Signup extends Form { country = "1".equals(r.getParameter("country")); regional = "1".equals(r.getParameter("regional")); radius = "1".equals(r.getParameter("radius")); + GigiApiException problems = new GigiApiException(); + try { + ni.update(r); + } catch (GigiApiException e) { + problems.mergeInto(e); + } try { myDoB.update(r); } catch (GigiApiException e) { + problems.mergeInto(e); + } + if ( !problems.isEmpty()) { + throw problems; } } @@ -80,8 +89,12 @@ public class Signup extends Form { throw new RateLimitException(); } - update(req); GigiApiException ga = new GigiApiException(); + try { + update(req); + } catch (GigiApiException e) { + ga.mergeInto(e); + } try { ni.getNameParts(); } catch (GigiApiException e) { diff --git a/static/static/js/expert.js b/static/static/js/expert.js index 09987b17..07d1da49 100644 --- a/static/static/js/expert.js +++ b/static/static/js/expert.js @@ -20,14 +20,27 @@ $(".panel-activatable").map(function() { var panel = $(this); var refresh = function(){ - if(this.checked){ + var radio = this.type == "radio"; + if(radio && this.form.currentRadios === undefined) { + this.form.currentRadios = {}; + } + if(this.checked) { panel.find(".panel-body").removeClass("hidden"); - }else{ + if(radio) { + var rds = this.form.currentRadios; + if(rds[this.name] !== undefined){ + $(rds[this.name]).trigger("change"); + } + rds[this.name] = this; + } + } else { panel.find(".panel-body").addClass("hidden"); } }; panel.find(".panel-heading [type=\"checkbox\"]").map(refresh); - panel.find(".panel-heading [type=\"checkbox\"]").click(refresh); + panel.find(".panel-heading [type=\"checkbox\"]").change(refresh); + panel.find(".panel-heading [type=\"radio\"]").map(refresh); + panel.find(".panel-heading [type=\"radio\"]").change(refresh); return this.id; }); } diff --git a/tests/org/cacert/gigi/pages/account/TestMyDetailsEdit.java b/tests/org/cacert/gigi/pages/account/TestMyDetailsEdit.java index d9f8e3d8..e2b8b9ab 100644 --- a/tests/org/cacert/gigi/pages/account/TestMyDetailsEdit.java +++ b/tests/org/cacert/gigi/pages/account/TestMyDetailsEdit.java @@ -32,7 +32,7 @@ public class TestMyDetailsEdit extends ManagedTest { public void testAddName() throws IOException { int startn = User.getById(id).getNames().length; String newName = createUniqueName(); - assertNull(executeBasicWebInteraction(cookie, MyDetails.PATH, "fname=" + newName + "&lname=Hansel&action=addName", 0)); + assertNull(executeBasicWebInteraction(cookie, MyDetails.PATH, "name-type=western&fname=" + newName + "&lname=Hansel&action=addName", 0)); User u = User.getById(id); NamePart[] parts = u.getNames()[startn].getParts(); diff --git a/tests/org/cacert/gigi/pages/main/RegisterPageTest.java b/tests/org/cacert/gigi/pages/main/RegisterPageTest.java index 7ab63c7d..f440bc8d 100644 --- a/tests/org/cacert/gigi/pages/main/RegisterPageTest.java +++ b/tests/org/cacert/gigi/pages/main/RegisterPageTest.java @@ -48,7 +48,7 @@ public class RegisterPageTest extends ManagedTest { String defaultSignup = "fname=" + URLEncoder.encode("ab", "UTF-8") + "&lname=" + URLEncoder.encode("b", "UTF-8") + "&pword1=" + URLEncoder.encode(TEST_PASSWORD, "UTF-8") + "&pword2=" + URLEncoder.encode(TEST_PASSWORD, "UTF-8") + "&day=1&month=1&year=1910&tos_agree=1&mname=mn&suffix=sf&email="; - String query = defaultSignup + URLEncoder.encode("correct3_" + uniq + "@email.de", "UTF-8") + "&general=1&country=1®ional=1&radius=1"; + String query = defaultSignup + URLEncoder.encode("correct3_" + uniq + "@email.de", "UTF-8") + "&general=1&country=1®ional=1&radius=1&name-type=western"; String data = fetchStartErrorMessage(runRegister(query)); assertNull(data); assertSuccessfullRegMail(); diff --git a/tests/org/cacert/gigi/testUtils/ManagedTest.java b/tests/org/cacert/gigi/testUtils/ManagedTest.java index aab620a3..a0228f16 100644 --- a/tests/org/cacert/gigi/testUtils/ManagedTest.java +++ b/tests/org/cacert/gigi/testUtils/ManagedTest.java @@ -259,7 +259,7 @@ public class ManagedTest extends ConfiguredTest { public static void registerUser(String firstName, String lastName, String email, String password) { try { - String query = "fname=" + URLEncoder.encode(firstName, "UTF-8") + "&lname=" + URLEncoder.encode(lastName, "UTF-8") + "&email=" + URLEncoder.encode(email, "UTF-8") + "&pword1=" + URLEncoder.encode(password, "UTF-8") + "&pword2=" + URLEncoder.encode(password, "UTF-8") + "&day=1&month=1&year=1910&tos_agree=1"; + String query = "name-type=western&fname=" + URLEncoder.encode(firstName, "UTF-8") + "&lname=" + URLEncoder.encode(lastName, "UTF-8") + "&email=" + URLEncoder.encode(email, "UTF-8") + "&pword1=" + URLEncoder.encode(password, "UTF-8") + "&pword2=" + URLEncoder.encode(password, "UTF-8") + "&day=1&month=1&year=1910&tos_agree=1"; String data = fetchStartErrorMessage(runRegister(query)); assertNull(data); } catch (UnsupportedEncodingException e) { -- 2.39.2