File Coverage

blib/lib/WebService/IPRental.pm
Criterion Covered Total %
statement 8 10 80.0
branch n/a
condition n/a
subroutine 4 4 100.0
pod n/a
total 12 14 85.7


line stmt bran cond sub pod time code
1             package WebService::IPRental;
2              
3             BEGIN {
4 1     1   992 $WebService::IPRental::VERSION = '0.02';
5             }
6              
7             # ABSTRACT: IP Rental API
8              
9 1     1   10 use strict;
  1         2  
  1         33  
10 1     1   6 use warnings;
  1         2  
  1         42  
11 1     1   437 use SOAP::Lite;
  0            
  0            
12              
13             #use SOAP::Lite +trace => 'all';
14             use Carp 'croak';
15             use XML::Simple 'XMLin';
16              
17             $SOAP::Constants::PREFIX_ENC = 'SOAP-ENC';
18              
19             sub new {
20             my $class = shift;
21             my $args = scalar @_ % 2 ? shift : {@_};
22              
23             $args->{APIkey} or croak 'APIkey is required';
24             $args->{APIpass} or croak 'APIpass is required';
25             $args->{Username} or croak 'Username is required';
26             $args->{Password} or croak 'Password is required';
27              
28             $args->{TTL} ||= 780;
29             $args->{soap} =
30             SOAP::Lite->envprefix('SOAP-ENV')
31             ->on_fault( sub { print( Dumper( $_[1]->fault ), "\n" ); } )
32             ->on_action( sub { 'urn:IPRentalSoapAPIAction' } )
33             ->proxy( 'https://secure.iprental.com/api/', timeout => 5 )
34             ->ns( 'urn:IPRentalSoapAPI', 'ns1' )->outputxml(1)->autotype(0);
35              
36             bless $args, $class;
37             }
38              
39             sub doIpLease {
40             my ($self) = @_;
41              
42             my @search_request_params;
43             foreach my $arg (qw(APIkey APIpass username password )) {
44             push @search_request_params,
45             SOAP::Data->name($arg)->value( $self->{ ucfirst $arg } )
46             ->attr( { 'xsi:type' => "xsd:string" } );
47             }
48             foreach my $arg ( 'TTL', 'Location' ) {
49             push @search_request_params,
50             SOAP::Data->name($arg)->value( $self->{$arg} || 0 )
51             ->attr( { 'xsi:type' => "xsd:int" } );
52             }
53              
54             my $request_params =
55             SOAP::Data->name('return')->value( [@search_request_params] )
56             ->attr( { 'xsi:type' => 'ns1:IPRargs' } );
57              
58             my $xml =
59             $self->{soap}->call( SOAP::Data->name('ns1:doIpLease'), $request_params );
60              
61             my $data = XMLin( $xml, NoAttr => 1 );
62             my $response =
63             $data->{'SOAP-ENV:Body'}->{'ns1:doIpLeaseResponse'}->{return};
64              
65             return $response;
66             }
67              
68             sub verboseReponseCode {
69             my ( $self, $r ) = @_;
70              
71             return "Good, Fresh IP" if $r == 202;
72             return "Good, Duplicate IP" if $r == 203;
73             return "Internal Error, Unable to serve IP" if $r == 402;
74             return "Unknown User Authentication" if $r == 403;
75             return "Unknown API Authentication" if $r == 404;
76             return "0 IP leases left in your pool" if $r == 405;
77             return "Impermissible network type" if $r == 406;
78             return "Unknown";
79             }
80              
81             1;
82              
83             __END__