File Coverage

blib/lib/XML/IODEF/Simple.pm
Criterion Covered Total %
statement 12 67 17.9
branch 0 38 0.0
condition 0 21 0.0
subroutine 4 5 80.0
pod n/a
total 16 131 12.2


line stmt bran cond sub pod time code
1             package XML::IODEF::Simple;
2              
3 1     1   43050 use 5.008008;
  1         4  
  1         30  
4 1     1   5 use strict;
  1         1  
  1         29  
5 1     1   4 use warnings;
  1         5  
  1         56  
6              
7             our $VERSION = '0.02';
8             $VERSION = eval $VERSION; # see L
9              
10             require XML::IODEF;
11 1     1   894 use Module::Pluggable require => 1;
  1         11815  
  1         7  
12              
13             # Preloaded methods go here.
14              
15             sub new {
16 0     0     my ($class,$info) = @_;
17            
18 0   0       my $description = lc($info->{'description'}) || 'unknown';
19 0           my $confidence = $info->{'confidence'};
20 0           my $severity = $info->{'severity'};
21 0   0       my $source = $info->{'source'} || 'localhost';
22 0           my $relatedid = $info->{'relatedid'};
23 0           my $alternativeid = $info->{'alternativeid'};
24 0   0       my $alternativeid_restriction = $info->{'alternativeid_restriction'} || 'private';
25 0   0       my $purpose = $info->{'purpose'} || 'mitigation';
26 0           my $reporttime = $info->{'reporttime'};
27 0   0       my $lang = $info->{'lang'} || $info->{'language'} || 'EN';
28              
29 0           my $dt = $info->{'detecttime'};
30             # default it to the hour
31 0 0         unless($dt){
32 0           require DateTime;
33 0           $dt = DateTime->from_epoch(epoch => time());
34 0           $dt = $dt->ymd().'T'.$dt->hour().':00:00Z';
35             }
36 0 0         if($dt =~ /^(\d{4})(\d{2})(\d{2})$/){
37 0           $dt = $1.'-'.$2.'-'.$3.'T00:00:00Z';
38             }
39 0           $info->{'detecttime'} = $dt;
40              
41 0 0         unless($reporttime){
42 0           require DateTime;
43 0           $reporttime = DateTime->from_epoch(epoch => time());
44 0           $reporttime = $reporttime->ymd().'T00:00:00Z';
45             }
46 0 0         if($reporttime =~ /^(\d{4})(\d{2})(\d{2})$/){
47 0           $reporttime = $1.'-'.$2.'-'.$3.'T00:00:00Z';
48             }
49              
50 0           my $iodef = XML::IODEF->new();
51 0           $iodef->add('Incidentlang',$lang);
52 0           $iodef->add('Incidentpurpose',$purpose);
53 0           foreach($class->plugins()){
54 0 0         if($_->prepare($info)){
55 0           $iodef = $_->convert($info,$iodef);
56             }
57             }
58              
59 0 0         if($info->{'IncidentID'}){
60 0           my $xid = $info->{'IncidentID'};
61 0 0         $iodef->add('IncidentIncidentIDrestriction',$xid->{'restriction'}) if($xid->{'restriction'});
62 0 0         $iodef->add('IncidentIncidentIDname',$xid->{'name'}) if($xid->{'name'});
63 0 0         $iodef->add('IncidentIncidentIDinstance',$xid->{'instance'}) if($xid->{'instance'});
64 0 0         $iodef->add('IncidentIncidentID',$xid->{'content'}) if($xid->{'content'});
65             } else {
66 0 0         $iodef->add('IncidentIncidentIDname',$source) if($source);
67             }
68 0 0         $iodef->add('IncidentReportTime',$reporttime) if($reporttime);
69 0 0         $iodef->add('IncidentDetectTime',$dt) if($dt);
70 0 0         $iodef->add('IncidentRelatedActivityIncidentID',$relatedid) if($relatedid);
71 0 0         if($alternativeid){
72 0           $iodef->add('IncidentAlternativeIDIncidentID',$alternativeid);
73 0           $iodef->add('IncidentAlternativeIDIncidentIDrestriction',$alternativeid_restriction);
74             }
75 0   0       $iodef->add('Incidentrestriction',$info->{'restriction'} || 'private');
76 0 0         $iodef->add('IncidentDescription',$description) if($description);
77 0 0         if($confidence){
78 0           $iodef->add('IncidentAssessmentConfidencerating','numeric');
79 0           $iodef->add('IncidentAssessmentConfidence',$confidence);
80             }
81 0           my $impact = $info->{'impact'};
82 0 0 0       $iodef->add('IncidentAssessmentImpact',$impact) if($impact && !$iodef->get('IncidentAssessmentImpact'));
83              
84 0 0 0       if(!$iodef->get('IncidentAssessmentImpactseverity') && $severity && $severity =~ /(low|medium|high)/){
      0        
85 0           warn 'adding sev';
86 0           $iodef->add('IncidentAssessmentImpactseverity',$severity);
87             }
88              
89 0           return $iodef;
90             }
91              
92              
93             1;
94             __END__