Net-Google-AuthSub-Once
    
    
  
  
  
view release on metacpan or search on metacpan
lib/Net/Google/AuthSub/Once.pm view on Meta::CPAN
use URI::QueryParam;
use Crypt::Random 'makerandom';
use Crypt::OpenSSL::RSA;
use File::Slurp 'read_file';
use MIME::Base64;
sub new {
    my ($klass, $options) = @_;
    my $self = bless {}, $klass;
    $self->{private_key_filename} = $options->{private_key_filename};
    return $self;
}
sub get_authorization_url {
    my ($self, $next_url) = @_;
    my $google_url = URI->new("http://www.google.com/accounts/AuthSubRequest");
    $google_url->query_param('next' => $next_url);
    $google_url->query_param('scope' => 'http://www.google.com/m8/feeds/contacts');
    $google_url->query_param('session' => 0);
    $google_url->query_param('secure'  => 1);
    return $google_url;
}
sub sign_request {
    my ($self, $request, $url, $token) = @_;
    my $nonce = makerandom(Size => 64);
    my $timestamp = time;
    my $data = "GET $url $timestamp $nonce";
    my $private_key = Crypt::OpenSSL::RSA->new_private_key(scalar read_file($self->{'private_key_filename'}));
    my $sig  = encode_base64($private_key->sign($data));
    my $auth = qq{AuthSub token="$token" sigalg="rsa-sha1" data="$data" sig="$sig"};
    $request->header('Authorization', $auth);
    return;
}
1;
lib/Net/Google/AuthSub/Once.pm view on Meta::CPAN
Net::Google::AuthSub::Once - Make one secure authenticated request to a Google service
=head1 SYNOPSYS
    my $auth = Net::Google::AuthSub::Once->new();
    redirect_to($auth->get_authorization_url('http://example.com/your-next-url'));
    # Then after the response comes back
    
    # Make a request to the Google service
    my $auth = Net::Google::AuthSub::Once->new({ private_key_filename => 'filename' });
    my $request = HTTP::Request->new(GET => 'http://www.google.com/...');
    $auth->sign_request($request);
    my $resp = $ua->request($request);
=head1 DESCRIPTION
The nice thing about this module is that you don't need to know the Google
login details of the user of your applications. You can make a secure request
to a Google service in their place.
lib/Net/Google/AuthSub/Once.pm view on Meta::CPAN
Google has some information about create the private key file you need.
L<http://code.google.com/apis/gdata/docs/auth/authsub.html#Registered>
=head1 METHODS
=head2 CLASS->new($options)
=over 4
=item * private_key_filename
The filename of a private key file.
=back
=head2 $self->get_authorization_url($next_url)
Returns the authorization url that you need to redirect to. Next_url is the url that
google will redirect you to after the request was authorized.
( run in 0.343 second using v1.01-cache-2.11-cpan-c333fce770f )