From 74e05deeb1e4a2fc2634c0977aaeac5dc947ad1f Mon Sep 17 00:00:00 2001 From: Neil Moore Date: Wed, 4 Jan 2012 13:41:11 -0600 Subject: Log in to the wiki before issuing the recent changes request. --- lib/Crawl/Bot/Plugin/Wiki.pm | 39 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 37 insertions(+), 2 deletions(-) diff --git a/lib/Crawl/Bot/Plugin/Wiki.pm b/lib/Crawl/Bot/Plugin/Wiki.pm index c08c019..e585c99 100644 --- a/lib/Crawl/Bot/Plugin/Wiki.pm +++ b/lib/Crawl/Bot/Plugin/Wiki.pm @@ -9,7 +9,7 @@ has xmlrpc_location => ( is => 'ro', isa => 'Str', lazy => 1, - default => 'http://crawl.develz.org/wiki/lib/exe/xmlrpc.php', + default => 'https://crawl.develz.org/wiki/lib/exe/xmlrpc.php', ); has wiki_base => ( @@ -24,14 +24,48 @@ has last_checked => ( isa => 'Int', ); +sub login_file_name { + my $self = shift; + + return File::Spec->catfile($self->data_dir, 'wiki_login'); +} + +sub login_wiki { + my $self = shift; + my $xmlrpc = shift; + my ($user, $pass); + + local $_; + open my $lf, "<", $self->login_file_name + or die "could not open wiki_login file: $!"; + + while (<$lf>) { + chomp; + /^\s*user\s*=\s*(.*?)\s*$/ and $user = $1; + /^\s*password\s*=\s*(.*?)\s*$/ and $pass = $1; + } + + die "no login info for wiki" unless defined $user and defined $pass; + + warn "logging in to wiki"; + $xmlrpc->call('dokuwiki.login', $user, $pass); + return; +} + sub tick { + local $_; my $self = shift; my $last_checked = $self->last_checked; $self->last_checked(time); return unless $last_checked; my $xmlrpc = XML::RPC->new($self->xmlrpc_location); - my $changes = try { $xmlrpc->call('wiki.getRecentChanges', $last_checked) } catch { warn $_ }; + try { $self->login_wiki($xmlrpc); } catch { warn $_; return undef; }; + + my $changes = try { + $xmlrpc->call('wiki.getRecentChanges', $last_checked) + } catch { warn $_ }; + # ->call returns a hashref with error info on failure return unless ref($changes) eq 'ARRAY'; for my $change (@$changes) { @@ -48,6 +82,7 @@ sub tick { $self->say_all("$change->{author} created page $name at " . $self->wiki_base . "$change->{name}"); } + return; } __PACKAGE__->meta->make_immutable; -- cgit v1.2.3-54-g00ecf