init III
This commit is contained in:
67
Perl OTRS/Kernel/cpan-lib/CPAN/Audit/Query.pm
Normal file
67
Perl OTRS/Kernel/cpan-lib/CPAN/Audit/Query.pm
Normal file
@@ -0,0 +1,67 @@
|
||||
package CPAN::Audit::Query;
|
||||
use strict;
|
||||
use warnings;
|
||||
use CPAN::Audit::Version;
|
||||
|
||||
sub new {
|
||||
my $class = shift;
|
||||
my (%params) = @_;
|
||||
|
||||
my $self = {};
|
||||
bless $self, $class;
|
||||
|
||||
$self->{db} = $params{db} || {};
|
||||
|
||||
return $self;
|
||||
}
|
||||
|
||||
sub advisories_for {
|
||||
my $self = shift;
|
||||
my ( $distname, $version_range ) = @_;
|
||||
|
||||
my $dist = $self->{db}->{dists}->{$distname};
|
||||
return unless $dist;
|
||||
|
||||
my @advisories = @{ $dist->{advisories} };
|
||||
my @versions = @{ $dist->{versions} };
|
||||
|
||||
if ( !$version_range ) {
|
||||
return @advisories;
|
||||
}
|
||||
|
||||
my $version_checker = CPAN::Audit::Version->new;
|
||||
|
||||
my @all_versions = map { $_->{version} } @versions;
|
||||
my @selected_versions;
|
||||
|
||||
foreach my $version (@all_versions) {
|
||||
if ( $version_checker->in_range( $version, $version_range ) ) {
|
||||
push @selected_versions, $version;
|
||||
}
|
||||
}
|
||||
|
||||
if ( !@selected_versions ) {
|
||||
return;
|
||||
}
|
||||
|
||||
my @matched_advisories;
|
||||
foreach my $advisory (@advisories) {
|
||||
my @affected_versions = $version_checker->affected_versions( \@all_versions, $advisory->{affected_versions} );
|
||||
next unless @affected_versions;
|
||||
|
||||
foreach my $affected_version ( reverse @affected_versions ) {
|
||||
if ( $version_checker->in_range( $affected_version, $version_range ) ) {
|
||||
push @matched_advisories, $advisory;
|
||||
last;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ( !@matched_advisories ) {
|
||||
return;
|
||||
}
|
||||
|
||||
return @matched_advisories;
|
||||
}
|
||||
|
||||
1;
|
||||
Reference in New Issue
Block a user