diff options
-rw-r--r-- | NEWS | 1 | ||||
-rw-r--r-- | config_default | 1 | ||||
-rw-r--r-- | lib/MGA/Advisories.pm | 39 | ||||
-rwxr-xr-x | mgaadv | 14 |
4 files changed, 52 insertions, 3 deletions
@@ -3,6 +3,7 @@ - add 'show' command to show an advisory - load config from home directory if file exists - add option to load advisories db from a file dump instead of a directory +- add 'update' command to download new advisories db Version 0.4 diff --git a/config_default b/config_default index 3b871a3..7f7cb05 100644 --- a/config_default +++ b/config_default @@ -1,4 +1,5 @@ mode: dump +dump_url: http://advisories.mageia.org/advisories.yaml advisories_dir: /var/lib/mga-advisories/advisories status_dir: /var/lib/mga-advisories/status tmpl_dir: /usr/share/mga-advisories/tmpl diff --git a/lib/MGA/Advisories.pm b/lib/MGA/Advisories.pm index ec91efa..b89ad60 100644 --- a/lib/MGA/Advisories.pm +++ b/lib/MGA/Advisories.pm @@ -2,12 +2,14 @@ package MGA::Advisories; use warnings; use strict; -use YAML qw(LoadFile DumpFile); +use YAML qw(LoadFile DumpFile Load); use Template; use DateTime; use Email::Sender::Simple qw(try_to_sendmail); use Email::Simple; use Email::Simple::Creator; +use LWP::UserAgent; +use File::Basename; #use Data::Dump qw(dd); my $config_file = '/usr/share/mga-advisories/config'; @@ -65,9 +67,13 @@ sub get_advisories_from_dir { return \%advisories; } +sub advdb_dumpfile { + $config->{advdb_dumpfile} || $ENV{HOME} . '/.mga-advisories/advisories.yaml'; +} + sub get_advisories_from_dump { - return LoadFile($_[0] || $config->{advdv_dumpfile} - || $ENV{HOME} . '/.mga-advisories/advisories.yaml'); + my $advfile = advdb_dumpfile; + return -f $advfile ? LoadFile($advfile) : {}; } sub get_advisories { @@ -75,6 +81,33 @@ sub get_advisories { : get_advisories_from_dir; } +sub download_advisories { + my $oldadvisories = get_advisories_from_dump; + my $ua = LWP::UserAgent->new; + my $resp = $ua->get($config->{dump_url}); + die "Error loading $config->{dump_url}" unless $resp->is_success; + my $newadvisories = Load($resp->decoded_content); + my @newadv = grep { ! $oldadvisories->{$_} } keys %$newadvisories; + #dd \@newadv; + if (@newadv) { + my %n; + my @v = @{$newadvisories}{@newadv}; + @n{@newadv} = @v; + print "New advisories have been downloaded :\n"; + listadv({advisories => \%n}); + } else { + print "No new advisories available\n"; + } + if (!-d dirname(advdb_dumpfile)) { + mkdir dirname(advdb_dumpfile) + || die "Error creating directory " . dirname(advdb_dumpfile); + } + open(my $fh, '>', advdb_dumpfile) + || die "Could not open " . advdb_dumpfile; + print $fh $resp->decoded_content; + close $fh; +} + sub publish_advisories { my ($advdb) = @_; foreach my $adv (keys %{$advdb->{advisories}}) { @@ -42,6 +42,15 @@ $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', @@ -104,6 +113,11 @@ sub showadv { MGA::Advisories::showadv(\%advdb, $adv); } +sub updateadv { + usageexit('usage', $_[0]) unless @_ == 1; + MGA::Advisories::download_advisories; +} + if (@ARGV == 0 || !$actions{$ARGV[0]}) { usageexit(); } |