Amazon-CreatorsAPI
view release on metacpan or search on metacpan
lib/Amazon/CreatorsAPI/Auth.pm view on Meta::CPAN
package Amazon::CreatorsAPI::Auth;
use strict;
use warnings;
use Carp qw/croak/;
use JSON qw//;
use HTTP::Tiny;
use WWW::Form::UrlEncoded qw/build_urlencoded/;
use Class::Accessor::Lite (
ro => [qw/
credential_id
credential_secret
credential_version
is_lwa
auth_endpoint
ua
grant_type
/],
rw => [qw/
access_token
expires_at
/],
);
our $JSON = JSON->new;
sub new {
my $class = shift;
my $credential_id = shift or croak 'credential_id is required';
my $credential_secret = shift or croak 'credential_secret is required';
my $credential_version = shift or croak 'credential_version is required';
my $opt = shift || +{};
return bless +{
credential_id => $credential_id,
credential_secret => $credential_secret,
credential_version => $credential_version,
is_lwa => !!($credential_version =~ m!^3\.!),
auth_endpoint => $opt->{auth_endpoint} || _auth_endpoint($credential_version),
ua => $opt->{ua} || HTTP::Tiny->new,
grant_type => $opt->{grant_type} || 'client_credentials',
access_token => '',
expires_at => 0,
}, $class;
}
sub get_access_token {
my $self = shift;
if ($self->_is_valid_token) {
return $self->access_token;
}
return $self->_refresh_token;
}
sub _is_valid_token {
my $self = shift;
return $self->access_token && $self->expires_at && time() < $self->expires_at;
}
sub _refresh_token {
my $self = shift;
my $res;
if ($self->is_lwa) {
$res = $self->ua->request(
'POST',
$self->auth_endpoint,
{
'headers' => {
'Content-Type' => 'application/json',
},
'content' => $JSON->encode({
'grant_type' => $self->grant_type,
'client_id' => $self->credential_id,
'client_secret' => $self->credential_secret,
'scope' => 'creatorsapi::default',
}),
},
);
}
else {
$res = $self->ua->request(
'POST',
$self->auth_endpoint,
{
'headers' => {
'Content-Type' => 'application/x-www-form-urlencoded',
},
'content' => build_urlencoded(
'grant_type' => $self->grant_type,
'client_id' => $self->credential_id,
( run in 0.644 second using v1.01-cache-2.11-cpan-39bf76dae61 )