Akamai-Open-Client
view release on metacpan or search on metacpan
lib/Akamai/Open/Client.pm view on Meta::CPAN
}
# ABSTRACT: The Akamai Open API Perl client structure for authentication data
$Akamai::Open::Client::VERSION = '0.03';
use strict;
use warnings;
use Moose;
use Akamai::Open::Debug;
has 'debug' => (is => 'rw', default => sub{ return(Akamai::Open::Debug->instance());});
has 'client_secret' => (is => 'rw', isa => 'Str', trigger => \&Akamai::Open::Debug::debugger);
has 'client_token' => (is => 'rw', isa => 'Str', trigger => \&Akamai::Open::Debug::debugger);
has 'access_token' => (is => 'rw', isa => 'Str', trigger => \&Akamai::Open::Debug::debugger);
1;
__END__
=pod
=encoding utf-8
lib/Akamai/Open/Client.pm view on Meta::CPAN
version 0.03
=head1 SYNOPSIS
use Akamai::Open::Client;
use Akamai::Open::DiagnosticTools;
my $client = Akamai::Open::Client->new();
$client->access_token('foobar');
$client->client_token('barfoo');
$client->client_secret('Zm9vYmFyYmFyZm9v');
my $req = Akamai::Open::DiagnosticTools->new(client => $client);
=head1 ABOUT
I<Akamai::Open::Client> provides the data structure which holds the
client specific data which is needed for the authentication process
against the I<Akamai::Open> API.
This data is provided by Akamai and can be found in your
lib/Akamai/Open/Request/EdgeGridV1.pm view on Meta::CPAN
extends 'Akamai::Open::Request';
has 'client' => (is => 'rw', trigger => \&Akamai::Open::Debug::debugger);
has 'signed_headers' => (is => 'rw', trigger => \&Akamai::Open::Debug::debugger);
has 'signature' => (is => 'rw', trigger => \&Akamai::Open::Debug::debugger);
has 'signing_key' => (is => 'rw', isa => 'Str', trigger => \&Akamai::Open::Debug::debugger);
before 'sign_request' => sub {
my $self = shift;
my $tmp_key;
$self->debug->logger->debug(sprintf('Calculating signing key from %s and %s', $self->timestamp(),$self->client->client_secret()));
$tmp_key = encode_base64(hmac_sha256($self->timestamp(),$self->client->client_secret()));
chomp($tmp_key);
$self->signing_key($tmp_key);
return;
};
after 'sign_request' => sub {
my $self = shift;
if(defined($self->signature)) {
my $header_name = HEADER_NAME;
t/0001-client.t view on Meta::CPAN
# object tests
my $client = new_ok('Akamai::Open::Client');
# subobject tests
isa_ok($client->debug, 'Akamai::Open::Debug');
# functional tests
ok($client->access_token('foobar'), 'setting access_token');
ok($client->client_token('barfoo'), 'setting client_token');
ok($client->client_secret('Zm9vYmFyYmFyZm9v'), 'setting client_secret');
is($client->access_token, 'foobar', 'getting access_token');
is($client->client_token, 'barfoo', 'getting client_token');
is($client->client_secret, 'Zm9vYmFyYmFyZm9v', 'getting client_secret');
isa_ok($client->debug, 'Akamai::Open::Debug');
done_testing;
t/0006-signedrequest.t view on Meta::CPAN
my $client = new_ok('Akamai::Open::Client');
my $req = new_ok('Akamai::Open::Request::EdgeGridV1');
my $uri = new_ok('URI' => ['http://www.cpan.org/']);
# subobject tests
isa_ok($req->debug, 'Akamai::Open::Debug');
# functional tests
ok($client->access_token('foobar'), 'setting access_token');
ok($client->client_token('barfoo'), 'setting client_token');
ok($client->client_secret('Zm9vYmFyYmFyZm9v'), 'setting client_secret');
ok($req->client($client), 'setting client');
# create a signed header
# for the test we've some static vars
ok($req->timestamp('20140504T13:37:00+0100'), 'setting timestamp');
ok($req->nonce('D3D34986-9A36-11E3-B85F-907ACF486320'), 'setting nonce');
# do the stuff manually, which the API module would do
$req->request->method('GET');
t/0007-signedrequest-extended.t view on Meta::CPAN
}
return from_json($json_input);
}
sub run_test {
my ($testdata, $testcase) = @_;
note("running test: ". $testcase->{testName});
my $client = Akamai::Open::Client->new(
client_token => $testdata->{client_token},
client_secret => $testdata->{client_secret},
access_token => $testdata->{access_token}
);
my $req = Akamai::Open::Request::EdgeGridV1->new(
client => $client,
timestamp => $testdata->{timestamp},
nonce => $testdata->{nonce}
);
$req->request->method($testcase->{request}->{method});
t/testdata.json view on Meta::CPAN
{
"base_url": "https://akaa-baseurl-xxxxxxxxxxx-xxxxxxxxxxxxx.luna.akamaiapis.net",
"access_token": "akab-access-token-xxx-xxxxxxxxxxxxxxxx",
"client_token":"akab-client-token-xxx-xxxxxxxxxxxxxxxx",
"client_secret": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=",
"max_body": 2048,
"headers_to_sign": [ "X-Test1", "X-Test2", "X-Test3" ],
"nonce": "nonce-xx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"timestamp": "20140321T19:34:21+0000",
"tests": [
{
"testName": "simple GET",
"request": {
"method": "GET",
"path": "/",
t/testdata.json view on Meta::CPAN
},
"expectedAuthorization": "EG1-HMAC-SHA256 client_token=akab-client-token-xxx-xxxxxxxxxxxxxxxx;access_token=akab-access-token-xxx-xxxxxxxxxxxxxxxx;timestamp=20140321T19:34:21+0000;nonce=nonce-xx-xxxx-xxxx-xxxx-xxxxxxxxxxxx;signature=ucq2Ab...
},
{
"testName": "Header with leading and interior spaces",
"request": {
"method": "GET",
"path": "/testapi/v1/t4",
"headers": [
{"Host": "akaa-baseurl-xxxxxxxxxxx-xxxxxxxxxxxxx.luna.akamaiapis.net"},
{"X-Test1": " first-thing second-thing"}
]
},
"expectedAuthorization": "EG1-HMAC-SHA256 client_token=akab-client-token-xxx-xxxxxxxxxxxxxxxx;access_token=akab-access-token-xxx-xxxxxxxxxxxxxxxx;timestamp=20140321T19:34:21+0000;nonce=nonce-xx-xxxx-xxxx-xxxx-xxxxxxxxxxxx;signature=WtnneL...
},
{
"testName": "Headers out of order",
"request": {
"method": "GET",
"path": "/testapi/v1/t4",
"headers": [
( run in 1.293 second using v1.01-cache-2.11-cpan-39bf76dae61 )