File Coverage

blib/lib/WebService/Simple/AWS.pm
Criterion Covered Total %
statement 18 38 47.3
branch 0 2 0.0
condition 0 6 0.0
subroutine 6 8 75.0
pod 0 2 0.0
total 24 56 42.8


line stmt bran cond sub pod time code
1             package WebService::Simple::AWS;
2 2     2   887 use strict;
  2         4  
  2         70  
3 2     2   11 use warnings;
  2         3  
  2         63  
4 2     2   12 use base qw( WebService::Simple );
  2         2  
  2         1234  
5 2     2   3030 use Digest::SHA qw(hmac_sha256_base64);
  2         9681  
  2         195  
6 2     2   1827 use URI::Escape qw(uri_escape_utf8);
  2         3049  
  2         135  
7 2     2   12 use Carp;
  2         3  
  2         874  
8              
9             our $VERSION = '0.01';
10              
11             sub request_url {
12 0     0 0   my $self = shift;
13 0           my %args = @_;
14 0           my $uri = URI->new( $args{url} );
15 0           my $params = $args{params};
16 0   0       $params->{AWSAccessKeyId} = delete $params->{id}
17             || Carp::croak("Aceess Key Id is requiered!");
18 0   0       my $secret = delete $params->{secret}
19             || Carp::croak("Aceess Key Secret is requiered!");
20 0           $params->{Timestamp} = timestamp();
21 0           $params->{SignatureMethod} = 'HmacSHA256';
22 0           my $query = join '&',
23 0           map { $_ . '=' . uri_escape_utf8( $params->{$_}, "^A-Za-z0-9\-_.~" ) }
24             sort keys %$params;
25 0           my $tosign = join "\n", 'GET', $uri->host, $uri->path, $query;
26 0           my $signature = hmac_sha256_base64( $tosign, $secret );
27 0           $signature .= '=' while length($signature) % 4;
28 0           $params->{Signature} = $signature;
29 0           $uri->query_form($params);
30 0           return $uri;
31             }
32              
33             sub timestamp {
34 0     0 0   my $t = shift;
35 0 0         $t = time unless defined $t;
36 0           my ( $sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst ) =
37             gmtime($t);
38 0           return sprintf(
39             "%4i-%02i-%02iT%02i:%02i:%02iZ",
40             ( $year + 1900 ),
41             ( $mon + 1 ),
42             $mday, $hour, $min, $sec
43             );
44             }
45              
46             1;
47              
48             __END__