line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
1
|
|
|
|
|
|
|
package AWS::Signature::V2; |
2
|
2
|
|
|
2
|
|
57026
|
use Moo; |
|
2
|
|
|
|
|
37006
|
|
|
2
|
|
|
|
|
12
|
|
3
|
2
|
|
|
2
|
|
4946
|
use Digest::SHA qw(hmac_sha256_base64); |
|
2
|
|
|
|
|
7504
|
|
|
2
|
|
|
|
|
171
|
|
4
|
2
|
|
|
2
|
|
1381
|
use URI::Escape; |
|
2
|
|
|
|
|
3683
|
|
|
2
|
|
|
|
|
116
|
|
5
|
2
|
|
|
2
|
|
1725
|
use Encode qw/decode_utf8/; |
|
2
|
|
|
|
|
20020
|
|
|
2
|
|
|
|
|
1122
|
|
6
|
|
|
|
|
|
|
|
7
|
|
|
|
|
|
|
our $VERSION = "0.01"; |
8
|
|
|
|
|
|
|
|
9
|
|
|
|
|
|
|
has aws_access_key => (is => 'rw', required => 1, builder => 1); |
10
|
|
|
|
|
|
|
has aws_secret_key => (is => 'rw', required => 1, builder => 1); |
11
|
|
|
|
|
|
|
|
12
|
0
|
|
|
0
|
|
0
|
sub _build_aws_access_key { $ENV{AWS_ACCESS_KEY} } |
13
|
0
|
|
|
0
|
|
0
|
sub _build_aws_secret_key { $ENV{AWS_SECRET_KEY} } |
14
|
|
|
|
|
|
|
|
15
|
|
|
|
|
|
|
sub sign { |
16
|
1
|
|
|
1
|
0
|
56499
|
my ($self, $url) = @_; |
17
|
1
|
|
|
|
|
9
|
my %eq = map { split /=/, $_ } split /&/, $url->query(); |
|
7
|
|
|
|
|
46
|
|
18
|
1
|
|
|
|
|
8
|
my %q = map { $_ => decode_utf8( uri_unescape( $eq{$_} ) ) } keys %eq; |
|
7
|
|
|
|
|
268
|
|
19
|
1
|
50
|
|
|
|
35
|
$q{Keywords} =~ s/\+/ /g if $q{Keywords}; |
20
|
1
|
|
|
|
|
15
|
$q{AWSAccessKeyId} = $self->aws_access_key; |
21
|
1
|
|
33
|
|
|
8
|
$q{Timestamp} ||= do { |
22
|
0
|
|
|
|
|
0
|
my ( $ss, $mm, $hh, $dd, $mo, $yy ) = gmtime(); |
23
|
0
|
|
|
|
|
0
|
join '', |
24
|
|
|
|
|
|
|
sprintf( '%04d-%02d-%02d', $yy + 1900, $mo + 1, $dd ), 'T', |
25
|
|
|
|
|
|
|
sprintf( '%02d:%02d:%02d', $hh, $mm, $ss ), 'Z'; |
26
|
|
|
|
|
|
|
}; |
27
|
1
|
|
50
|
|
|
8
|
$q{Version} ||= '2010-09-01'; |
28
|
|
|
|
|
|
|
my $sq = join '&', |
29
|
1
|
|
|
|
|
12
|
map { $_ . '=' . uri_escape_utf8( $q{$_}, "^A-Za-z0-9\-_.~" ) } |
|
7
|
|
|
|
|
458
|
|
30
|
|
|
|
|
|
|
sort keys %q; |
31
|
1
|
|
|
|
|
50
|
my $tosign = join "\n", 'GET', $url->host, $url->path, $sq; |
32
|
1
|
|
|
|
|
154
|
my $signature = hmac_sha256_base64( $tosign, $self->aws_secret_key ); |
33
|
1
|
|
|
|
|
9
|
$signature .= '=' while length($signature) % 4; # padding required |
34
|
1
|
|
|
|
|
5
|
$q{Signature} = $signature; |
35
|
1
|
|
|
|
|
6
|
$url->query_form( \%q ); |
36
|
1
|
|
|
|
|
333
|
$url; |
37
|
|
|
|
|
|
|
} |
38
|
|
|
|
|
|
|
|
39
|
|
|
|
|
|
|
sub signature { |
40
|
1
|
|
|
1
|
0
|
7
|
my ($self, $url) = @_; |
41
|
1
|
|
|
|
|
5
|
my %eq = map { split /=/, $_ } split /&/, $url->query(); |
|
8
|
|
|
|
|
44
|
|
42
|
1
|
|
|
|
|
9
|
my %q = map { $_ => uri_unescape( $eq{$_} ) } keys %eq; |
|
8
|
|
|
|
|
89
|
|
43
|
1
|
|
|
|
|
33
|
$q{Signature}; |
44
|
|
|
|
|
|
|
} |
45
|
|
|
|
|
|
|
|
46
|
|
|
|
|
|
|
|
47
|
|
|
|
|
|
|
1; |
48
|
|
|
|
|
|
|
__END__ |