aboutsummaryrefslogtreecommitdiffstats
path: root/mgaadv
blob: 216d052df06394c45273cf0d1789903cb942ebab (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
#!/usr/bin/perl -w

use strict;
use MGA::Advisories;
use Template;

my %actions = (
    list   => {
        run   => \&listadv,
        descr => 'List advisories',
        usage => <<END,
$0 list

Print the list of published advisories
END
    },
    mksite => {
        run   => \&mksite,
        descr => 'Generates the advisories web site',
        usage => <<END,
$0 mksite

Generates the advisories web site
END
    },
    new    => {
        run   => \&newadv,
        descr => 'Create a new advisory file',
        usage => <<END,
$0 new [type] [bugnum]

Create a new advisory file. [type] should be security or bugfix and
[bugnum] is the bugzilla bug number.
END
    },
    show   => {
        run   => \&showadv,
        descr => 'Show an advisory',
        usage => <<END,
$0 show [ID]

Show an advisory.
END
    },
    update => {
        run   => \&updateadv,
        descr => 'Update the advisories database',
        usage => <<END,
$0 update

Update the advisories database.
END
    },
    usage  => {
        run   => \&usage,
        descr => 'Show usage informations for an action',
        usage => <<END,
$0 usage [action]

Show action usage
END
    },
);

sub usage {
    if ($_[1] && $actions{$_[1]}) {
        print STDERR $actions{$_[1]}->{usage};
    } else {
        print STDERR "$0 [action] [options]\n";
        print STDERR "$0 usage [action]\n\n";
        print STDERR "Available actions:\n";
        print STDERR map { " - $_ : $actions{$_}->{descr}\n" } keys %actions;
    }
}
sub usageexit {
    usage(@_);
    exit 1;
}

sub mksite {
    my %advdb;
    $advdb{advisories} = MGA::Advisories::get_advisories();
    MGA::Advisories::publish_advisories(\%advdb);
    MGA::Advisories::sort_advisories(\%advdb);
    MGA::Advisories::output_pages(\%advdb);
    MGA::Advisories::dumpdb(\%advdb);
    MGA::Advisories::send_adv_mail(\%advdb);
    MGA::Advisories::send_report_mail(\%advdb);
}

sub newadv {
    usageexit('usage', $_[0]) unless @_ == 3;
    my ($new, $type, $bugnum) = @_;
    my $file = MGA::Advisories::newadv($type, $bugnum);
    if ($file) {
        my $editor = $ENV{EDITOR} || $ENV{VISUAL} || '/usr/bin/editor';
        system($editor, $file);
    }
}

sub listadv {
    usageexit('usage', $_[0]) unless @_ == 1;
    my %advdb;
    $advdb{advisories} = MGA::Advisories::get_advisories();
    MGA::Advisories::listadv(\%advdb);
}

sub showadv {
    usageexit('usage', $_[0]) unless @_ == 2;
    my $adv = $_[1];
    my %advdb;
    $advdb{advisories} = MGA::Advisories::get_advisories();
    MGA::Advisories::showadv(\%advdb, $adv);
}

sub updateadv {
    usageexit('usage', $_[0]) unless @_ == 1;
    MGA::Advisories::download_advisories;
}

if (@ARGV == 0 || !$actions{$ARGV[0]}) {
    usageexit();
}
$actions{$ARGV[0]}->{run}->(@ARGV);