#!/usr/bin/perl -w
use strict;

my $dn = `dirname $0`;chomp($dn);
my $pwd = `pwd`;chomp($pwd);
if ($dn !~ /^\//) { $dn = $pwd . "/" . $dn; }
push @INC,$dn;

use Data::Dumper;

require CanDBReader;
require SMASHData;

&SMASHData::read_all_cached_issues();

my @allcves = keys %SMASHData::cvss;
push @allcves, keys %SMASHData::cvssv3;

my %allcves = map { $_ => 1 } @allcves;
@allcves = sort keys %allcves;

my $fn = "/mounts/mirror/SuSE/ftp.suse.com/pub/projects/security/yaml/suse-cvss-scores.yaml";

open(CSV,">$fn.new")||die "open $fn.new for write:$!";

print CSV "---\n";

foreach my $cve (sort @allcves) {
	print STDERR "$cve\n" if -t STDERR;

	&SMASHData::read_smash_issue($cve,0);

	next unless (defined($SMASHData::cvssv3{$cve}) || defined($SMASHData::cvss{$cve}));

	my %cvssv4 = ();
	if (defined($SMASHData::cvssv4{$cve})) {
		%cvssv4 = %{$SMASHData::cvssv4{$cve}};
	}
	my %cvssv3 = ();
	if (defined($SMASHData::cvssv3{$cve})) {
		%cvssv3 = %{$SMASHData::cvssv3{$cve}};
	}
	my %cvssv2 = ();
	if (defined($SMASHData::cvss{$cve})) {
		%cvssv2 = %{$SMASHData::cvss{$cve}};
	}

	next unless (defined($cvssv3{'SUSE'}) || defined($cvssv2{'SUSE'}));

	print CSV "$cve:\n";
	print CSV "  cvss:\n";
	if (defined($cvssv2{'SUSE'})) {
		my %v2 = %{$cvssv2{'SUSE'}};
		print CSV "    - version: 2.0\n";
		print CSV "      score: " . $v2{'base_score'} . "\n";
		print CSV "      vector: " . $v2{'base_vector'} . "\n";
	}
	if (defined($cvssv3{'SUSE'})) {
		my %v3 = %{$cvssv3{'SUSE'}};
		print CSV "    - version: " . $v3{'version'} . "\n";
		print CSV "      score: " . $v3{'base_score'} . "\n";
		print CSV "      vector: " . $v3{'base_vector'} . "\n";
	}
	if (defined($cvssv4{'SUSE'})) {
		my %v4 = %{$cvssv4{'SUSE'}};
		print CSV "    - version: " . $v4{'version'} . "\n";
		print CSV "      score: " . $v4{'base_score'} . "\n";
		print CSV "      vector: " . $v4{'base_vector'} . "\n";
	}
}
close(CSV);

if (system("cmp $fn $fn.new >/dev/null")) {
        my @difflines = `diff -u $fn $fn.new`;
	my $pluslines = 0;
	print @difflines; # debug diff
	rename("$fn.new",$fn);
} else {
	unlink("$fn.new");
}
