diff options
author | ivan <ivan> | 2010-11-27 03:55:07 +0000 |
---|---|---|
committer | ivan <ivan> | 2010-11-27 03:55:07 +0000 |
commit | 02a6bfc2dba1a1f9c1efcd7d7da258b33be76d30 (patch) | |
tree | 8e17e022feffadaaed19a6db1d6e630d7656a5e5 /httemplate/elements | |
parent | 4d510fab209dcfd9e6ec75a55ee653593e2d1435 (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_query | 25 | ||||
-rw-r--r-- | httemplate/elements/handle_uri_query | 8 |
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> |