#VERSION,2.02
# $Id: nikto_report_csv.plugin 87 2008-11-11 19:13:19Z deity $

###############################################################################
#  Copyright (C) 2007 CIRT, Inc.
#
#  This program is free software; you can redistribute it and/or
#  modify it under the terms of the GNU General Public License
#  as published by the Free Software Foundation; version 2
#  of the License only.
#
#  This program is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#  GNU General Public License for more details.
#
#  You should have received a copy of the GNU General Public License
#  along with this program; if not, write to the Free Software
#  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
###############################################################################

###############################################################################
# PURPOSE
# Reporting
###############################################################################
sub nikto_report_csv_init
{
   my $id =
   {
      name         	=> "reports_csv",
      full_name    	=> "CSV reports",
      author       	=> "Deity",
      description  	=> "Produces a CSV report.",
      report_head       => \&csv_open,
      report_item       => \&csv_item,
      report_format     => 'csv',
      copyright    	=> "2008 CIRT Inc."
   };
   return $id;
}

sub csv_open
{
   my ($file) = @_;
   # Open file and produce header
   open(OUT, ">>$file") || die print STDERR "+ ERROR: Unable to open '$file' for write: $@\n";

   # Write header
   print OUT "\"meta\",\"meta\",\"$NIKTO{name}\",\"v$NIKTO{version}/$NIKTO{core_version}\"\n";
   return OUT;
}

sub csv_item
{
   my ($handle, $mark, $item) = @_;
   foreach my $uri (split(' ',$item->{uri}))
   {
      my $line;
      $line.="\"$item->{mark}->{hostname}\",";
      $line.="\"$item->{mark}->{port}\",";
      $line.="\"";
      if ($item->{osvdb})  { $line.="OSVDB-$item->{osvdb}: " }; 
      if ($item->{method}) { $line.="$item->{method} " }; 
      if ($uri)            { $line.="${uri}: " }; 
      $line.=$item->{message};
      $line.="\"";
      print $handle "$line\n";
   }
}

1;
