diff options
author | David Lawrence <dkl@mozilla.com> | 2014-10-29 19:45:39 +0100 |
---|---|---|
committer | David Lawrence <dkl@mozilla.com> | 2014-10-29 19:45:39 +0100 |
commit | 38d2f3ab2c59f1ef9636990854fb9314dd8799d6 (patch) | |
tree | df20b02b90b5b47d157c42b9ad5aa52bf181a155 /Bugzilla/WebService/Server | |
parent | 9e0278d6debefbeaff7a219695d49ca0c789f150 (diff) | |
download | bugzilla-38d2f3ab2c59f1ef9636990854fb9314dd8799d6.tar.gz bugzilla-38d2f3ab2c59f1ef9636990854fb9314dd8799d6.tar.xz |
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.pm | 33 | ||||
-rw-r--r-- | Bugzilla/WebService/Server/REST/Resources/Bug.pm | 5 |
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', |