diff options
Diffstat (limited to 'Bugzilla/WebService/Server')
-rw-r--r-- | Bugzilla/WebService/Server/REST.pm | 33 |
1 files changed, 12 insertions, 21 deletions
diff --git a/Bugzilla/WebService/Server/REST.pm b/Bugzilla/WebService/Server/REST.pm index cd4536b97..69f97ef08 100644 --- a/Bugzilla/WebService/Server/REST.pm +++ b/Bugzilla/WebService/Server/REST.pm @@ -347,28 +347,11 @@ sub _retrieve_json_params { my $params = {}; %{$params} = %{ Bugzilla->input_params }; - # First add any parameters we were able to pull out of the path - # based on the resource regexp and combine with the normal URL - # parameters. - if (my $rest_params = $self->bz_rest_params) { - foreach my $param (keys %$rest_params) { - if (!exists $params->{$param}) { - $params->{$param} = $rest_params->{$param}; - next; - } - my @values = ref $rest_params->{$param} - ? @{ $rest_params->{$param} } - : ($rest_params->{$param}); - if (ref $params->{$param}) { - push(@{ $params->{$param} }, @values); - } - else { - $params->{$param} = [ $params->{$param}, @values ]; - } - } - } + # First add any params we were able to pull out of the path + # based on the resource regexp + %{$params} = (%{$params}, %{$self->bz_rest_params}) if $self->bz_rest_params; - # Merge any additional query key/values from the request body if non-GET. + # Merge any additional query key/values with $obj->{params} if not a GET request # We do this manually cause CGI.pm doesn't understand JSON strings. if ($self->request->method ne 'GET') { my $extra_params = {}; @@ -379,6 +362,14 @@ sub _retrieve_json_params { ThrowUserError('json_rpc_invalid_params', { err_msg => $@ }); } } + + # Allow parameters in the query string if request was not GET. + # Note: query string parameters will override any matching params + # also specified in the request body. + foreach my $param ($self->cgi->url_param()) { + $extra_params->{$param} = $self->cgi->url_param($param); + } + %{$params} = (%{$params}, %{$extra_params}) if %{$extra_params}; } |