package RT::Condition::CIFMinimal_Stale;
use strict;
use warnings;
use base 'RT::Condition::Generic';
use DateTime;
use DateTime::Format::DateParse;
use Regexp::Common qw/net/;
use Regexp::Common::net::CIDR;
my $map = RT->Config->Get('CIFMinimal_StaleMap');
sub IsApplicable {
my $self = shift;
my $tkt = $self->TicketObj();
my $arg = $self->Argument() || return;
my $regex = qr/^$RE{'net'}{'IPv4'}$/;
for($arg){
if($arg eq 'ipv4-net'){
$regex = qr/^$RE{'net'}{'CIDR'}{'IPv4'}$/;
last;
}
if($arg eq 'domain'){
$regex = qr/^[a-zA-Z0-9-.]+\.[a-z]{2,5}$/;
last;
}
if($arg eq 'url'){
$regex = qr/^https?\:\/\/[a-zA-Z0-9-.]+\.[a-z]{2,5}/;
last;
}
}
$arg = $map->{$arg} || return;
my $addr = $tkt->FirstCustomFieldValue('Address') || $tkt->FirstCustomFieldAddress('Hash');
my $impact = $tkt->FirstCustomFieldValue('Assessment Impact');
return(1) unless($addr);
return(0) unless(($addr && $addr =~ $regex) || lc($impact) =~ /whitelist/);
if(lc($impact) =~ /whitelist/){
$arg = $map->{'whitelist'};
}
$arg = (time() - ($arg * 86400));
my $lastupdated = $self->TicketObj->LastUpdatedObj->AsString();
$lastupdated = DateTime::Format::DateParse->parse_datetime($lastupdated);
return(0) unless($lastupdated->epoch() < $arg);
$RT::Logger->debug('Ticket: '.$tkt->Id());
return(1);
}
1;