From 4bdc103664eba676fdee79140595cc7e8063b1eb Mon Sep 17 00:00:00 2001 From: Florian Pritz Date: Sun, 18 Feb 2018 17:12:48 +0100 Subject: Automatically log in when necessary Signed-off-by: Florian Pritz --- bin/archweb-login.pl | 24 ------------------------ bin/generate-mirror-mail.pl | 42 +++++++++++++++++++++++++++++++++++------- 2 files changed, 35 insertions(+), 31 deletions(-) delete mode 100755 bin/archweb-login.pl 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 () { try { my $url = $_; @@ -108,9 +131,14 @@ while () { 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; -- cgit v1.2.3-24-g4f1b