diff options
Diffstat (limited to 'extensions/Review/lib')
-rw-r--r-- | extensions/Review/lib/WebService.pm | 33 |
1 files changed, 30 insertions, 3 deletions
diff --git a/extensions/Review/lib/WebService.pm b/extensions/Review/lib/WebService.pm index 8d10b5423..b3baf509a 100644 --- a/extensions/Review/lib/WebService.pm +++ b/extensions/Review/lib/WebService.pm @@ -15,7 +15,7 @@ use base qw(Bugzilla::WebService); use Bugzilla::Bug; use Bugzilla::Component; use Bugzilla::Error; -use Bugzilla::Util qw(detaint_natural); +use Bugzilla::Util qw(detaint_natural trick_taint); use Bugzilla::WebService::Util 'filter'; sub suggestions { @@ -83,6 +83,15 @@ sub flag_activity { $match_criteria{flag_id} = $flag_id; } + if (my $flag_ids = $params->{flag_ids}) { + foreach my $flag_id (@$flag_ids) { + detaint_natural($flag_id) + or ThrowUserError('invalid_flag_id', { flag_id => $flag_id }); + } + + $match_criteria{flag_id} = $flag_ids; + } + if (my $type_id = $params->{type_id}) { detaint_natural($type_id) or ThrowUserError('invalid_flag_type_id', { type_id => $type_id }); @@ -90,6 +99,12 @@ sub flag_activity { $match_criteria{type_id} = $type_id; } + if (my $type_name = $params->{type_name}) { + trick_taint($type_name); + my $flag_types = Bugzilla::FlagType::match({ name => $type_name }); + $match_criteria{type_id} = [map { $_->id } @$flag_types]; + } + for my $user_field (qw( requestee setter )) { if (my $user_name = $params->{$user_field}) { my $user = Bugzilla::User->check({ name => $user_name, cache => 1, _error => 'invalid_username' }); @@ -178,6 +193,14 @@ sub rest_resources { }, }, }, + qr{^/review/flag_activity/type_name/(\w+)$}, { + GET => { + method => 'flag_activity', + params => sub { + return { type_name => $_[0] } + }, + }, + }, # flag activity by user qr{^/review/flag_activity/(requestee|setter|type_id)/(.*)$}, { GET => { @@ -335,13 +358,15 @@ Returns the history of flag status changes based on requestee, setter, flag_id, =item B<REST> -GET /rest/review/flag_activity/C<flag-id> +GET /rest/review/flag_activity/C<flag_id> GET /rest/review/flag_activity/requestee/C<requestee> GET /rest/review/flag_activity/setter/C<setter> -GET /rest/review/flag_activity/type_id/C<type-id> +GET /rest/review/flag_activity/type_id/C<type_id> + +GET /rest/review/flag_activity/type/C<type_name> GET /rest/review/flag_activity @@ -363,6 +388,8 @@ Note that searching by C<flag_id> is not reliable because when flags are removed =item C<type_id> (int) - The flag type id of a change +=item C<type_name> (string) - the flag type name of a change + =back =item B<Returns> |