aboutsummaryrefslogtreecommitdiffstats
path: root/Bugzilla/WebService/Server
diff options
context:
space:
mode:
authorDavid Lawrence <dkl@mozilla.com>2014-10-29 18:45:39 +0000
committerDavid Lawrence <dkl@mozilla.com>2014-10-29 18:49:40 +0000
commita3e9de58fe28268f0168af88cd6d69ae15e1e8c9 (patch)
tree5c4e72bdacaf4ec821e8fe3c8193f65c714217b0 /Bugzilla/WebService/Server
parent1dec043144e9f72da71ecb086f446d60471ebca0 (diff)
downloadbugs-a3e9de58fe28268f0168af88cd6d69ae15e1e8c9.tar
bugs-a3e9de58fe28268f0168af88cd6d69ae15e1e8c9.tar.gz
bugs-a3e9de58fe28268f0168af88cd6d69ae15e1e8c9.tar.bz2
bugs-a3e9de58fe28268f0168af88cd6d69ae15e1e8c9.tar.xz
bugs-a3e9de58fe28268f0168af88cd6d69ae15e1e8c9.zip
Bug 1088253: GET REST calls should allow arbitrary URL parameters to be passed in addition the values in the path
r=glob,a=glob
Diffstat (limited to 'Bugzilla/WebService/Server')
-rw-r--r--Bugzilla/WebService/Server/REST.pm33
-rw-r--r--Bugzilla/WebService/Server/REST/Resources/Bug.pm5
2 files changed, 26 insertions, 12 deletions
diff --git a/Bugzilla/WebService/Server/REST.pm b/Bugzilla/WebService/Server/REST.pm
index 5ab973f1a..83a796daf 100644
--- a/Bugzilla/WebService/Server/REST.pm
+++ b/Bugzilla/WebService/Server/REST.pm
@@ -337,11 +337,28 @@ sub _retrieve_json_params {
my $params = {};
%{$params} = %{ Bugzilla->input_params };
- # 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;
+ # 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 ];
+ }
+ }
+ }
- # Merge any additional query key/values with $obj->{params} if not a GET request
+ # Merge any additional query key/values from the request body if non-GET.
# We do this manually cause CGI.pm doesn't understand JSON strings.
if ($self->request->method ne 'GET') {
my $extra_params = {};
@@ -352,14 +369,6 @@ 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};
}
diff --git a/Bugzilla/WebService/Server/REST/Resources/Bug.pm b/Bugzilla/WebService/Server/REST/Resources/Bug.pm
index cf9f054c7..3fa8b65cf 100644
--- a/Bugzilla/WebService/Server/REST/Resources/Bug.pm
+++ b/Bugzilla/WebService/Server/REST/Resources/Bug.pm
@@ -29,6 +29,11 @@ sub _rest_resources {
status_code => STATUS_CREATED
}
},
+ qr{^/bug/$}, {
+ GET => {
+ method => 'get'
+ }
+ },
qr{^/bug/([^/]+)$}, {
GET => {
method => 'get',