1 package org.cacert.gigi.pages.main;
3 import java.io.IOException;
4 import java.io.InputStreamReader;
5 import java.io.PrintWriter;
6 import java.io.UnsupportedEncodingException;
7 import java.sql.PreparedStatement;
8 import java.sql.ResultSet;
9 import java.sql.SQLException;
10 import java.util.Date;
11 import java.util.HashMap;
13 import javax.servlet.ServletRequest;
14 import javax.servlet.http.HttpServletRequest;
16 import org.cacert.gigi.Language;
17 import org.cacert.gigi.User;
18 import org.cacert.gigi.database.DatabaseConnection;
19 import org.cacert.gigi.output.DateSelector;
20 import org.cacert.gigi.output.Template;
21 import org.cacert.gigi.pages.Page;
22 import org.cacert.gigi.util.EmailChecker;
23 import org.cacert.gigi.util.HTMLEncoder;
26 User buildup = new User();
30 boolean general = true, country = true, regional = true, radius = true;
33 t = new Template(new InputStreamReader(
34 Signup.class.getResourceAsStream("Signup.templ"), "UTF-8"));
35 } catch (UnsupportedEncodingException e) {
41 buildup.setSuffix("");
43 buildup.setDob(new Date(0));
45 DateSelector myDoB = new DateSelector("day", "month", "year");
47 public void writeForm(PrintWriter out, Language l) {
48 HashMap<String, Object> vars = new HashMap<String, Object>();
49 vars.put("fname", HTMLEncoder.encodeHTML(buildup.getFname()));
50 vars.put("mname", HTMLEncoder.encodeHTML(buildup.getMname()));
51 vars.put("lname", HTMLEncoder.encodeHTML(buildup.getLname()));
52 vars.put("suffix", HTMLEncoder.encodeHTML(buildup.getSuffix()));
53 vars.put("dob", myDoB);
54 vars.put("email", HTMLEncoder.encodeHTML(buildup.getEmail()));
55 vars.put("general", general ? " checked=\"checked\"" : "");
56 vars.put("country", country ? " checked=\"checked\"" : "");
57 vars.put("regional", regional ? " checked=\"checked\"" : "");
58 vars.put("radius", radius ? " checked=\"checked\"" : "");
62 l.getTranslation("Help on Names %sin the wiki%s"),
63 "<a href=\"//wiki.cacert.org/FAQ/HowToEnterNamesInJoinForm\" target=\"_blank\">",
65 t.output(out, l, vars);
67 private void update(HttpServletRequest r) {
68 if (r.getParameter("fname") != null) {
69 buildup.setFname(r.getParameter("fname"));
71 if (r.getParameter("lname") != null) {
72 buildup.setLname(r.getParameter("lname"));
74 if (r.getParameter("mname") != null) {
75 buildup.setMname(r.getParameter("mname"));
77 if (r.getParameter("suffix") != null) {
78 buildup.setSuffix(r.getParameter("suffix"));
80 if (r.getParameter("email") != null) {
81 buildup.setEmail(r.getParameter("email"));
83 general = "1".equals(r.getParameter("general"));
84 country = "1".equals(r.getParameter("country"));
85 regional = "1".equals(r.getParameter("regional"));
86 radius = "1".equals(r.getParameter("radius"));
90 public boolean submit(PrintWriter out, HttpServletRequest req) {
92 boolean failed = false;
93 out.println("<div class='formError'>");
94 if (buildup.getFname().equals("") || buildup.getLname().equals("")) {
95 outputError(out, req, "First and/or last names were blank.");
98 if (!myDoB.isValid()) {
99 outputError(out, req, "Invalid date of birth");
102 if (!"1".equals(req.getParameter("cca_agree"))) {
103 outputError(out, req,
104 "You have to agree to the CAcert Community agreement.");
107 if (buildup.getEmail().equals("")) {
108 outputError(out, req, "Email Address was blank");
111 String pw1 = req.getParameter("pword1");
112 String pw2 = req.getParameter("pword2");
113 if (pw1 == null || pw1.equals("")) {
114 outputError(out, req, "Pass Phrases were blank");
116 } else if (!pw1.equals(pw2)) {
117 outputError(out, req, "Pass Phrases don't match");
120 // TODO check password strength
122 out.println("</div>");
126 PreparedStatement q1 = DatabaseConnection.getInstance().prepare(
127 "select * from `email` where `email`=? and `deleted`=0");
128 PreparedStatement q2 = DatabaseConnection.getInstance().prepare(
129 "select * from `users` where `email`=? and `deleted`=0");
130 q1.setString(1, buildup.getEmail());
131 q2.setString(1, buildup.getEmail());
132 ResultSet r1 = q1.executeQuery();
133 ResultSet r2 = q2.executeQuery();
134 if (r1.next() || r2.next()) {
135 outputError(out, req,
136 "This email address is currently valid in the system.");
141 PreparedStatement q3 = DatabaseConnection
144 "select `domain` from `baddomains` where `domain`=RIGHT(?, LENGTH(`domain`))");
145 q3.setString(1, buildup.getEmail());
147 ResultSet r3 = q3.executeQuery();
149 String domain = r3.getString(1);
151 out.print(String.format(
153 "We don't allow signups from people using email addresses from %s"),
155 out.println("</div>");
159 } catch (SQLException e) {
163 String mailResult = EmailChecker.FAIL;
165 mailResult = EmailChecker.checkEmailServer(0, buildup.getEmail());
166 } catch (IOException e) {
168 if (!mailResult.equals(EmailChecker.OK)) {
169 if (mailResult.startsWith("4")) {
173 "The mail server responsible for your domain indicated"
174 + " a temporary failure. This may be due to anti-SPAM measures, such"
175 + " as greylisting. Please try again in a few minutes.");
180 "Email Address given was invalid, or a test connection"
181 + " couldn't be made to your server, or the server"
182 + " rejected the email address as invalid");
184 if (mailResult.equals(EmailChecker.FAIL)) {
185 outputError(out, req,
186 "Failed to make a connection to the mail server");
189 out.print(mailResult);
190 out.println("</div>");
195 out.println("</div>");
199 // TODO start getting to work
202 private void outputError(PrintWriter out, ServletRequest req, String text) {
204 out.print(Page.translate(req, text));
205 out.println("</div>");