File Coverage

blib/lib/OAuth/Simple.pm
Criterion Covered Total %
statement 11 55 20.0
branch 0 32 0.0
condition 0 34 0.0
subroutine 4 9 44.4
pod 5 5 100.0
total 20 135 14.8


line stmt bran cond sub pod time code
1             package OAuth::Simple;
2              
3 1     1   32811 use 5.010;
  1         5  
4 1     1   7 use strict;
  1         3  
  1         46  
5 1     1   6 use warnings;
  1         12  
  1         50  
6              
7 1     1   1214 use HTTP::Request::Common;
  1         42888  
  1         1328  
8             require LWP::UserAgent;
9             require JSON;
10             require Carp;
11              
12             our $VERSION = '1.03';
13              
14              
15             sub new {
16 0     0 1   my $class = shift;
17 0           my $self = bless {@_}, $class;
18              
19             Carp::croak("app_id, secret and postback required for this action")
20 0 0 0       unless ($self->{app_id} && $self->{secret} && $self->{postback});
      0        
21              
22 0   0       $self->{ua} ||= LWP::UserAgent->new();
23 0   0       $self->{json} ||= JSON->new;
24              
25 0           return $self;
26             }
27              
28              
29             sub authorize {
30 0     0 1   my ($self, $params) = @_;
31              
32 0 0 0       my %params; %params = %$params if $params && %$params;
  0            
33              
34 0           my $url = delete $params{url};
35 0 0         Carp::croak("Authorize method URL required for this action") unless ($url);
36 0           $url = URI->new($url);
37             $url->query_form(
38             client_id => $self->{app_id},
39             redirect_uri => $self->{postback},
40 0           %params,
41             );
42              
43 0           return $url;
44             }
45              
46             sub request_access_token {
47 0     0 1   my ( $self, $params ) = @_;
48              
49 0 0 0       my %params; %params = %$params if $params && %$params;
  0            
50              
51 0           my ( $url, $code, $raw, $http_method ) = delete @params{ qw(url code raw http_method) };
52 0 0 0       Carp::croak("code and url required for this action") unless $code && $url;
53              
54             my $response = $self->{ua}->request($self->prepare_http_request(
55             url => $url,
56             http_method => $http_method,
57             params => {
58             client_secret => $self->{secret},
59             client_id => $self->{app_id},
60             code => $code,
61             redirect_uri => $self->{postback},
62 0           %params,
63             },
64             ));
65              
66 0 0         return $response->decoded_content unless $response->is_success;
67 0 0         return $response->content if $raw;
68 0           return $self->{json}->decode($response->content);
69             }
70              
71             sub request_data {
72 0     0 1   my ( $self, $params ) = @_;
73              
74 0 0 0       my %params; %params = %$params if $params && %$params;
  0            
75              
76             my ( $url, $access_token, $raw, $http_method, $token_name ) =
77 0           delete @params{ qw(url access_token raw http_method token_name) };
78 0 0         Carp::croak("url required for this action")
79             unless ($url);
80             Carp::croak("access_token required for this action")
81 0 0 0       unless ($access_token || $self->{no_token});
82              
83              
84             my $response = $self->{ua}->request($self->prepare_http_request(
85             url => $url,
86             http_method => $http_method,
87             params => {
88 0 0 0       $self->{no_token} ? () : ( ($token_name || 'access_token') => $access_token ),
89             %params
90             },
91             ));
92            
93 0 0         return 0 unless $response->is_success;
94 0 0         return $response->content if $raw;
95 0           return $self->{json}->decode($response->content);
96             }
97              
98             sub prepare_http_request {
99 0     0 1   my ( $self, %params ) = @_;
100            
101 0   0       $params{http_method} ||= 'GET';
102              
103 0           my $req;
104 0 0         if ($params{http_method} eq 'GET') {
105 0           my $url = URI->new($params{url});
106 0 0         $url->query_form( %{$params{params}} ) if $params{params};
  0            
107 0           $req = GET $url;
108             }
109             else {
110             $req = POST $params{url},
111 0           $self->{headers} && %{ $self->{headers} } ? %{ $self->{headers} } : (),
112 0 0 0       Content => $params{params};
113             }
114              
115 0           return $req;
116             }
117              
118              
119             1;
120              
121              
122             __END__