]> WPIA git - gigi.git/blobdiff - src/org/cacert/gigi/pages/wot/AssuranceForm.java
upd: use a more strict pattern for handling forms
[gigi.git] / src / org / cacert / gigi / pages / wot / AssuranceForm.java
index 7d15e8dac5386d25b7179df81805c97ad8a5e1c2..558375326a2dd419bd36aa5d1f7642b5488ee586 100644 (file)
@@ -17,6 +17,7 @@ import org.cacert.gigi.dbObjects.Name;
 import org.cacert.gigi.dbObjects.User;
 import org.cacert.gigi.localisation.Language;
 import org.cacert.gigi.output.ArrayIterable;
+import org.cacert.gigi.output.CountrySelector;
 import org.cacert.gigi.output.template.Form;
 import org.cacert.gigi.output.template.IterableDataset;
 import org.cacert.gigi.output.template.SprintfCommand;
@@ -48,6 +49,8 @@ public class AssuranceForm extends Form {
 
     private static final Template templ = new Template(AssuranceForm.class.getResource("AssuranceForm.templ"));
 
+    private CountrySelector cs;
+
     public AssuranceForm(HttpServletRequest hsr, User assuree) throws GigiApiException {
         super(hsr);
         assurer = Page.getUser(hsr);
@@ -73,6 +76,7 @@ public class AssuranceForm extends Form {
         assureeNames = names.toArray(new Name[names.size()]);
         dob = this.assuree.getDoB();
         selected = new boolean[assureeNames.length];
+        cs = new CountrySelector("countryCode", false);
     }
 
     SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
@@ -100,6 +104,8 @@ public class AssuranceForm extends Form {
         res.put("location", location);
         res.put("date", date);
         res.put("aword", aword);
+        res.put("countryCode", cs);
+
         final LinkedList<AssuranceType> ats = new LinkedList<>();
         for (AssuranceType at : AssuranceType.values()) {
             try {
@@ -128,9 +134,10 @@ public class AssuranceForm extends Form {
     }
 
     @Override
-    public boolean submit(PrintWriter out, HttpServletRequest req) throws GigiApiException {
+    public boolean submit(HttpServletRequest req) throws GigiApiException {
         location = req.getParameter("location");
         date = req.getParameter("date");
+        cs.update(req);
         GigiApiException gae = new GigiApiException();
         if (date == null || location == null) {
             gae.mergeInto(new GigiApiException("You need to enter location and date!"));
@@ -152,14 +159,14 @@ public class AssuranceForm extends Form {
             try {
                 type = AssuranceType.valueOf(val);
             } catch (IllegalArgumentException e) {
-                gae.mergeInto(new GigiApiException("Assurance Type wrong."));
+                gae.mergeInto(new GigiApiException("Verification Type wrong."));
             }
         }
 
         int pointsI = 0;
         String points = req.getParameter("points");
         if (points == null || "".equals(points)) {
-            gae.mergeInto(new GigiApiException("For an assurance, you need to enter points."));
+            gae.mergeInto(new GigiApiException("For a verification, you need to enter points."));
         } else {
             try {
                 pointsI = Integer.parseInt(points);
@@ -167,7 +174,8 @@ public class AssuranceForm extends Form {
                 gae.mergeInto(new GigiApiException("The points entered were not a number."));
             }
         }
-        HashSet<String> data = new HashSet<>(Arrays.asList(req.getParameterValues("assuredName")));
+        String[] parameterValues = req.getParameterValues("assuredName");
+        HashSet<String> data = new HashSet<>(Arrays.asList(parameterValues == null ? new String[0] : parameterValues));
         for (int i = 0; i < assureeNames.length; i++) {
             selected[i] = data.contains(Integer.toString(assureeNames[i].getId()));
         }
@@ -175,20 +183,32 @@ public class AssuranceForm extends Form {
         if ( !gae.isEmpty()) {
             throw gae;
         }
+
+        LinkedList<Name> toAssure = new LinkedList<Name>();
         for (int i = 0; i < selected.length; i++) {
             if (selected[i]) {
-                Notary.assure(assurer, assuree, assureeNames[i], dob, pointsI, location, req.getParameter("date"), type);
+                toAssure.add(assureeNames[i]);
             }
         }
-        if (aword != null && !aword.equals("")) {
-            Language l = Language.getInstance(assuree.getPreferredLocale());
-            String method = l.getTranslation("A password reset was triggered. If you did a password reset by assurance, please enter your secret password using this form:");
-            String subject = l.getTranslation("Password reset by assurance");
-            PasswordResetPage.initPasswordResetProcess(out, assuree, req, aword, l, method, subject);
+        if (toAssure.size() == 0) {
+            throw new GigiApiException("You must confirm at least one name to verify an account.");
+        }
+
+        Notary.assureAll(assurer, assuree, dob, pointsI, location, req.getParameter("date"), type, toAssure.toArray(new Name[toAssure.size()]), cs.getCountry());
+
+        if (isWithPasswordReset()) {
+            Language langApplicant = Language.getInstance(assuree.getPreferredLocale());
+            String method = langApplicant.getTranslation("A password reset was triggered. If you did a password reset by verification, please enter your secret password using this form:");
+            String subject = langApplicant.getTranslation("Password reset by verification");
+            PasswordResetPage.initPasswordResetProcess(assuree, req, aword, langApplicant, method, subject);
         }
         return true;
     }
 
+    public boolean isWithPasswordReset() {
+        return aword != null && !aword.equals("");
+    }
+
     public User getAssuree() {
         return assuree;
     }