view release on metacpan or search on metacpan
META.yml
Makefile.PL
README
README.md
dist.ini
lib/Akamai/Open/Client.pm
lib/Akamai/Open/Debug.pm
lib/Akamai/Open/Request.pm
lib/Akamai/Open/Request/EdgeGridV1.pm
t/0001-client.t
t/0002-debug.t
t/0004-request.t
t/0005-edgegridv1.t
t/0006-signedrequest.t
t/0007-signedrequest-extended.t
t/release-no-tabs.t
t/release-pod-syntax.t
t/testdata.json
lib/Akamai/Open/Client.pm view on Meta::CPAN
$Akamai::Open::Client::AUTHORITY = 'cpan:PROBST';
}
# 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
=head1 NAME
lib/Akamai/Open/Debug.pm view on Meta::CPAN
return;
}
sub dump_obj {
my $self = shift;
my $ref = shift;
$self->logger->info('Dumping object: ', Dumper($ref));
return;
}
sub debugger {
my $self = shift;
my $new = shift;
my $prev = shift;
my $sub = (caller(1))[3];
$self->debug->logger->debug(sprintf('setting %s to %s (%s before)', $sub, $new, $prev ? $prev : 'undef'));
return;
}
1;
__END__
=pod
=encoding utf-8
lib/Akamai/Open/Debug.pm view on Meta::CPAN
use Akamai::Open::Client;
my $log_conf = q/
log4perl.category.Akamai.Open.Debug = DEBUG, Screen
log4perl.appender.Screen = Log::Log4perl::Appender::Screen
log4perl.appender.Screen.stderr = 1
log4perl.appender.Screen.layout = Log::Log4perl::Layout::PatternLayout
log4perl.appender.Screen.layout.ConversionPattern = %p - %C - %m%n
/;
my $debug = Akamai::Open::Debug->initialize(config => $log_conf);
my $client = Akamai::Open::Client->new(debug => $debug);
I<Akamai::Open::Debug> uses L<Log::Log4perl|http://search.cpan.org/perldoc?Log::Log4perl> for logging purposes and thus is
very flexible and easy configurable.
=head1 ABOUT
I<Akamai::Open::Debug> provides the debugging and logging functionality
for the I<Akamai::Open> API client and uses uses L<MooseX::Singleton|http://search.cpan.org/perldoc?MooseX::Singleton>
to provide a single instance based logging solution.
=head1 USAGE
If you want to configure your own logging, just initialize your
L<Akamai::Open> API client, with an I<Akamai::Open::Debug> object.
To do this, instantiate an object with your own I<Log::Log4perl>
configuration (see I<Log::Log4perl> for example configurations):
my $debug = Akamai::Open::Debug->initialize(config => $log_conf);
The only thing you've to consider is, that the I<Log::Log4perl> category
has to be named I<log4perl.category.Akamai.Open.Debug>, as written in
the example.
After that you can pass your object to your client:
my $client = Akamai::Open::Client->new(debug => $debug);
=head1 AUTHOR
Martin Probst <internet+cpan@megamaddin.org>
=head1 COPYRIGHT AND LICENSE
This software is copyright (c) 2014 by Martin Probst.
This is free software; you can redistribute it and/or modify it under
lib/Akamai/Open/Request.pm view on Meta::CPAN
use Moose;
use Data::UUID;
use POSIX qw(strftime);
use HTTP::Request;
use LWP::UserAgent;
use Akamai::Open::Debug;
use constant USER_AGENT => "Akamai::Open::Client/Perl-$^V";
has 'debug' => (is => 'rw', default => sub{ return(Akamai::Open::Debug->instance());});
has 'nonce' => (is => 'rw', isa => 'Str', default => \&gen_uuid, trigger => \&Akamai::Open::Debug::debugger);
has 'timestamp' => (is => 'rw', isa => 'Str', default => \&gen_timestamp, trigger => \&Akamai::Open::Debug::debugger);
has 'request' => (is => 'rw', default => sub{return(HTTP::Request->new());});
has 'response' => (is => 'rw', trigger => \&Akamai::Open::Debug::debugger);
has 'user_agent'=> (is => 'rw', default => sub {
my $agent = LWP::UserAgent->new();
$agent->timeout(600);
$agent->agent(USER_AGENT);
return($agent);
});
sub gen_timestamp {
return(strftime('%Y%m%dT%H:%M:%S%z', gmtime()));
}
lib/Akamai/Open/Request/EdgeGridV1.pm view on Meta::CPAN
HEADER_NAME => 'Authorization',
CLIENT_TOKEN => 'client_token=',
ACCESS_TOKEN => 'access_token=',
TIMESTAMP_TOKEN => 'timestamp=',
NONCE_TOKEN => 'nonce=',
SIGNATURE_TOKEN => 'signature='
};
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;
my $auth_header = sprintf('%s %s', EDGEGRIDV1ALGO,
join(';', CLIENT_TOKEN . $self->client->client_token(),
ACCESS_TOKEN . $self->client->access_token(),
TIMESTAMP_TOKEN . $self->timestamp(),
NONCE_TOKEN . $self->nonce(),
SIGNATURE_TOKEN . $self->signature()));
$self->debug->logger->debug("Setting Authorization header to $auth_header");
$self->request->header($header_name => $auth_header);
}
if(defined($self->signed_headers)) {
my $headers = $self->signed_headers;
$self->request->header($_ => $headers->{$_}) foreach(keys(%{$headers}));
}
};
lib/Akamai/Open/Request/EdgeGridV1.pm view on Meta::CPAN
my $content_hash = $self->content_hash;
# and the authorization header content
my $auth_header = sprintf('%s %s;', EDGEGRIDV1ALGO,
join(';', CLIENT_TOKEN . $self->client->client_token,
ACCESS_TOKEN . $self->client->access_token,
TIMESTAMP_TOKEN . $self->timestamp,
NONCE_TOKEN . $self->nonce));
# now create the token to sign
my $token = join("\t", $http_method, $http_scheme, $http_host, $http_uri, $http_headers, $content_hash, $auth_header);
$self->debug->logger->info("Signing token is $token");
if($self->debug->logger->is_debug()) {
my $dbg = $token;
$dbg =~ s#\t#\\t#g;
$self->debug->logger->debug("Quoted sigining token is $dbg");
}
# and sign the token
$self->debug->logger->info(sprintf('signing with key %s', $self->signing_key()));
my $tmp_stoken = encode_base64(hmac_sha256($token, $self->signing_key()));
chomp($tmp_stoken);
$self->signature($tmp_stoken);
return;
}
sub content_hash {
my $self = shift;
my $content_hash = '';
t/0001-client.t view on Meta::CPAN
BEGIN {
use_ok('Akamai::Open::Client');
}
require_ok('Akamai::Open::Client');
# 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/0002-debug.t view on Meta::CPAN
require_ok('Akamai::Open::Debug');
my $log_conf = q/
log4perl.category.Akamai.Open.Debug = DEBUG, Screen
log4perl.appender.Screen = Log::Log4perl::Appender::Screen
log4perl.appender.Screen.stderr = 1
log4perl.appender.Screen.layout = Log::Log4perl::Layout::PatternLayout
log4perl.appender.Screen.layout.ConversionPattern = %p %m
/;
my $debug = Akamai::Open::Debug->initialize(config => $log_conf);
my $clone = Akamai::Open::Debug->instance();
my @array = (1, 2, 'a', 'b');
# object tests
isa_ok($debug, 'Akamai::Open::Debug');
isa_ok($clone, 'Akamai::Open::Debug');
# functional tests
is($debug, $clone, 'test for a singleton object');
ok($debug->logger->debug('foo'), 'print a message of priority DEBUG');
ok($debug->logger->info('foo'), 'print a message of priority INFO');
ok($debug->logger->warn('foo'), 'print a message of priority WARN');
ok($debug->logger->error('foo'), 'print a message of priority ERROR');
ok($debug->logger->fatal('foo'), 'print a message of priority FATAL');
done_testing;
t/0004-request.t view on Meta::CPAN
}
require_ok('Akamai::Open::Request');
require_ok('POSIX');
# object tests
my $req = new_ok('Akamai::Open::Request');
# subobjects tests
isa_ok($req->user_agent, 'LWP::UserAgent');
isa_ok($req->request, 'HTTP::Request');
isa_ok($req->debug, 'Akamai::Open::Debug');
# functional tests
like($req->nonce, qr/([0-9a-f]{8})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{12})/i, 'testing for a correct UUID');
is($req->gen_timestamp, strftime('%Y%m%dT%H:%M:%S%z', gmtime()), 'testing for correct timestamp');
done_testing;
t/0005-edgegridv1.t view on Meta::CPAN
use_ok('Akamai::Open::Client');
}
require_ok('Akamai::Open::Request::EdgeGridV1');
require_ok('Akamai::Open::Client');
# object tests
my $client = new_ok('Akamai::Open::Client');
my $req = new_ok('Akamai::Open::Request::EdgeGridV1');
# subobject tests
isa_ok($req->debug, 'Akamai::Open::Debug');
# functional tests
ok($req->client($client), 'setting client');
# functional tests
done_testing;
t/0006-signedrequest.t view on Meta::CPAN
require_ok('Akamai::Open::Request::EdgeGridV1');
require_ok('Akamai::Open::Client');
require_ok('URI');
# object tests
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
t/release-no-tabs.t view on Meta::CPAN
use Test::More 0.88;
use Test::NoTabs;
my @files = (
'lib/Akamai/Open/Client.pm',
'lib/Akamai/Open/Debug.pm',
'lib/Akamai/Open/Request.pm',
'lib/Akamai/Open/Request/EdgeGridV1.pm',
't/0001-client.t',
't/0002-debug.t',
't/0004-request.t',
't/0005-edgegridv1.t',
't/0006-signedrequest.t',
't/0007-signedrequest-extended.t',
't/release-no-tabs.t',
't/release-pod-syntax.t',
't/testdata.json'
);
notabs_ok($_) foreach @files;