summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFlorian Pritz <bluewind@xinu.at>2018-02-18 17:12:48 +0100
committerFlorian Pritz <bluewind@xinu.at>2018-02-18 17:12:48 +0100
commit4bdc103664eba676fdee79140595cc7e8063b1eb (patch)
tree7e100d9a6657d0cc4ae1fb11a252b4abefd32e95
parenta4cc90817a4613654d0e477749c27b3d3cfcdb84 (diff)
downloadarch-mirror-tools-4bdc103664eba676fdee79140595cc7e8063b1eb.tar.gz
arch-mirror-tools-4bdc103664eba676fdee79140595cc7e8063b1eb.tar.xz
Automatically log in when necessary
Signed-off-by: Florian Pritz <bluewind@xinu.at>
-rwxr-xr-xbin/archweb-login.pl24
-rwxr-xr-xbin/generate-mirror-mail.pl42
2 files changed, 35 insertions, 31 deletions
diff --git a/bin/archweb-login.pl b/bin/archweb-login.pl
deleted file mode 100755
index d66ecff..0000000
--- a/bin/archweb-login.pl
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/usr/bin/perl
-
-use warnings;
-use strict;
-
-use File::Basename;
-use Config::Tiny;
-use WWW::Mechanize;
-use HTTP::Cookies;
-
-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(agent => "arch-mirror-tools", cookie_jar => $cookie_jar);
-
-$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}
- }
-);
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;