X-Git-Url: https://code.wpia.club/?p=gigi.git;a=blobdiff_plain;f=src%2Forg%2Fcacert%2Fgigi%2Fpages%2Fmain%2FSignup.java;h=011b63843d43aaee07d8c405f268236a5ad516ba;hp=0fc04d8e9f9144e3202b956ef009bc74a3cab31b;hb=abff88a2bf173198fe55c35ead97c9c7cdb5924c;hpb=25f59f370978c0e9789821a15d89a83d5d702622 diff --git a/src/org/cacert/gigi/pages/main/Signup.java b/src/org/cacert/gigi/pages/main/Signup.java index 0fc04d8e..011b6384 100644 --- a/src/org/cacert/gigi/pages/main/Signup.java +++ b/src/org/cacert/gigi/pages/main/Signup.java @@ -10,15 +10,17 @@ import javax.servlet.http.HttpServletRequest; import org.cacert.gigi.GigiApiException; import org.cacert.gigi.database.GigiPreparedStatement; import org.cacert.gigi.database.GigiResultSet; -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.CountrySelector; import org.cacert.gigi.output.DateSelector; +import org.cacert.gigi.output.NameInput; import org.cacert.gigi.output.template.Form; import org.cacert.gigi.output.template.PlainOutputable; import org.cacert.gigi.output.template.SprintfCommand; import org.cacert.gigi.output.template.Template; +import org.cacert.gigi.output.template.TranslateCommand; import org.cacert.gigi.pages.Page; import org.cacert.gigi.util.CalendarUtil; import org.cacert.gigi.util.HTMLEncoder; @@ -28,28 +30,28 @@ import org.cacert.gigi.util.RateLimit.RateLimitException; public class Signup extends Form { - Name buildupName = new Name("", "", "", ""); + private NameInput ni; - String email = ""; + private String email = ""; private static final Template t = new Template(Signup.class.getResource("Signup.templ")); - boolean general = true, country = true, regional = true, radius = true; + private boolean general = true, country = true, regional = true, radius = true; + + private CountrySelector cs; public Signup(HttpServletRequest hsr) { super(hsr); - + ni = new NameInput(); + cs = new CountrySelector("residenceCountry", true); } - DateSelector myDoB = new DateSelector("day", "month", "year"); + private DateSelector myDoB = new DateSelector("day", "month", "year"); @Override public void outputContent(PrintWriter out, Language l, Map outerVars) { HashMap vars = new HashMap(); - vars.put("fname", HTMLEncoder.encodeHTML(buildupName.getFname())); - vars.put("mname", HTMLEncoder.encodeHTML(buildupName.getMname())); - vars.put("lname", HTMLEncoder.encodeHTML(buildupName.getLname())); - vars.put("suffix", HTMLEncoder.encodeHTML(buildupName.getSuffix())); + vars.put("name", ni); vars.put("dob", myDoB); vars.put("email", HTMLEncoder.encodeHTML(email)); vars.put("general", general ? " checked=\"checked\"" : ""); @@ -59,57 +61,66 @@ public class Signup extends Form { vars.put("helpOnNames", String.format(l.getTranslation("Help on Names %sin the wiki%s"), "", "")); vars.put("csrf", getCSRFToken()); vars.put("dobmin", User.MINIMUM_AGE + ""); + vars.put("countryCode", cs); t.output(out, l, vars); } - private void update(HttpServletRequest r) { - String fname = buildupName.getFname(); - String lname = buildupName.getLname(); - String mname = buildupName.getMname(); - String suffix = buildupName.getSuffix(); - if (r.getParameter("fname") != null) { - fname = r.getParameter("fname"); - } - if (r.getParameter("lname") != null) { - lname = r.getParameter("lname"); - } - if (r.getParameter("mname") != null) { - mname = r.getParameter("mname"); - } - if (r.getParameter("suffix") != null) { - suffix = r.getParameter("suffix"); - } + private void update(HttpServletRequest r) throws GigiApiException { if (r.getParameter("email") != null) { email = r.getParameter("email"); } - buildupName = new Name(fname, lname, mname, suffix); general = "1".equals(r.getParameter("general")); 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); + } + + cs.update(r); + + if ( !problems.isEmpty()) { + throw problems; } + } @Override - public synchronized boolean submit(PrintWriter out, HttpServletRequest req) throws GigiApiException { + public synchronized SubmissionResult submit(HttpServletRequest req) throws GigiApiException { if (RegisterPage.RATE_LIMIT.isLimitExceeded(req.getRemoteAddr())) { throw new RateLimitException(); } - update(req); GigiApiException ga = new GigiApiException(); - if (buildupName.getLname().trim().equals("")) { - ga.mergeInto(new GigiApiException("Last name were blank.")); + try { + update(req); + } catch (GigiApiException e) { + ga.mergeInto(e); + } + try { + ni.getNameParts(); + } catch (GigiApiException e) { + ga.mergeInto(e); } + if ( !myDoB.isValid()) { ga.mergeInto(new GigiApiException("Invalid date of birth")); } if ( !CalendarUtil.isOfAge(myDoB.getDate(), User.MINIMUM_AGE)) { - ga.mergeInto(new GigiApiException("Entered dated of birth is below the restricted age requirements.")); + ga.mergeInto(new GigiApiException("Entered date of birth is below the restricted age requirements.")); + } + + if (CalendarUtil.isOfAge(myDoB.getDate(), User.MAXIMUM_PLAUSIBLE_AGE)) { + ga.mergeInto(new GigiApiException("Entered date of birth exceeds the maximum age set in our policies. Please check your DoB is correct and contact support if the issue persists.")); } if ( !"1".equals(req.getParameter("tos_agree"))) { @@ -125,7 +136,7 @@ public class Signup extends Form { } else if ( !pw1.equals(pw2)) { ga.mergeInto(new GigiApiException("Pass Phrases don't match")); } - int pwpoints = PasswordStrengthChecker.checkpw(pw1, buildupName, email); + int pwpoints = PasswordStrengthChecker.checkpw(pw1, ni.getNamePartsPlain(), email); if (pwpoints < 3) { ga.mergeInto(new GigiApiException("The Pass Phrase you submitted failed to contain enough" + " differing characters and/or contained words from" + " your name and/or email address.")); } @@ -173,11 +184,11 @@ public class Signup extends Form { throw ga2; } run(req, pw1); - return true; + return new SuccessMessageResult(new TranslateCommand("Your information has been submitted" + " into our system. You will now be sent an email with a web link," + " you need to open that link in your web browser within 24 hours" + " or your information will be removed from our system!")); } private void run(HttpServletRequest req, String password) throws GigiApiException { - User u = new User(email, password, buildupName, myDoB.getDate(), Page.getLanguage(req).getLocale()); + User u = new User(email, password, myDoB.getDate(), Page.getLanguage(req).getLocale(), cs.getCountry(), ni.getNameParts()); try (GigiPreparedStatement ps = new GigiPreparedStatement("INSERT INTO `alerts` SET `memid`=?," + " `general`=?, `country`=?, `regional`=?, `radius`=?")) { ps.setInt(1, u.getId()); @@ -188,6 +199,6 @@ public class Signup extends Form { ps.execute(); } Notary.writeUserAgreement(u, "ToS", "account creation", "", true, 0); - } + }