summaryrefslogtreecommitdiffstats
path: root/bin/generate-mirror-mail.pl
diff options
context:
space:
mode:
Diffstat (limited to 'bin/generate-mirror-mail.pl')
-rwxr-xr-xbin/generate-mirror-mail.pl42
1 files changed, 35 insertions, 7 deletions
diff --git a/bin/generate-mirror-mail.pl b/bin/generate-mirror-mail.pl
index f6efc44..64e3a5d 100755
--- a/bin/generate-mirror-mail.pl
+++ b/bin/generate-mirror-mail.pl
@@ -1,14 +1,16 @@
#!/usr/bin/perl
use warnings;
use strict;
+
+use Config::Tiny;
+use Date::Format;
+use Date::Parse;
use File::Basename;
-use JSON;
use HTTP::Cookies;
-use WWW::Mechanize;
-use Date::Parse;
-use Date::Format;
+use JSON;
use Text::Template;
use Try::Tiny;
+use WWW::Mechanize;
use Data::Dumper;
@@ -66,8 +68,22 @@ Florian
},
);
+my $Config = Config::Tiny->new();
+$Config = Config::Tiny->read(dirname($0) . "/../settings.conf");
+
my $cookie_jar = HTTP::Cookies->new(file => dirname($0) . "/../cookie_jar", autosave => 1);
-my $mech = WWW::Mechanize->new(cookie_jar => $cookie_jar);
+my $mech = WWW::Mechanize->new(agent => "arch-mirror-tools", cookie_jar => $cookie_jar);
+
+sub login {
+ $mech->get("https://www.archlinux.org/login/");
+ my $res = $mech->submit_form(
+ form_id => "dev-login-form",
+ fields => {
+ username => $Config->{account}->{username},
+ password => $Config->{account}->{password}
+ }
+ );
+}
sub send_mail {
my $to = shift;
@@ -101,6 +117,13 @@ sub fill_template {
return $result;
}
+sub get_mirror_json {
+ my ($url) = @_;
+
+ $mech->get($url."/json/");
+ return JSON::decode_json($mech->content());
+}
+
while (<STDIN>) {
try {
my $url = $_;
@@ -108,9 +131,14 @@ while (<STDIN>) {
die "Skipping non-mirror detail URL" if $url =~ m/\/[0-9]+(\/|$)/;
die "Skipping non-mirror detail URL" if $url eq "https://www.archlinux.org/mirrors/status/";
- $mech->get($url."/json/");
my ($mirror_name) = ($url =~ m#/([^/]+)/?$#);
- my $json = JSON::decode_json($mech->content());
+ my $json = get_mirror_json($url);
+
+ if (not defined $json->{admin_email}) {
+ login();
+ $json = get_mirror_json($url);
+ die "Admin email not set in mirror json. Login problem?" unless defined $json->{admin_email};
+ }
my @out_of_sync;
my @connection_failed;