From 3a2310f50a97c551317fa3622e17feb3d6445b99 Mon Sep 17 00:00:00 2001 From: Nigel Kukard <nkukard@lbsd.net> Date: Tue, 26 Nov 2013 21:29:28 +0000 Subject: [PATCH] Better URI parsing --- .../plugins/webserver/pages/configmanager.pm | 8 ++++---- .../plugins/webserver/pages/limits.pm | 10 +++++----- .../plugins/webserver/pages/statistics.pm | 6 +++--- opentrafficshaper/utils.pm | 14 ++++++++++---- 4 files changed, 22 insertions(+), 16 deletions(-) diff --git a/opentrafficshaper/plugins/webserver/pages/configmanager.pm b/opentrafficshaper/plugins/webserver/pages/configmanager.pm index b180a9f..08be843 100644 --- a/opentrafficshaper/plugins/webserver/pages/configmanager.pm +++ b/opentrafficshaper/plugins/webserver/pages/configmanager.pm @@ -211,7 +211,7 @@ sub override_addedit # We need a ID first of all... if (defined($queryParams->{'oid'})) { # Check if we get some data back when pulling the override from the backend - if (defined($formData = getOverride($queryParams->{'oid'}))) { + if (defined($formData = getOverride($queryParams->{'oid'}->{'value'}))) { # Setup our checkboxes foreach my $checkbox (@formElementCheckboxes) { if (defined($formData->{$checkbox})) { @@ -223,7 +223,7 @@ sub override_addedit # XXX - TODO # If we didn't get any data, then something went wrong } else { - my $encodedID = encode_entities($queryParams->{'oid'}); + my $encodedID = encode_entities($queryParams->{'oid'}->{'value'}); push(@errors,"Override data could not be loaded using oid '$encodedID'"); } # Lastly if we were given a oid, this is actually an edit @@ -600,10 +600,10 @@ EOF } # Grab the override - my $override = getOverride($queryParams->{'oid'}); + my $override = getOverride($queryParams->{'oid'}->{'value'}); # Make the oid safe for HTML - my $encodedID = encode_entities($queryParams->{'oid'}); + my $encodedID = encode_entities($queryParams->{'oid'}->{'value'}); # Make sure the oid was valid... we would have an override now if it was if (!defined($override)) { diff --git a/opentrafficshaper/plugins/webserver/pages/limits.pm b/opentrafficshaper/plugins/webserver/pages/limits.pm index 9aafe25..b89f14f 100644 --- a/opentrafficshaper/plugins/webserver/pages/limits.pm +++ b/opentrafficshaper/plugins/webserver/pages/limits.pm @@ -110,7 +110,7 @@ EOF # Conditionals if (defined($queryParams->{'source'})) { - if ($limit->{'Source'} ne $queryParams->{'source'}) { + if ($limit->{'Source'} ne $queryParams->{'source'}->{'value'}) { next; } } @@ -323,7 +323,7 @@ sub limit_addedit # We need a key first of all... if (defined($queryParams->{'lid'})) { # Check if we get some data back when pulling the limit from the backend - if (defined($formData = getLimit($queryParams->{'lid'}))) { + if (defined($formData = getLimit($queryParams->{'lid'}->{'value'}))) { # We need to make sure we're only editing our own limits if ($formData->{'Source'} ne "plugin.webserver.limits") { return (HTTP_TEMPORARY_REDIRECT,'limits'); @@ -333,7 +333,7 @@ sub limit_addedit # XXX - TODO # If we didn't get any data, then something went wrong } else { - my $encodedID = encode_entities($queryParams->{'lid'}); + my $encodedID = encode_entities($queryParams->{'lid'}->{'value'}); push(@errors,"Limit data could not be loaded using limit ID '$encodedID'"); } # Lastly if we were given a key, this is actually an edit @@ -702,10 +702,10 @@ EOF } # Grab the limit - my $limit = getLimit($queryParams->{'lid'}); + my $limit = getLimit($queryParams->{'lid'}->{'value'}); # Make the key safe for HTML - my $encodedLID = encode_entities($queryParams->{'lid'}); + my $encodedLID = encode_entities($queryParams->{'lid'}->{'value'}); # Make sure the limit ID is valid... we would have a limit now if it was if (!defined($limit)) { diff --git a/opentrafficshaper/plugins/webserver/pages/statistics.pm b/opentrafficshaper/plugins/webserver/pages/statistics.pm index d3dd930..b5018dc 100644 --- a/opentrafficshaper/plugins/webserver/pages/statistics.pm +++ b/opentrafficshaper/plugins/webserver/pages/statistics.pm @@ -74,7 +74,7 @@ EOF goto END; } # Check if we get some data back when pulling the limit from the backend - if (!defined($limit = getLimit($queryParams->{'lid'}))) { + if (!defined($limit = getLimit($queryParams->{'lid'}->{'value'}))) { $content .=<<EOF; <tr class="info"> <td colspan="8"><p class="text-center">No Results</p></td> @@ -144,12 +144,12 @@ sub databylimit } my $limit; - if (!defined($limit = getLimit($queryParams->{'lid'}))) { + if (!defined($limit = getLimit($queryParams->{'lid'}->{'value'}))) { return (HTTP_OK,{ 'error' => 'Invalid limit' },{ 'type' => 'json' }); } # Pull in stats data - my $statsData = opentrafficshaper::plugins::statistics::getStatsByLID($queryParams->{'lid'}); + my $statsData = opentrafficshaper::plugins::statistics::getStatsByLID($queryParams->{'lid'}->{'value'}); # First stage refinement my $rawData; diff --git a/opentrafficshaper/utils.pm b/opentrafficshaper/utils.pm index efdbc0c..88589fd 100644 --- a/opentrafficshaper/utils.pm +++ b/opentrafficshaper/utils.pm @@ -79,17 +79,23 @@ sub parseFormContent return \%res; } + # Parse query data sub parseURIQuery { my $request = shift; my %res; - use URI::QueryParam; - # Pull in URL params - foreach my $key ($request->uri->query_param) { - $res{$key} = $request->uri->query_param($key); + # Grab URI components + my @components = $request->uri->query_form; + # Loop with the components in sets of name & value + while (@components) { + my ($name,$value) = (shift(@components),shift(@components)); + + # Store values and the last value we go + push(@{$res{$name}->{'values'}},$value); + $res{$name}->{'value'} = $value; } return \%res; -- GitLab