|
From: <mb...@re...> - 2005-02-28 11:13:22
|
Author: mbooth
Date: 2005-02-28 12:11:51 +0100 (Mon, 28 Feb 2005)
New Revision: 310
Modified:
ccm-core/trunk/src/com/arsdigita/formbuilder/actions/ConfirmRedirectListener.java
ccm-core/trunk/src/com/arsdigita/formbuilder/ui/editors/ConfirmRedirectForm.java
Log:
Don't use DispatcherHelper to send redirect. Add validation listener to URL to prevent entry of an invalid redirect URL.
Modified: ccm-core/trunk/src/com/arsdigita/formbuilder/actions/ConfirmRedirectListener.java
===================================================================
--- ccm-core/trunk/src/com/arsdigita/formbuilder/actions/ConfirmRedirectListener.java 2005-02-28 11:10:00 UTC (rev 309)
+++ ccm-core/trunk/src/com/arsdigita/formbuilder/actions/ConfirmRedirectListener.java 2005-02-28 11:11:51 UTC (rev 310)
@@ -18,20 +18,16 @@
*/
package com.arsdigita.formbuilder.actions;
+import com.arsdigita.bebop.event.FormSectionEvent;
+import com.arsdigita.bebop.event.FormProcessListener;
import com.arsdigita.persistence.OID;
import com.arsdigita.persistence.DataObject;
import com.arsdigita.persistence.metadata.ObjectType;
-import com.arsdigita.domain.DataObjectNotFoundException;
+import com.arsdigita.web.RedirectSignal;
-import com.arsdigita.bebop.FormProcessException;
-import com.arsdigita.bebop.event.FormSectionEvent;
-
import com.arsdigita.formbuilder.PersistentProcessListener;
import java.math.BigDecimal;
-import com.arsdigita.bebop.event.FormProcessListener;
-import com.arsdigita.dispatcher.DispatcherHelper;
-import com.arsdigita.util.UncheckedWrapperException;
public class ConfirmRedirectListener extends PersistentProcessListener {
public static final String BASE_DATA_OBJECT_TYPE =
@@ -55,15 +51,11 @@
super(obj);
}
- public ConfirmRedirectListener(BigDecimal id)
- throws DataObjectNotFoundException {
-
+ public ConfirmRedirectListener(BigDecimal id) {
this(new OID(BASE_DATA_OBJECT_TYPE, id));
}
- public ConfirmRedirectListener(OID oid)
- throws DataObjectNotFoundException {
-
+ public ConfirmRedirectListener(OID oid) {
super(oid);
}
@@ -112,14 +104,8 @@
m_url = url;
}
- public void process(FormSectionEvent e)
- throws FormProcessException {
-
- try {
- DispatcherHelper.sendExternalRedirect(e.getPageState().getResponse(), m_url);
- } catch (java.io.IOException ex) {
- throw new UncheckedWrapperException("Cannot do redirect", ex);
- }
+ public void process(FormSectionEvent e) {
+ throw new RedirectSignal(m_url, true);
}
}
}
Modified: ccm-core/trunk/src/com/arsdigita/formbuilder/ui/editors/ConfirmRedirectForm.java
===================================================================
--- ccm-core/trunk/src/com/arsdigita/formbuilder/ui/editors/ConfirmRedirectForm.java 2005-02-28 11:10:00 UTC (rev 309)
+++ ccm-core/trunk/src/com/arsdigita/formbuilder/ui/editors/ConfirmRedirectForm.java 2005-02-28 11:11:51 UTC (rev 310)
@@ -16,39 +16,31 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
+
package com.arsdigita.formbuilder.ui.editors;
-
-import com.arsdigita.formbuilder.util.GlobalizationUtil ;
-
-
+import com.arsdigita.formbuilder.PersistentProcessListener;
import com.arsdigita.formbuilder.actions.ConfirmRedirectListener;
+import com.arsdigita.formbuilder.util.GlobalizationUtil;
import com.arsdigita.bebop.FormData;
import com.arsdigita.bebop.FormProcessException;
+import com.arsdigita.bebop.ColumnPanel;
import com.arsdigita.bebop.FormSection;
import com.arsdigita.bebop.Label;
+import com.arsdigita.bebop.SingleSelectionModel;
import com.arsdigita.bebop.PageState;
-
import com.arsdigita.bebop.event.FormSectionEvent;
-
+import com.arsdigita.bebop.event.ParameterEvent;
+import com.arsdigita.bebop.event.ParameterListener;
import com.arsdigita.bebop.form.TextField;
-
+import com.arsdigita.bebop.parameters.NotNullValidationListener;
+import com.arsdigita.bebop.parameters.ParameterData;
+import com.arsdigita.bebop.parameters.StringInRangeValidationListener;
import com.arsdigita.bebop.parameters.URLParameter;
-import com.arsdigita.domain.DataObjectNotFoundException;
-
-
-
import java.math.BigDecimal;
-import com.arsdigita.bebop.SingleSelectionModel;
-import com.arsdigita.formbuilder.PersistentProcessListener;
-import com.arsdigita.bebop.parameters.NotNullValidationListener;
-import com.arsdigita.bebop.parameters.StringInRangeValidationListener;
-import com.arsdigita.bebop.ColumnPanel;
-
-
public class ConfirmRedirectForm extends ProcessListenerForm {
private TextField m_url;
@@ -65,6 +57,24 @@
m_url.setSize(50);
m_url.addValidationListener(new NotNullValidationListener());
m_url.addValidationListener(new StringInRangeValidationListener(1, 160));
+ m_url.addValidationListener(new ParameterListener() {
+ // Ensure that the URL is either fully qualified, or an absolute
+ // path.
+ public void validate(ParameterEvent ev)
+ throws FormProcessException
+ {
+ ParameterData data = ev.getParameterData();
+ String value = (String) data.getValue();
+
+ if (null == value) return;
+ if (value.indexOf("://") != -1) return;
+ if (value.startsWith("/")) return;
+
+ data.addError("URL must be either fully qualified, eg http://www.google.co.uk/, or an absolute path, eg /ccm/portal. Relative paths, eg admin/index.jsp, are not allowed.");
+ }
+ });
+
+
section.add(new Label(GlobalizationUtil.globalize("formbuilder.ui.editors.url")), ColumnPanel.RIGHT);
section.add(m_url);
}
@@ -74,9 +84,7 @@
return new ConfirmRedirectListener();
}
- protected PersistentProcessListener getProcessListener(BigDecimal id)
- throws DataObjectNotFoundException {
-
+ protected PersistentProcessListener getProcessListener(BigDecimal id) {
return new ConfirmRedirectListener(id);
}
|