Net-Google-DataAPI
view release on metacpan or search on metacpan
lib/Net/Google/DataAPI/Auth/OAuth.pm view on Meta::CPAN
package Net::Google::DataAPI::Auth::OAuth;
use Any::Moose;
use Net::Google::DataAPI::Types;
with 'Net::Google::DataAPI::Role::Auth';
use Digest::SHA1;
use LWP::UserAgent;
use Net::OAuth;
use URI;
$Net::OAuth::PROTOCOL_VERSION = Net::OAuth::PROTOCOL_VERSION_1_0A;
our $VERSION = '0.05';
has [qw(consumer_key consumer_secret)] => ( is => 'ro', isa => 'Str', required => 1 );
for my $attr (qw(
request_token
request_token_secret
access_token
access_token_secret
)) {
has $attr => (
is => 'rw',
isa => 'Str',
clearer => "clear_$attr",
predicate => "has_$attr"
);
}
has scope => ( is => 'ro', isa => 'ArrayRef[Str]', required => 1, auto_deref => 1 );
has callback => ( is => 'ro', isa => 'Net::Google::DataAPI::Types::URI', coerce => 1 );
has signature_method => ( is => 'ro', isa => 'Str', default => 'HMAC-SHA1' );
has authorize_token_hd => ( is => 'ro', isa => 'Str', default => 'default' );
has authorize_token_hl => ( is => 'ro', isa => 'Str', default => 'en' );
has mobile => ( is => 'ro', isa => 'Bool', default => 0 );
has ua => ( is => 'ro', isa => 'LWP::UserAgent', required => 1, lazy_build => 1 );
sub _build_ua {
LWP::UserAgent->new( max_redirect => 0 );
}
my $url_hash = {
get_request_token_url => 'https://www.google.com/accounts/OAuthGetRequestToken',
authorize_token_url => 'https://www.google.com/accounts/OAuthAuthorizeToken',
get_access_token_url => 'https://www.google.com/accounts/OAuthGetAccessToken',
};
while ( my ($key, $url) = each %$url_hash ) {
has $key => ( is => 'ro', isa => 'URI', required => 1, default => sub {URI->new($url)} );
}
sub get_request_token {
my ($self, $args) = @_;
my $res = $self->_oauth_request(
'request token',
{
request_url => $self->get_request_token_url,
extra_params => {
scope => join(' ', $self->scope),
},
callback => $self->callback || 'oob',
}
);
my ($token, $secret) = $self->_res_to_token($res);
$self->request_token($token);
$self->request_token_secret($secret);
return $self;
}
sub get_authorize_token_url {
my ($self) = @_;
$self->has_request_token or $self->get_request_token;
my $url = $self->authorize_token_url;
$url->query_form(
oauth_token => $self->request_token,
hd => $self->authorize_token_hd,
hl => $self->authorize_token_hl,
$self->mobile ? ( btmpl => 'mobile' ) : (),
);
return $url;
}
sub get_access_token {
my ($self, $args) = @_;
my $res = $self->_oauth_request(
'access token',
{
request_url => $self->get_access_token_url,
token => $self->request_token,
token_secret => $self->request_token_secret,
%{$args || {}},
( run in 1.689 second using v1.01-cache-2.11-cpan-39bf76dae61 )