summaryrefslogtreecommitdiff
path: root/httemplate/elements
diff options
context:
space:
mode:
authorivan <ivan>2010-11-27 03:55:07 +0000
committerivan <ivan>2010-11-27 03:55:07 +0000
commit02a6bfc2dba1a1f9c1efcd7d7da258b33be76d30 (patch)
tree8e17e022feffadaaed19a6db1d6e630d7656a5e5 /httemplate/elements
parent4d510fab209dcfd9e6ec75a55ee653593e2d1435 (diff)
fix "URL limit exceeded" when errors are present on quick payment entry, RT#9917
Diffstat (limited to 'httemplate/elements')
-rw-r--r--httemplate/elements/create_uri_query25
-rw-r--r--httemplate/elements/handle_uri_query8
2 files changed, 33 insertions, 0 deletions
diff --git a/httemplate/elements/create_uri_query b/httemplate/elements/create_uri_query
new file mode 100644
index 000000000..32d8e2f87
--- /dev/null
+++ b/httemplate/elements/create_uri_query
@@ -0,0 +1,25 @@
+<% $query %>\
+<%init>
+
+my $query = $cgi->query_string;
+
+if ( length($query) > 1920 ) { #stupid IE 2083 URL limit
+
+ my $session = int(rand(4294967296)); #XXX
+ my $pref = new FS::access_user_pref({
+ 'usernum' => $FS::CurrentUser::CurrentUser->usernum,
+ 'prefname' => "redirect$session",
+ 'prefvalue' => $query,
+ 'expiration' => time + 3600, #1h? 1m?
+ });
+ my $pref_error = $pref->insert;
+ if ( $pref_error ) {
+ die "FATAL: couldn't even set redirect cookie: $pref_error".
+ " attempting to set redirect$session to $query\n";
+ }
+
+ $query = "redirect=$session";
+
+}
+
+</%init>
diff --git a/httemplate/elements/handle_uri_query b/httemplate/elements/handle_uri_query
new file mode 100644
index 000000000..eb7ea1ae1
--- /dev/null
+++ b/httemplate/elements/handle_uri_query
@@ -0,0 +1,8 @@
+<%init>
+if ( $cgi->param('redirect') ) {
+ my $session = $cgi->param('redirect');
+ my $pref = $FS::CurrentUser::CurrentUser->option("redirect$session");
+ die "unknown redirect session $session\n" unless length($pref);
+ $cgi = new CGI($pref);
+}
+</%init>