diff --git a/runtime/lib/piwigo-db-sync.pl b/runtime/lib/piwigo-db-sync.pl new file mode 100644 index 0000000..1ad786f --- /dev/null +++ b/runtime/lib/piwigo-db-sync.pl @@ -0,0 +1,62 @@ +#!/usr/bin/perl + +use strict; +use warnings; +use JSON::PP qw(decode_json); +use LWP::UserAgent; +use Getopt::Long; + +my %opt; +GetOptions( + \%opt, + 'base-url=s', + 'username=s', + 'password-file=s', +) or die "Ungültige Parameter\n"; + +for my $required (qw(base-url username password-file)) { + die "Parameter --$required fehlt\n" if !defined $opt{$required} || $opt{$required} eq ''; +} + +open my $password_handle, '<', $opt{'password-file'} + or die "Passwortdatei kann nicht gelesen werden: $!\n"; +my $password = <$password_handle>; +close $password_handle; +defined $password or die "Passwortdatei ist leer\n"; +chomp $password; + +my $ua = LWP::UserAgent->new(timeout => 900); +$ua->agent('Bratonien-NC-Connector/1.0'); +$ua->cookie_jar({}); + +my $login = $ua->post( + $opt{'base-url'}.'/ws.php?format=json', + { + method => 'pwg.session.login', + username => $opt{username}, + password => $password, + }, +); +die "Piwigo-Anmeldung fehlgeschlagen: ".$login->status_line."\n" + if !$login->is_success; + +my $login_result = eval { decode_json($login->decoded_content) }; +die "Piwigo-Anmeldung wurde abgelehnt\n" + if !$login_result || ($login_result->{stat} // '') ne 'ok'; + +my $sync = $ua->post( + $opt{'base-url'}.'/admin.php?page=site_update&site=1', + { + sync => 'files', + display_info => 1, + privacy_level => 0, + sync_meta => 1, + simulate => 0, + 'subcats-included' => 1, + submit => 1, + }, +); +die "Piwigo-Datenbanksynchronisierung fehlgeschlagen: ".$sync->status_line."\n" + if !$sync->is_success; + +print "Piwigo-Datenbanksynchronisierung erfolgreich\n";