Akamai-Edgegrid
view release on metacpan or search on metacpan
lib/Akamai/Edgegrid.pm view on Meta::CPAN
6465666768697071727374757677787980818283848586878889909192939495
return
_pad_digest(hmac_sha256_base64(
$data
,
$key
));
}
sub
_padded_sha256_base64 {
my
(
$data
) =
@_
;
return
_pad_digest(sha256_base64(
$data
));
}
## methods
sub
_debug {
my
(
$self
,
$msg
) =
@_
;
if
(
$self
->{debug}) {
$msg
=~ s/\n$//;
warn
"$msg\n"
;
}
}
sub
_make_signing_key {
my
(
$self
,
$timestamp
) =
@_
;
my
$signing_key
= _padded_hmac_sha256_base64(
$timestamp
,
$self
->{client_secret});
$self
->_debug(
"signing_key: $signing_key"
);
return
$signing_key
;
}
sub
_canonicalize_headers {
my
(
$self
,
$r
) =
@_
;
return
join
(
"\t"
,
map
{
my
$header_name
=
lc
(
$_
);
my
$header_val
=
$r
->header(
$_
);
lib/Akamai/Edgegrid.pm view on Meta::CPAN
103104105106107108109110111112113114115116117118119120121122123124125126127128129
defined
$r
->header(
$_
)
} @{
$self
->{headers_to_sign}}
);
}
sub
_make_content_hash {
my
(
$self
,
$r
) =
@_
;
if
(
$r
->method eq
'POST'
and
length
(
$r
->content) > 0) {
my
$body
=
$r
->content;
if
(
length
(
$body
) >
$self
->{max_body}) {
$self
->_debug(
"data length "
.
length
(
$body
) .
" is larger than maximum "
.
$self
->{max_body}
);
$body
=
substr
(
$body
, 0,
$self
->{max_body});
$self
->_debug(
"data truncated to "
.
length
(
$body
) .
" for computing the hash"
);
}
return
_padded_sha256_base64(
$body
);
}
return
""
;
}
sub
_make_data_to_sign {
my
(
$self
,
$r
,
$auth_header
) =
@_
;
lib/Akamai/Edgegrid.pm view on Meta::CPAN
132133134135136137138139140141142143144145146147148149150151152
$r
->url->scheme,
$r
->url->host,
$r
->url->path_query,
$self
->_canonicalize_headers(
$r
),
$self
->_make_content_hash(
$r
),
$auth_header
));
my
$display_to_sign
=
$data_to_sign
;
$display_to_sign
=~ s/\t/\\t/g;
$self
->_debug(
"data to sign: $display_to_sign"
);
return
$data_to_sign
;
}
sub
_sign_request {
my
(
$self
,
$r
,
$timestamp
,
$auth_header
) =
@_
;
return
_padded_hmac_sha256_base64(
$self
->_make_data_to_sign(
$r
,
$auth_header
),
$self
->_make_signing_key(
$timestamp
)
lib/Akamai/Edgegrid.pm view on Meta::CPAN
159160161162163164165166167168169170171172173174175176177178179180181182183
[
'client_token'
=>
$self
->{client_token}],
[
'access_token'
=>
$self
->{access_token}],
[
'timestamp'
=>
$timestamp
],
[
'nonce'
=>
$nonce
]
);
my
$auth_header
=
"EG1-HMAC-SHA256 "
.
join
(
';'
,
map
{
my
(
$k
,
$v
) =
@$_
;
"$k=$v"
;
}
@kvps
) .
';'
;
$self
->_debug(
"unsigned authorization header: $auth_header"
);
my
$signed_auth_header
=
$auth_header
.
'signature='
.
$self
->_sign_request(
$r
,
$timestamp
,
$auth_header
);
$self
->_debug(
"signed authorization header: $signed_auth_header"
);
return
$signed_auth_header
;
}
=head1 CONSTRUCTOR METHOD
=over 2
=item $ua = Akamai::Edgegrid->new( %options )
lib/Akamai/Edgegrid.pm view on Meta::CPAN
190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
KEY SOURCE
------------- -----------------------------------------------
client_token from
"Credentials"
section of Manage APIs UI
client_secret from
"Credentials"
section of Manage APIs UI
access_token from
"Authorizations"
section of Manage APIs UI
The following optional key/value pairs may be provided:
KEY DESCRIPTION
--------------- -------------------------------------------------------
debug
if
true enables additional logging
headers_to_sign listref of header names to sign (in order) (
default
[])
max_body maximum body size
for
POSTS (
default
2048)
=cut
sub new {
my $class = shift @_;
my %args = @_;
my @local_args = qw(config_file section client_token client_secret access_token headers_to_sign max_body debug);
my @required_args = qw(client_token client_secret access_token);
my @cred_args = qw(client_token client_secret access_token host);
my %local = ();
for my $arg (@local_args) {
$local{$arg} = delete $args{$arg};
}
my $self = LWP::UserAgent::new($class, %args);
( run in 0.533 second using v1.01-cache-2.11-cpan-e5176c747c2 )