File Coverage

blib/lib/WWW/ConfixxBackup/Confixx.pm
Criterion Covered Total %
statement 7 9 77.7
branch n/a
condition n/a
subroutine 3 3 100.0
pod n/a
total 10 12 83.3


line stmt bran cond sub pod time code
1             package WWW::ConfixxBackup::Confixx;
2              
3 11     11   137653 use strict;
  11         20  
  11         357  
4 11     11   54 use warnings;
  11         20  
  11         345  
5 11     11   17513 use WWW::Mechanize;
  0            
  0            
6             use HTTP::Cookies;
7             use HTTP::Request;
8              
9             our $VERSION = '0.05';
10              
11             my %map = (
12             'confixx2.0' =>
13             {
14             backup_id => '',
15             backup_html => '',
16             backup_files => '',
17             backup_mysql => '',
18             html => 1,
19             files => 1,
20             mysql => 1,
21             },
22             'confixx3.0' =>
23             {
24             'selectAll' => 1,
25             'backup[]' => ['html','files','mysql'],
26             action => 'backup',
27             destination => '/backup',
28             }
29             );
30              
31             my $default_version = 'confixx3.0';
32              
33             sub new{
34             my ($class,%args) = @_;
35             my $self = bless {},$class;
36            
37             $self->debug( sub{ print join "\n", @_ } );
38             $self->DEBUG(0);
39            
40             $self->password($args{password});
41             $self->user($args{user});
42             $self->server($args{server});
43             $self->proxy( $args{proxy} );
44             $self->confixx_version( defined $args{confixx_version} ?
45             $args{confixx_version} :
46             $default_version );
47            
48             return $self;
49             }# new
50              
51             sub login{
52             my ($self) = @_;
53            
54             if(ref($self->mech) eq 'WWW::Mechanize'){
55             $self->mech->post(
56             $self->server . '/login.php',
57             {
58             username => $self->user,
59             password => $self->password,
60            
61             }
62             );
63            
64             if( $self->DEBUG ){
65             $self->debug->( 'POST: ' . $self->server . '/login.php' );
66             my $msg = $self->mech->success ? 'Got login page' :
67             'Error: cannot get login page : ' . $self->mech->response->status_line;
68             }
69              
70             $self->mech->get( $self->server . '/user/' . $self->user . '/' );
71            
72             if( $self->DEBUG ){
73             $self->debug->( 'GET: ' . $self->server . '/user/' . $self->user . '/' );
74             my $msg = $self->mech->success ? $self->server . ': logged in' :
75             'Error: ' . $self->server . ': cannot login .. ' . $self->mech->response->status_line;
76             $self->debug->( $msg );
77             }
78            
79             return unless($self->mech->success);
80             }
81             return 1;
82             }# login
83              
84             sub proxy{
85             my ($self,$proxy) = @_;
86            
87             $self->{_proxy} = $proxy if @_ == 2;
88             return $self->{_proxy};
89             }
90              
91             sub _detect_version{
92             my ($self,$content) = @_;
93            
94             my %versions = (
95             'confixx2.0' => [
96             '',
97             '',
98             '',
99             '',
100             '',
101             '',
102             ''
103             ],
104             'confixx3.0' => [
105             '',
106             '',
107             '',
108             '',
109             '',
110             ''
111             ],
112             );
113            
114             unless( $content ){
115             $self->mech->get( $self->server . '/user/' . $self->user . '/tools_backup.php' );
116             $content = $self->mech->content;
117             #warn $content;
118             }
119              
120             my @inputs = $content =~ m!(]+>)!ig;
121             @inputs = grep{ !/type=.?image/ }@inputs;
122            
123             my $version = "";
124             for my $key ( keys %versions ){
125             if( join( "", @inputs ) eq join( "", @{$versions{$key}} ) ){
126             $version = $key;
127             last;
128             }
129             }
130            
131             if( $version ){
132             $self->confixx_version( $version );
133             }
134              
135             if( $self->DEBUG ){
136             my $msg = $version ? 'Detected version: ' . $version :
137             'Error: cannot detect version. Maybe a new Confixx Version.';
138             $self->debug->( $msg );
139             }
140             }
141              
142             sub backup{
143             my ($self) = @_;
144            
145             $self->_detect_version unless $self->confixx_version;
146            
147             $self->mech->post(
148             $self->server . '/user/' . $self->user . '/tools_backup2.php',
149             $map{$self->confixx_version},
150             );
151            
152             if( $self->DEBUG ){
153             my %fields = %{ $map{$self->confixx_version} };
154             $self->debug->( 'POST: ' . $self->server . '/user/' . $self->user . '/tools_backup2.php' );
155             $self->debug->( 'Parameters: ' . join( " , ", map{ $_ . " -> " . $fields{$_} }keys %fields ) );
156             $self->debug->( 'Confixx Version: ' . $self->confixx_version );
157             my $msg = $self->mech->success ? 'Called backup tool' :
158             'Error: cannot call backup tool : ' . $self->mech->response->status_line;
159             }
160            
161             return unless($self->mech->success);
162             return 1;
163             }# create_backup
164              
165             sub confixx_version{
166             my ($self,$version) = @_;
167            
168             $self->{__version} = $version if defined $version;
169             return $self->{__version};
170             }
171              
172             sub available_confixx_versions{
173             return sort keys %map;
174             }
175              
176             sub password{
177             my ($self,$pwd) = @_;
178             $self->{password} = $pwd if(defined $pwd);
179             return $self->{password};
180             }# password
181              
182             sub user{
183             my ($self,$user) = @_;
184             $self->{user} = $user if(defined $user);
185             return $self->{user};
186             }# user
187              
188             sub server{
189             my ($self,$server) = @_;
190             $self->{server} = $server if(defined $server);
191             return $self->{server};
192             }# server
193              
194             sub mech{
195             my ($self) = @_;
196             my $subref = ( $self->DEBUG ) ? $self->debug : \&mech_warnings;
197             unless(ref($self->{mechanizer}) eq 'WWW::Mechanize'){
198             $self->{cookie_jar} = HTTP::Cookies->new();
199             $self->{mechanizer} = WWW::Mechanize->new(
200             quiet => 1,
201             onwarn => $subref,
202             ondie => $subref,
203             stack_depth => 1,
204             cookie_jar => $self->{cookie_jar},
205             );
206             $self->{mechanizer}->proxy( [qw/http https/], $self->proxy ) if $self->proxy;
207             $self->{mechanizer}->get($self->server);
208            
209            
210             if( $self->DEBUG ){
211             $self->debug->( 'GET: ' . $self->server );
212             my $msg = $self->{mechanizer}->success ? 'Got start page' :
213             'Error: cannot get start page : ' . $self->{mechanizer}->response->status_line;
214             $self->debug->( $msg );
215             }
216              
217             return [] unless($self->{mechanizer}->success);
218             }
219             return $self->{mechanizer};
220             }# mech
221              
222             sub default_version{
223             return $default_version;
224             }
225              
226             sub mech_warnings{
227             #print STDERR "HALLO";
228             }# mech_warnings
229              
230             sub debug{
231             my ($self,$coderef) = @_;
232            
233             if( @_ == 2 ){
234             $self->DEBUG(1);
235             $self->{__debug} = $coderef;
236             }
237              
238             return $self->{__debug};
239             }
240              
241             sub DEBUG{
242             my ($self,$bool) = @_;
243            
244             if( @_ == 2 ){
245             $self->{__DEBUG} = $bool;
246             }
247              
248             return $self->{__DEBUG};
249             }
250              
251             1;
252              
253             __END__