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 )