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 )