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;
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);
}
private DateSelector myDoB = new DateSelector("day", "month", "year");
vars.put("helpOnNames", String.format(l.getTranslation("Help on Names %sin the wiki%s"), "<a href=\"//wiki.cacert.org/FAQ/HowToEnterNamesInJoinForm\" target=\"_blank\">", "</a>"));
vars.put("csrf", getCSRFToken());
vars.put("dobmin", User.MINIMUM_AGE + "");
+ vars.put("countryCode", cs);
t.output(out, l, vars);
}
private void update(HttpServletRequest r) throws GigiApiException {
- ni.update(r);
if (r.getParameter("email") != null) {
email = r.getParameter("email");
}
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();
+ try {
+ update(req);
+ } catch (GigiApiException e) {
+ ga.mergeInto(e);
+ }
try {
ni.getNameParts();
} catch (GigiApiException e) {
}
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"))) {
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, myDoB.getDate(), Page.getLanguage(req).getLocale(), ni.getNameParts());
+ 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());
ps.execute();
}
Notary.writeUserAgreement(u, "ToS", "account creation", "", true, 0);
-
}
+
}