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;
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<String, Object> outerVars) {
HashMap<String, Object> vars = new HashMap<String, Object>();
- 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\"" : "");
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) {
- 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"))) {
} 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."));
}
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());
ps.execute();
}
Notary.writeUserAgreement(u, "ToS", "account creation", "", true, 0);
-
}
+
}