package WWW::ConfixxBackup::Confixx;
use strict;
use warnings;
use WWW::Mechanize;
use HTTP::Cookies;
use HTTP::Request;
our $VERSION = '0.05';
my %map = (
'confixx2.0' =>
{
backup_id => '',
backup_html => '',
backup_files => '',
backup_mysql => '',
html => 1,
files => 1,
mysql => 1,
},
'confixx3.0' =>
{
'selectAll' => 1,
'backup[]' => ['html','files','mysql'],
action => 'backup',
destination => '/backup',
}
);
my $default_version = 'confixx3.0';
sub new{
my ($class,%args) = @_;
my $self = bless {},$class;
$self->debug( sub{ print join "\n", @_ } );
$self->DEBUG(0);
$self->password($args{password});
$self->user($args{user});
$self->server($args{server});
$self->proxy( $args{proxy} );
$self->confixx_version( defined $args{confixx_version} ?
$args{confixx_version} :
$default_version );
return $self;
}# new
sub login{
my ($self) = @_;
if(ref($self->mech) eq 'WWW::Mechanize'){
$self->mech->post(
$self->server . '/login.php',
{
username => $self->user,
password => $self->password,
}
);
if( $self->DEBUG ){
$self->debug->( 'POST: ' . $self->server . '/login.php' );
my $msg = $self->mech->success ? 'Got login page' :
'Error: cannot get login page : ' . $self->mech->response->status_line;
}
$self->mech->get( $self->server . '/user/' . $self->user . '/' );
if( $self->DEBUG ){
$self->debug->( 'GET: ' . $self->server . '/user/' . $self->user . '/' );
my $msg = $self->mech->success ? $self->server . ': logged in' :
'Error: ' . $self->server . ': cannot login .. ' . $self->mech->response->status_line;
$self->debug->( $msg );
}
return unless($self->mech->success);
}
return 1;
}# login
sub proxy{
my ($self,$proxy) = @_;
$self->{_proxy} = $proxy if @_ == 2;
return $self->{_proxy};
}
sub _detect_version{
my ($self,$content) = @_;
my %versions = (
'confixx2.0' => [
'',
'',
'',
'',
'',
'',
''
],
'confixx3.0' => [
'',
'',
'',
'',
'',
''
],
);
unless( $content ){
$self->mech->get( $self->server . '/user/' . $self->user . '/tools_backup.php' );
$content = $self->mech->content;
#warn $content;
}
my @inputs = $content =~ m!(]+>)!ig;
@inputs = grep{ !/type=.?image/ }@inputs;
my $version = "";
for my $key ( keys %versions ){
if( join( "", @inputs ) eq join( "", @{$versions{$key}} ) ){
$version = $key;
last;
}
}
if( $version ){
$self->confixx_version( $version );
}
if( $self->DEBUG ){
my $msg = $version ? 'Detected version: ' . $version :
'Error: cannot detect version. Maybe a new Confixx Version.';
$self->debug->( $msg );
}
}
sub backup{
my ($self) = @_;
$self->_detect_version unless $self->confixx_version;
$self->mech->post(
$self->server . '/user/' . $self->user . '/tools_backup2.php',
$map{$self->confixx_version},
);
if( $self->DEBUG ){
my %fields = %{ $map{$self->confixx_version} };
$self->debug->( 'POST: ' . $self->server . '/user/' . $self->user . '/tools_backup2.php' );
$self->debug->( 'Parameters: ' . join( " , ", map{ $_ . " -> " . $fields{$_} }keys %fields ) );
$self->debug->( 'Confixx Version: ' . $self->confixx_version );
my $msg = $self->mech->success ? 'Called backup tool' :
'Error: cannot call backup tool : ' . $self->mech->response->status_line;
}
return unless($self->mech->success);
return 1;
}# create_backup
sub confixx_version{
my ($self,$version) = @_;
$self->{__version} = $version if defined $version;
return $self->{__version};
}
sub available_confixx_versions{
return sort keys %map;
}
sub password{
my ($self,$pwd) = @_;
$self->{password} = $pwd if(defined $pwd);
return $self->{password};
}# password
sub user{
my ($self,$user) = @_;
$self->{user} = $user if(defined $user);
return $self->{user};
}# user
sub server{
my ($self,$server) = @_;
$self->{server} = $server if(defined $server);
return $self->{server};
}# server
sub mech{
my ($self) = @_;
my $subref = ( $self->DEBUG ) ? $self->debug : \&mech_warnings;
unless(ref($self->{mechanizer}) eq 'WWW::Mechanize'){
$self->{cookie_jar} = HTTP::Cookies->new();
$self->{mechanizer} = WWW::Mechanize->new(
quiet => 1,
onwarn => $subref,
ondie => $subref,
stack_depth => 1,
cookie_jar => $self->{cookie_jar},
);
$self->{mechanizer}->proxy( [qw/http https/], $self->proxy ) if $self->proxy;
$self->{mechanizer}->get($self->server);
if( $self->DEBUG ){
$self->debug->( 'GET: ' . $self->server );
my $msg = $self->{mechanizer}->success ? 'Got start page' :
'Error: cannot get start page : ' . $self->{mechanizer}->response->status_line;
$self->debug->( $msg );
}
return [] unless($self->{mechanizer}->success);
}
return $self->{mechanizer};
}# mech
sub default_version{
return $default_version;
}
sub mech_warnings{
#print STDERR "HALLO";
}# mech_warnings
sub debug{
my ($self,$coderef) = @_;
if( @_ == 2 ){
$self->DEBUG(1);
$self->{__debug} = $coderef;
}
return $self->{__debug};
}
sub DEBUG{
my ($self,$bool) = @_;
if( @_ == 2 ){
$self->{__DEBUG} = $bool;
}
return $self->{__DEBUG};
}
1;
__END__
=pod
=head1 NAME
WWW::ConfixxBackup::Confixx - the Confixx mechanism for WWW::ConfixxBackup
=head1 SYNOPSIS
=head1 METHODS
=head2 new
=head2 user
=head2 password
=head2 server
=head2 backup
=head2 mech_warnings
=head2 mech
=head2 login
=head2 proxy
=head2 confixx_version
=over 4
=item * confixx2.0
=over 4
=item * backup_id
=item * backup_html
=item * backup_files
=item * backup_mysql
=item * html
=item * files
=item * mysql
=back
=item * confixx3.0
=over 4
=item * selectAll
=item * backup[]
=over 4
=item * html
=item * files
=item * mysql
=back
=item * destination
=item * action
=back
=back
=head2 available_confixx_versions
returns a list of all confixx versions (to be precisely versions of tools_backup2.php)
that are supported by WWW::ConfixxBackup
=head2 default_version
returns the default value for confixx_version
=head2 debug
=head2 DEBUG
=head1 SEE ALSO
WWW::Mechanize
=head1 AUTHOR
Renee Baecker, Emodule@renee-baecker.deE
=head1 COPYRIGHT AND LICENSE
2006 - 2008 by Renee Baecker
This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself, either Perl version 5.8.6 or,
at your option, any later version of Perl 5 you may have available.
=cut