package Iodef::Pb::Simple::Plugin::Assessment; use base 'Iodef::Pb::Simple::Plugin'; use strict; use warnings; sub process { my $self = shift; my $data = shift; my $iodef = shift; return unless($data->{'assessment'} || $data->{'Assessment'} || $data->{'impact'}); my $assessment = $data->{'Assessment'} || $data->{'assessment'} || $data->{'impact'}; my $severity = $data->{'severity'}; my $confidence = $data->{'confidence'} || ''; # assume if it's an ARRAY, we're passing an array of AssessmentType's unless(ref($assessment) eq 'AssessmentType' || ref($assessment) eq 'ARRAY'){ unless(ref($severity) eq 'SeverityType::severity_type'){ my $sev = SeverityType::severity_type_low(); for(lc($severity)){ if(/^high$/){ $sev = SeverityType::severity_type_high(), last; } if(/^medium$/){ $sev = SeverityType::severity_type_medium(), last; } } $severity = $sev; } my $impact = ImpactType->new({ lang => $data->{'lang'}, content => MLStringType->new({ lang => $data->{'lang'}, content => $assessment, }), severity => $severity, }); my $rating; unless(ref($confidence) eq 'ConfidenceType'){ for($confidence){ if(/^\d+/){ $rating = ConfidenceType::ConfidenceRating::Confidence_rating_numeric(); last; } $confidence = ''; if(/^high$/){ $rating = ConfidenceType::ConfidenceRating::Confidence_rating_high(); last; } if(/^medium$/){ $rating = ConfidenceType::ConfidenceRating::Confidence_rating_medium(); last; } if(/^low$/){ $rating = ConfidenceType::ConfidenceRating::Confidence_rating_low(); last; } } $confidence = ConfidenceType->new({ rating => $rating, content => $confidence, }); } $assessment = AssessmentType->new({ Impact => [$impact], Confidence => $confidence, }); } my $incident = @{$iodef->get_Incident()}[0]; push(@{$incident->{'Assessment'}},$assessment); } 1;