]> WPIA git - gigi.git/commitdiff
fix: re-display form on error in some cases.
authorFelix Dörre <felix@dogcraft.de>
Thu, 11 Aug 2016 10:36:08 +0000 (12:36 +0200)
committerFelix Dörre <felix@dogcraft.de>
Thu, 11 Aug 2016 17:51:05 +0000 (19:51 +0200)
Change-Id: I428c31912e6bcfe4010bf71dcb66b20e94a76715

src/org/cacert/gigi/output/template/Form.java
src/org/cacert/gigi/pages/account/domain/DomainManagementForm.java
src/org/cacert/gigi/pages/account/domain/DomainOverview.java
src/org/cacert/gigi/pages/orga/CreateOrgPage.java
src/org/cacert/gigi/pages/orga/ViewOrgPage.java

index 3f7ab6d1d06750fdeb7789e7a77149df39ec43c6..1eb0efa04e5f8ca4a87fc906bf2906f3eb7d3a4d 100644 (file)
@@ -2,6 +2,7 @@ package org.cacert.gigi.output.template;
 
 import java.io.IOException;
 import java.io.PrintWriter;
+import java.util.HashMap;
 import java.util.Map;
 
 import javax.servlet.http.HttpServletRequest;
@@ -9,6 +10,7 @@ import javax.servlet.http.HttpSession;
 
 import org.cacert.gigi.GigiApiException;
 import org.cacert.gigi.localisation.Language;
+import org.cacert.gigi.pages.LoginPage;
 import org.cacert.gigi.util.RandomToken;
 
 /**
@@ -60,6 +62,32 @@ public abstract class Form implements Outputable {
      */
     public abstract boolean submit(PrintWriter out, HttpServletRequest req) throws GigiApiException;
 
+    /**
+     * Calls {@link #submit(PrintWriter, HttpServletRequest)} while catching and
+     * displaying errors ({@link GigiApiException}), and re-outputing the form
+     * via {@link #output(PrintWriter, Language, Map)}.
+     * 
+     * @param out
+     *            the target to write the form and errors to
+     * @param req
+     *            the request that this submit originated (for submit and for
+     *            language)
+     * @return as {@link #submit(PrintWriter, HttpServletRequest)}: true, iff
+     *         the form succeeded and the user should be redirected.
+     */
+    public boolean submitProtected(PrintWriter out, HttpServletRequest req) {
+        try {
+            boolean succeeded = submit(out, req);
+            if (succeeded) {
+                return true;
+            }
+        } catch (GigiApiException e) {
+            e.format(out, LoginPage.getLanguage(req));
+        }
+        output(out, LoginPage.getLanguage(req), new HashMap<String, Object>());
+        return false;
+    }
+
     protected String getCsrfFieldName() {
         return CSRF_FIELD;
     }
index 4e80123af307fcba1ae4d99b579f5a61c5b9bc08..568c8a3ad42521ccc8f3e81573ce2128dc3c6ae3 100644 (file)
@@ -12,7 +12,6 @@ import org.cacert.gigi.localisation.Language;
 import org.cacert.gigi.output.template.Form;
 import org.cacert.gigi.output.template.IterableDataset;
 import org.cacert.gigi.output.template.Template;
-import org.cacert.gigi.pages.Page;
 
 public class DomainManagementForm extends Form {
 
@@ -29,20 +28,15 @@ public class DomainManagementForm extends Form {
     }
 
     @Override
-    public boolean submit(PrintWriter out, HttpServletRequest req) {
-        try {
-            String dels = req.getParameter("delete");
+    public boolean submit(PrintWriter out, HttpServletRequest req) throws GigiApiException {
+        String dels = req.getParameter("delete");
 
-            int delId = Integer.parseInt(dels);
-            Domain d = Domain.getById(delId);
-            if (d != null && d.getOwner() == target) {
-                d.delete();
-            } else {
-                throw new GigiApiException("Domain was not found.");
-            }
-        } catch (GigiApiException e) {
-            e.format(out, Page.getLanguage(req));
-            return false;
+        int delId = Integer.parseInt(dels);
+        Domain d = Domain.getById(delId);
+        if (d != null && d.getOwner() == target) {
+            d.delete();
+        } else {
+            throw new GigiApiException("Domain was not found.");
         }
         return true;
     }
index 9c379218d06fc98bd8906fa0fc1a801c6e8c90ad..c4b91ad0a16dc31015fb3754dbc6ec44ad0c9dd1 100644 (file)
@@ -91,7 +91,7 @@ public class DomainOverview extends Page {
             }
         } else if (req.getParameter("domdel") != null) {
             DomainManagementForm f = Form.getForm(req, DomainManagementForm.class);
-            if (f.submit(resp.getWriter(), req)) {
+            if (f.submitProtected(resp.getWriter(), req)) {
                 resp.sendRedirect(PATH);
             }
         }
index 4d6a38798ac34603ea74eebcc764f6ddbfded230..eaf8ad289ad227d1f26990b9350a3059b89aeada 100644 (file)
@@ -29,8 +29,8 @@ public class CreateOrgPage extends Page {
 
     @Override
     public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
+        CreateOrgForm form = Form.getForm(req, CreateOrgForm.class);
         try {
-            CreateOrgForm form = Form.getForm(req, CreateOrgForm.class);
             if (form.submit(resp.getWriter(), req)) {
                 resp.sendRedirect(ViewOrgPage.DEFAULT_PATH + "/" + form.getResult().getId());
                 return;
@@ -38,6 +38,7 @@ public class CreateOrgPage extends Page {
         } catch (GigiApiException e) {
             e.format(resp.getWriter(), getLanguage(req));
         }
+        form.output(resp.getWriter(), getLanguage(req), new HashMap<String, Object>());
     }
 
     @Override
index 17ad0707b9737497789c85ecc9b6c002a1d9d84d..98f7635362b21c24fe92bd32304b7a74bbe8ef35 100644 (file)
@@ -9,7 +9,6 @@ import java.util.Map;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
-import org.cacert.gigi.GigiApiException;
 import org.cacert.gigi.dbObjects.Organisation;
 import org.cacert.gigi.dbObjects.User;
 import org.cacert.gigi.localisation.Language;
@@ -40,41 +39,37 @@ public class ViewOrgPage extends Page {
 
     @Override
     public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
-        try {
-            User u = LoginPage.getUser(req);
-            if (req.getParameter("do_affiliate") != null || req.getParameter("del") != null) {
-                AffiliationForm form = Form.getForm(req, AffiliationForm.class);
-                if (form.submit(resp.getWriter(), req)) {
+        User u = LoginPage.getUser(req);
+        if (req.getParameter("do_affiliate") != null || req.getParameter("del") != null) {
+            AffiliationForm form = Form.getForm(req, AffiliationForm.class);
+            if (form.submitProtected(resp.getWriter(), req)) {
+                resp.sendRedirect(DEFAULT_PATH + "/" + form.getOrganisation().getId());
+            }
+            return;
+        } else {
+            if ( !u.isInGroup(CreateOrgPage.ORG_ASSURER)) {
+                resp.sendError(403, "Access denied");
+                return;
+            }
+
+            if (req.getParameter("addDomain") != null) {
+                OrgDomainAddForm form = Form.getForm(req, OrgDomainAddForm.class);
+                if (form.submitProtected(resp.getWriter(), req)) {
                     resp.sendRedirect(DEFAULT_PATH + "/" + form.getOrganisation().getId());
                 }
-                return;
-            } else {
-                if ( !u.isInGroup(CreateOrgPage.ORG_ASSURER)) {
-                    resp.sendError(403, "Access denied");
-                    return;
+            } else if (req.getParameter("delete") != null) {
+                DomainManagementForm form = Form.getForm(req, DomainManagementForm.class);
+                if (form.submitProtected(resp.getWriter(), req)) {
+                    resp.sendRedirect(DEFAULT_PATH + "/" + form.getTarget().getId());
                 }
-
-                if (req.getParameter("addDomain") != null) {
-                    OrgDomainAddForm form = Form.getForm(req, OrgDomainAddForm.class);
-                    if (form.submit(resp.getWriter(), req)) {
-                        resp.sendRedirect(DEFAULT_PATH + "/" + form.getOrganisation().getId());
-                    }
-                } else if (req.getParameter("delete") != null) {
-                    DomainManagementForm form = Form.getForm(req, DomainManagementForm.class);
-                    if (form.submit(resp.getWriter(), req)) {
-                        resp.sendRedirect(DEFAULT_PATH + "/" + form.getTarget().getId());
-                    }
-                } else {
-                    CreateOrgForm form = Form.getForm(req, CreateOrgForm.class);
-                    if (form.submit(resp.getWriter(), req)) {
-                        resp.sendRedirect(DEFAULT_PATH + "/" + form.getResult().getId());
-                    }
+            } else {
+                CreateOrgForm form = Form.getForm(req, CreateOrgForm.class);
+                if (form.submitProtected(resp.getWriter(), req)) {
+                    resp.sendRedirect(DEFAULT_PATH + "/" + form.getResult().getId());
                 }
             }
-
-        } catch (GigiApiException e) {
-            e.format(resp.getWriter(), getLanguage(req));
         }
+
     }
 
     @Override