]> WPIA git - gigi.git/blobdiff - src/org/cacert/gigi/pages/main/Signup.java
Add the "password strength" check
[gigi.git] / src / org / cacert / gigi / pages / main / Signup.java
index 007a58a60c10be233235159f2629adb6e8afb027..cad5d1417ac2c535d2207c426285e12af0e1b9c3 100644 (file)
@@ -1,5 +1,6 @@
 package org.cacert.gigi.pages.main;
 
+import java.io.IOException;
 import java.io.InputStreamReader;
 import java.io.PrintWriter;
 import java.io.UnsupportedEncodingException;
@@ -10,6 +11,7 @@ import java.util.Date;
 import java.util.HashMap;
 
 import javax.servlet.ServletRequest;
+import javax.servlet.http.HttpServletRequest;
 
 import org.cacert.gigi.Language;
 import org.cacert.gigi.User;
@@ -17,7 +19,9 @@ import org.cacert.gigi.database.DatabaseConnection;
 import org.cacert.gigi.output.DateSelector;
 import org.cacert.gigi.output.Template;
 import org.cacert.gigi.pages.Page;
+import org.cacert.gigi.util.EmailChecker;
 import org.cacert.gigi.util.HTMLEncoder;
+import org.cacert.gigi.util.PasswordStrengthChecker;
 
 public class Signup {
        User buildup = new User();
@@ -61,7 +65,7 @@ public class Signup {
                                                "</a>"));
                t.output(out, l, vars);
        }
-       private void update(ServletRequest r) {
+       private void update(HttpServletRequest r) {
                if (r.getParameter("fname") != null) {
                        buildup.setFname(r.getParameter("fname"));
                }
@@ -81,9 +85,10 @@ public class Signup {
                country = "1".equals(r.getParameter("country"));
                regional = "1".equals(r.getParameter("regional"));
                radius = "1".equals(r.getParameter("radius"));
+               myDoB.update(r);
        }
 
-       public boolean submit(PrintWriter out, ServletRequest req) {
+       public boolean submit(PrintWriter out, HttpServletRequest req) {
                update(req);
                boolean failed = false;
                out.println("<div class='formError'>");
@@ -95,6 +100,11 @@ public class Signup {
                        outputError(out, req, "Invalid date of birth");
                        failed = true;
                }
+               if (!"1".equals(req.getParameter("cca_agree"))) {
+                       outputError(out, req,
+                                       "You have to agree to the CAcert Community agreement.");
+                       failed = true;
+               }
                if (buildup.getEmail().equals("")) {
                        outputError(out, req, "Email Address was blank");
                        failed = true;
@@ -108,7 +118,19 @@ public class Signup {
                        outputError(out, req, "Pass Phrases don't match");
                        failed = true;
                }
-               // TODO check password strength
+               int pwpoints = PasswordStrengthChecker.checkpw(pw1, buildup);
+               if (pwpoints < 3) {
+                       outputError(
+                                       out,
+                                       req,
+                                       "The Pass Phrase you submitted failed to contain enough"
+                                                       + " differing characters and/or contained words from"
+                                                       + " your name and/or email address.");
+               }
+               if (failed) {
+                       out.println("</div>");
+                       return false;
+               }
                try {
                        PreparedStatement q1 = DatabaseConnection.getInstance().prepare(
                                        "select * from `email` where `email`=? and `deleted`=0");
@@ -147,8 +169,44 @@ public class Signup {
                        e.printStackTrace();
                        failed = true;
                }
+               String mailResult = EmailChecker.FAIL;
+               try {
+                       mailResult = EmailChecker.checkEmailServer(0, buildup.getEmail());
+               } catch (IOException e) {
+               }
+               if (!mailResult.equals(EmailChecker.OK)) {
+                       if (mailResult.startsWith("4")) {
+                               outputError(
+                                               out,
+                                               req,
+                                               "The mail server responsible for your domain indicated"
+                                                               + " a temporary failure. This may be due to anti-SPAM measures, such"
+                                                               + " as greylisting. Please try again in a few minutes.");
+                       } else {
+                               outputError(
+                                               out,
+                                               req,
+                                               "Email Address given was invalid, or a test connection"
+                                                               + " couldn't be made to your server, or the server"
+                                                               + " rejected the email address as invalid");
+                       }
+                       if (mailResult.equals(EmailChecker.FAIL)) {
+                               outputError(out, req,
+                                               "Failed to make a connection to the mail server");
+                       } else {
+                               out.print("<div>");
+                               out.print(mailResult);
+                               out.println("</div>");
+                       }
+                       failed = true;
+               }
+
                out.println("</div>");
-               return failed;
+               if (failed) {
+                       return false;
+               }
+               // TODO start getting to work
+               return true;
        }
        private void outputError(PrintWriter out, ServletRequest req, String text) {
                out.print("<div>");