Amon2-Auth
view release on metacpan or search on metacpan
lib/Amon2/Auth/Site/Twitter.pm view on Meta::CPAN
use strict;
use warnings;
use utf8;
package Amon2::Auth::Site::Twitter;
use Mouse;
use Net::Twitter::Lite::WithAPIv1_1;
sub moniker { 'twitter' }
has consumer_key => (
is => 'ro',
isa => 'Str',
required => 1,
);
has consumer_secret => (
is => 'ro',
isa => 'Str',
required => 1,
);
sub _nt {
my ($self) = @_;
my $nt = Net::Twitter::Lite::WithAPIv1_1->new(
consumer_key => $self->consumer_key,
consumer_secret => $self->consumer_secret,
ssl => 1,
);
return $nt;
}
sub auth_uri {
my ($self, $c, $callback_uri) = @_;
my $nt = $self->_nt();
my $redirect_uri = $nt->get_authorization_url(callback => $callback_uri);
$c->session->set( auth_twitter => [ $nt->request_token, $nt->request_token_secret, ] );
return $redirect_uri;
}
sub callback {
my ($self, $c, $callback) = @_;
my $cookie = $c->session->get('auth_twitter')
or return $callback->{on_error}->("Session error");
my $nt = $self->_nt();
$nt->request_token($cookie->[0]);
$nt->request_token_secret($cookie->[1]);
if (my $denied = $c->req->param('denied')) {
return $callback->{on_error}->("Access denied");
}
my $verifier = $c->req->param('oauth_verifier');
my ($access_token, $access_token_secret, $user_id, $screen_name) = eval {
$nt->request_access_token(verifier => $verifier);
};
if ($@) {
# Net::Twitter::Lite throws exception like following
# GET https://twitter.com/oauth/access_token failed: 401 Unauthorized at /Users/tokuhirom/perl5/perlbrew/perls/perl-5.15.2/lib/site_perl/5.15.2/Net/Twitter/Lite.pm line 237.
return $callback->{on_error}->($@);
} else {
return $callback->{on_finished}->($access_token, $access_token_secret, $user_id, $screen_name);
}
( run in 0.841 second using v1.01-cache-2.11-cpan-39bf76dae61 )