Net::OAuth::All - a wrapper round the OAuth protocol of all versions(1.0, 1.0A, 2.0)
Perl
Pull request Compare This branch is 3 commits ahead of likhatskiy:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
lib/Net/OAuth
t
README.pod

README.pod

NAME

Net::OAuth::All - a wrapper round the OAuth protocol of all versions(1.0, 1.0A, 2.0).

SYNOPSIS

use Net::OAuth::All;
use HTTP::Request::Common;

my $ua = LWP::UserAgent->new;
my $res;
my $conf;
my $oauth;

# OAuth 1.0 and 1.0A
$conf = {
        consumer_key      => 'enter your own',
        consumer_secret   => 'enter your own',
        signature_method  => 'HMAC-SHA1',
        
        request_token_url => 'https://provider.com/request_token', # enter your own
        authorization_url => 'https://provider.com/authorize', # enter your own
        access_token_url  => 'https://provider.com/access_token', # enter your own
};
$oauth = Net::OAuth::All->new(%$conf);

# Consumer Get request token

$res = $ua->get($oauth->request('request_token')->to_url);

my $request_token;
my $request_token_secret;
if ($res->is_success) {
        $oauth->response->from_post_body($res->content);
        
        $request_token        = $oauth->token;
        $request_token_secret = $oauth->token_secret;
} else {
        die "Something went wrong";
}

# Consumer Get authorization URL for redirect to provider

$oauth->request('authorization')->to_url;

# Consumer Get access token

my $oauth_verifier = 'from provider'; #from GET params after callback

$oauth = Net::OAuth::All->new(
        %$conf,
        (
                'token'        => $request_token,
                'token_secret' => $request_token_secret,
                'verifier'     => $oauth_verifier, # for OAuth 1.0A
        )
);

$res = $ua->post(
        $oauth->via('POST')->request('access_token')->url,
        'Content-Type'  => 'application/x-www-form-urlencoded',
        'Authorization' => $oauth->to_header,
);

my $access_token;
my $access_token_secret;
if ($res->is_success) {
        $oauth->response->from_post_body($res->content);
        
        $access_token        = $oauth->token;
        $access_token_secret = $oauth->token_secret;
} else {
        die "Something went wrong";
}

# Make protected request to API

$oauth = Net::OAuth::All->new(
        %$conf,
        (
                'token'        => $access_token,
                'token_secret' => $access_token_secret,
        )
);

$oauth
        ->via('POST')
        ->protected_resource_url('http://provider-api.com/v2/feed/me')
        ->clean_extra
        ->put_extra(
                'alt' => 'json'
        )
        ->request('protected_resource');

$res = $ua->post(
        $oauth->url,
        
        'Content-Type'  => 'application/x-www-form-urlencoded',
        'Authorization' => $oauth->to_header,
        
        'Content' => $oauth->to_post_body,
);

# if you need to post JSON, for example Google Buzz update activity

# at this moment we change request method to POST and put extra params
# but we need to change URL
# after change data we SHOULD signing

$oauth
        ->protected_resource_url('https://www.googleapis.com/buzz/v1/activities/@me/@self')
        ->sign;

$res = $ua->post(
        $oauth->to_url(1),# put extra params to URL
        
        'Content-Type'  => 'application/json',
        'Authorization' => $oauth->to_header,
        
        'Content' => q({"data": {"object": {"type": "note", "content": "I`m in Google BUZZ"}}}),
);

DESCRIPTION

At this moment module suppoted Consumer implementation of OAuth 1.0, 1.0A and 2.0 versions.

CONFIGURATION

FOR ALL OAUTH VERSIONS

- module_version
        Is optional param. Is OAuth version, may be '1.0','1.0A' or '2.0'. Module has auto detection of this param according to service provider params.

- signature_method
        Is optional param, HMAC-SHA1 by default. Suppoted PLAINTEXT, HMAC-SHA1 and RSA-SHA1.

- signature_key_file
        Is required param for RSA-SHA1 signatures. Is path to *.pem file

- extra_params
        Is optional HASH reference param, but may be required by provider.

- request_token_url
        Is required param. URL for get request token

- authorization_url
        Is required param. URL for authorization on service provider

- access_token_url
        Is required param. URL for get access token

FOR OAUTH 1.0 and 1.0A

- consumer_key
        Is required param. Is issued by provider

- consumer_secret
        Is required param. Is issued by provider

- callback
        Is optional param. 
        

FOR OAUTH 2.0

- type
        Is required param. Is issued by provider. At this moment module has implementation of 'web_server' type only.

- client_id
        Is required param. Is issued by provider

- client_secret
        Is optional param. Is issued by provider

- redirect_uri
        Is optional param. 

PARAMS FROM PROVIDER

You receives this params from service provider after request or on callback.

- token
        Is for OAUTH 1.0 and 1.0A

- token_secret
        Is for OAUTH 1.0 and 1.0A

- verifier
        Is param for OAUTH 1.0A. Needs for get access token

- code
        Is param for OAUTH 2.0. Needs for get access token
        

SIGNATURE METHODS

The following signature methods are supported:

- PLAINTEXT
- HMAC-SHA1
- RSA-SHA1

RSA-SHA1 SIGNATURES

To use RSA-SHA1 signatures, pass -signature_key_file param to configuration.

METHODS

new(%config)
        
        Creates Net::OAuth::All object with provider configuration.

version
        
        Returns current oauth version.

version_autodetect
        
        Detect OAuth version from config params.

request('request type', %params)
        
        Configure current created object for 'request type' request and check required params for request. %params is provider config.
        'request type' can be 'request_token', 'authorization', 'access_token' or 'protected_resource'.

response
        
        Clean object after request (clean 'token' and 'token_secret').

from_hash(%HASH)
        Set config params from HASH.
        
to_header('realm', 'sep')
        Generate header OAuth according to OAuth version. 'sep' is a separator, ',' by default.
        
        EXAMPLE
                1.0 or 1.0A
                'OAuth realm="$realm",oauth_token=...,...,...'
                2.0
                'OAuth access_token here'
        
to_url($extra)
        Generate URL with query params. Includes only extra params if $extra is TRUE.
        
to_hash
        Returns all saved params and config params as a HASH reference.
        
to_post_body
        Generates a body for POST request. Returns '' if current METHOD is GET. Returns only extra params if OAuth version is not 2.0.
        
from_post_body('BODY')
        Parse POST body
        
sign
        Signing request.
        
signature
        Returns current signature.
        
url
        Returns current URL according to request_type.
        
via('METHOD')
        Set HTTP METHOD.
        
request_type
        Returns current type of request which was set by request method.
        
protected_resource_url('URL')
        Set protected resource url.

extra
        Returns current extra params as a HASH reference.
        
put_extra(%HASH)
        Set extra params for request.
        
clean_extra
        Clean extra params which was set before.
        
token
        Returns 'oauth_token' or 'access_token' (for OAuth 2.0) param.
        
token_secret
        Returns 'oauth_token_secret' param.
        
expires
        Returns 'expires' param. It`s for OAuth 2.0
        
scope
        Returns 'scope' param. It`s for OAuth 2.0
        
refresh_token
        Returns 'refresh_token' param. It`s for OAuth 2.0
        

SEE ALSO

http://oauth.net

Mojolicious::Plugin::OAuth on http://github.com/likhatskiy/Mojolicious-Plugin-OAuth

Copyright (C) 2011-2012 Anatoly Sharifulin Copyright (C) 2010 Alexey Likhatskiy

This program is free software; you can redistribute it and/or modify it under the terms of either: the GNU General Public License as published by the Free Software Foundation; or the Artistic License.

See http://dev.perl.org/licenses/ for more information.