diff --git a/lib/MetaCPAN/Web/Model/API/Permission.pm b/lib/MetaCPAN/Web/Model/API/Permission.pm index 82aba9a9ee..724d5da630 100644 --- a/lib/MetaCPAN/Web/Model/API/Permission.pm +++ b/lib/MetaCPAN/Web/Model/API/Permission.pm @@ -14,6 +14,7 @@ MetaCPAN::Web::Model::Permission - Catalyst Model for 06perms sub get { my ( $self, $type, $name ) = @_; + return Future->done(undef) unless $name; if ( $type eq 'module' ) { return $self->request( '/permission/' . $name )->transform( @@ -34,59 +35,30 @@ sub get { } sub _get_author_modules { - my $self = shift; - my $name = shift; - - my $search = { - query => { - bool => { - should => [ - { term => { owner => $name } }, - { term => { co_maintainers => $name } }, - ], - }, - }, - size => 5_000, - }; - - return $self->_search_perms($search); + my ( $self, $name ) = @_; + + $self->request("/permission/by_author/$name")->transform( + done => sub { + $_[0]->{permissions}; + } + ); } sub _get_modules_in_distribution { - my $self = shift; - my $name = shift; - return Future->done(undef) unless $name; + my ( $self, $name ) = @_; $self->request("/package/modules/$name")->then( sub { my $res = shift; - my @modules = $res->{modules} ? @{ $res->{modules} } : undef; - - return Future->done(undef) unless @modules; - - my @perm_search - = map { +{ term => { module_name => $_ } } } @modules; - - my $search = { - query => { bool => { should => \@perm_search } }, - size => 1_000, - }; - - return $self->_search_perms($search); - } - ); -} - -sub _search_perms { - my $self = shift; - my $search = shift; - - $self->request( '/permission/_search', $search )->transform( - done => sub { - my $perms = shift; - my @perms = sort { $a->{module_name} cmp $b->{module_name} } - map { $_->{_source} } @{ $perms->{hits}->{hits} }; - return @perms ? \@perms : undef; + return Future->done(undef) + unless keys %{$res}; + + $self->request( '/permission/by_module', + { module => $res->{modules} } )->transform( + done => sub { + $_[0]->{permissions}; + } + ); } ); }