This patch simplifies use of PerForm within SSL. I had the problem that when I did a simple redirect (relative path) from my PerForm XSP, it would try to redirect to http instead of https. I noticed that webutils has a 'secure' param already so I made the 'submit' and 'cancel' subs in perform return a 'secure' flag as well as the redirect path. The fix is backward compatible if the secure flag is missing, behaviour is as before.

--- PerForm.pm  2003-08-11 02:43:56.000000000 +1000
+++ /usr/lib/perl5/site_perl/5.8.0/AxKit/XSP/PerForm.pm 2003-08-14 
21:40:25.000000000 +1000
@@ -129,12 +129,13 @@
         if (\$cgi->param(\$cancel)) {
             no strict 'refs';
             my \$redirect;
+           my \$secure;
             \$redirect = \$_cancel_goto{\$cancel};
             if (my \$sub = \$package->can(\$_cancel_index{\$cancel}{oncancel} 
|| '$oncancel' || "cancel_\$_cancel_index{\$cancel}{name}")) {
-                \$redirect = \$sub->(\$_form_ctxt, 
\$_cancel_index{\$cancel}{'index'});
+                (\$redirect, \$secure) = \$sub->(\$_form_ctxt, 
\$_cancel_index{\$cancel}{'index'});
             }
             if (\$redirect) {
-                return 
AxKit::XSP::WebUtils::redirect(\$redirect,undef,undef,1);
+                return 
AxKit::XSP::WebUtils::redirect(\$redirect,undef,\$secure,1);
             }
         }
     }
@@ -145,12 +146,13 @@
         if (\$cgi->param(\$submit)) {
             no strict 'refs';
             my \$redirect;
+           my \$secure;
             \$redirect = \$_submit_goto{\$submit};
             if (my \$sub = \$package->can(\$_submit_index{\$submit}{onsubmit} 
|| '$onsubmit' || "submit_\$_submit_index{\$submit}{name}")) {
-                \$redirect = \$sub->(\$_form_ctxt, 
\$_submit_index{\$submit}{'index'});
+                (\$redirect, \$secure) = \$sub->(\$_form_ctxt, 
\$_submit_index{\$submit}{'index'});
             }
             if (\$redirect) {
-                return 
AxKit::XSP::WebUtils::redirect(\$redirect,undef,undef,1);
+                return 
AxKit::XSP::WebUtils::redirect(\$redirect,undef,\$secure,1);
             }
         }
     }
@@ -160,11 +162,12 @@
 if (\$cgi->param('__submitting_$name') && !\$_form_ctxt->{_Failed}) {
     no strict 'refs';
     my \$redirect;
+    my \$secure;
     if (my \$sub = \$package->can('$onsubmit')) {
-        \$redirect = \$sub->(\$_form_ctxt);
+        (\$redirect, \$secure) = \$sub->(\$_form_ctxt);
     }
     if (\$redirect) {
-        return AxKit::XSP::WebUtils::redirect(\$redirect, undef, undef, 1);
+        return AxKit::XSP::WebUtils::redirect(\$redirect, undef, \$secure, 1);
     }
 }
 
@@ -1061,6 +1064,10 @@
 The return value from submit_<name> is used to redirect the user to the
 "next" page, whatever that might be.
 
+When using SSL, the return value can optionally be a list where the first 
+item is the redirect string and the second value specifies whether the 
+destination should be secure (https).
+
 =back
 
 =head2 <f:cancel/>
@@ -1085,6 +1092,10 @@
 want to redirect to. This can be used to dynamically generate the URI to
 redirect to.
 
+When using SSL, the return value can optionally be a list where the first 
+item is the redirect string and the second value specifies whether the 
+destination should be secure (https).
+
 =back
 
 =head2 <f:textfield/>

Reply via email to