]> WPIA git - gigi.git/blob - src/org/cacert/gigi/pages/main/Signup.java
Merge branch 'ant_build'
[gigi.git] / src / org / cacert / gigi / pages / main / Signup.java
1 package org.cacert.gigi.pages.main;
2
3 import java.io.InputStreamReader;
4 import java.io.PrintWriter;
5 import java.io.UnsupportedEncodingException;
6 import java.sql.PreparedStatement;
7 import java.sql.ResultSet;
8 import java.sql.SQLException;
9 import java.util.Date;
10 import java.util.HashMap;
11
12 import javax.servlet.ServletRequest;
13 import javax.servlet.http.HttpServletRequest;
14
15 import org.cacert.gigi.Language;
16 import org.cacert.gigi.User;
17 import org.cacert.gigi.database.DatabaseConnection;
18 import org.cacert.gigi.output.DateSelector;
19 import org.cacert.gigi.output.Template;
20 import org.cacert.gigi.pages.Page;
21 import org.cacert.gigi.util.HTMLEncoder;
22
23 public class Signup {
24         User buildup = new User();
25         String password;
26         String password2;
27         Template t;
28         boolean general = true, country = true, regional = true, radius = true;
29         public Signup() {
30                 try {
31                         t = new Template(new InputStreamReader(
32                                         Signup.class.getResourceAsStream("Signup.templ"), "UTF-8"));
33                 } catch (UnsupportedEncodingException e) {
34                         e.printStackTrace();
35                 }
36                 buildup.setFname("");
37                 buildup.setMname("");
38                 buildup.setLname("");
39                 buildup.setSuffix("");
40                 buildup.setEmail("");
41                 buildup.setDob(new Date(0));
42         }
43         DateSelector myDoB = new DateSelector("day", "month", "year");
44
45         public void writeForm(PrintWriter out, Language l) {
46                 HashMap<String, Object> vars = new HashMap<String, Object>();
47                 vars.put("fname", HTMLEncoder.encodeHTML(buildup.getFname()));
48                 vars.put("mname", HTMLEncoder.encodeHTML(buildup.getMname()));
49                 vars.put("lname", HTMLEncoder.encodeHTML(buildup.getLname()));
50                 vars.put("suffix", HTMLEncoder.encodeHTML(buildup.getSuffix()));
51                 vars.put("dob", myDoB);
52                 vars.put("email", HTMLEncoder.encodeHTML(buildup.getEmail()));
53                 vars.put("general", general ? " checked=\"checked\"" : "");
54                 vars.put("country", country ? " checked=\"checked\"" : "");
55                 vars.put("regional", regional ? " checked=\"checked\"" : "");
56                 vars.put("radius", radius ? " checked=\"checked\"" : "");
57                 vars.put(
58                                 "helpOnNames",
59                                 String.format(
60                                                 l.getTranslation("Help on Names %sin the wiki%s"),
61                                                 "<a href=\"//wiki.cacert.org/FAQ/HowToEnterNamesInJoinForm\" target=\"_blank\">",
62                                                 "</a>"));
63                 t.output(out, l, vars);
64         }
65         private void update(HttpServletRequest r) {
66                 if (r.getParameter("fname") != null) {
67                         buildup.setFname(r.getParameter("fname"));
68                 }
69                 if (r.getParameter("lname") != null) {
70                         buildup.setLname(r.getParameter("lname"));
71                 }
72                 if (r.getParameter("mname") != null) {
73                         buildup.setMname(r.getParameter("mname"));
74                 }
75                 if (r.getParameter("suffix") != null) {
76                         buildup.setSuffix(r.getParameter("suffix"));
77                 }
78                 if (r.getParameter("email") != null) {
79                         buildup.setEmail(r.getParameter("email"));
80                 }
81                 general = "1".equals(r.getParameter("general"));
82                 country = "1".equals(r.getParameter("country"));
83                 regional = "1".equals(r.getParameter("regional"));
84                 radius = "1".equals(r.getParameter("radius"));
85                 myDoB.update(r);
86         }
87
88         public boolean submit(PrintWriter out, HttpServletRequest req) {
89                 update(req);
90                 boolean failed = false;
91                 out.println("<div class='formError'>");
92                 if (buildup.getFname().equals("") || buildup.getLname().equals("")) {
93                         outputError(out, req, "First and/or last names were blank.");
94                         failed = true;
95                 }
96                 if (!myDoB.isValid()) {
97                         outputError(out, req, "Invalid date of birth");
98                         failed = true;
99                 }
100                 if (!"1".equals(req.getParameter("cca_agree"))) {
101                         outputError(out, req,
102                                         "You have to agree to the CAcert Community agreement.");
103                         failed = true;
104                 }
105                 if (buildup.getEmail().equals("")) {
106                         outputError(out, req, "Email Address was blank");
107                         failed = true;
108                 }
109                 String pw1 = req.getParameter("pword1");
110                 String pw2 = req.getParameter("pword2");
111                 if (pw1 == null || pw1.equals("")) {
112                         outputError(out, req, "Pass Phrases were blank");
113                         failed = true;
114                 } else if (!pw1.equals(pw2)) {
115                         outputError(out, req, "Pass Phrases don't match");
116                         failed = true;
117                 }
118                 // TODO check password strength
119                 if (failed) {
120                         out.println("</div>");
121                         return false;
122                 }
123                 try {
124                         PreparedStatement q1 = DatabaseConnection.getInstance().prepare(
125                                         "select * from `email` where `email`=? and `deleted`=0");
126                         PreparedStatement q2 = DatabaseConnection.getInstance().prepare(
127                                         "select * from `users` where `email`=? and `deleted`=0");
128                         q1.setString(1, buildup.getEmail());
129                         q2.setString(1, buildup.getEmail());
130                         ResultSet r1 = q1.executeQuery();
131                         ResultSet r2 = q2.executeQuery();
132                         if (r1.next() || r2.next()) {
133                                 outputError(out, req,
134                                                 "This email address is currently valid in the system.");
135                                 failed = true;
136                         }
137                         r1.close();
138                         r2.close();
139                         PreparedStatement q3 = DatabaseConnection
140                                         .getInstance()
141                                         .prepare(
142                                                         "select `domain` from `baddomains` where `domain`=RIGHT(?, LENGTH(`domain`))");
143                         q3.setString(1, buildup.getEmail());
144
145                         ResultSet r3 = q3.executeQuery();
146                         if (r3.next()) {
147                                 String domain = r3.getString(1);
148                                 out.print("<div>");
149                                 out.print(String.format(
150                                                 Page.translate(req,
151                                                                 "We don't allow signups from people using email addresses from %s"),
152                                                 domain));
153                                 out.println("</div>");
154                                 failed = true;
155                         }
156                         r3.close();
157                 } catch (SQLException e) {
158                         e.printStackTrace();
159                         failed = true;
160                 }
161                 // TODO fast-check mail
162
163                 out.println("</div>");
164                 if (failed) {
165                         return false;
166                 }
167                 // TODO start getting to work
168                 return true;
169         }
170         private void outputError(PrintWriter out, ServletRequest req, String text) {
171                 out.print("<div>");
172                 out.print(Page.translate(req, text));
173                 out.println("</div>");
174         }
175 }