Jifty-Plugin-OAuth
view release on metacpan or search on metacpan
t/lib/TestApp/Plugin/OAuth/Test.pm view on Meta::CPAN
my $sig_method = $params{oauth_signature_method} || delete $params{_signature_method};
delete $params{oauth_signature};
if ($sig_method eq 'PLAINTEXT') {
my $signature = join '&',
map { Jifty->web->escape_uri($_||'') }
$consumer_secret,
$token_secret;
return $signature;
}
my $normalized_request_parameters
= join '&',
map { "$_=" . Jifty->web->escape_uri($params{$_}||'') }
sort keys %params;
my $signature_base_string
= join '&',
map { Jifty->web->escape_uri($_||'') }
uc($method),
$url,
$normalized_request_parameters;
my $signature;
if ($sig_method eq 'RSA-SHA1') {
require Crypt::OpenSSL::RSA;
my $pubkey = Crypt::OpenSSL::RSA->new_private_key($key);
$signature = encode_base64($pubkey->sign($signature_base_string), "");
}
elsif ($sig_method eq 'HMAC-SHA1') {
my $key = join '&',
map { Jifty->web->escape_uri($_||'') }
$consumer_secret,
$token_secret;
my $hmac = Digest::HMAC_SHA1->new($key);
$hmac->add($signature_base_string);
$signature = encode_base64($hmac->digest, '');
}
return ($signature, $signature_base_string, $normalized_request_parameters)
if wantarray;
return $signature;
}
sub has_rsa {
eval { require Crypt::OpenSSL::RSA; 1 }
}
sub rsa_skip {
my $count = shift || Carp::carp "You must specify a number of tests to skip.";
::skip 'Crypt::OpenSSL::RSA is required for these tests', $count unless has_rsa;
}
sub slurp {
no warnings 'once';
my $file = shift;
local $/;
local @ARGV = $file;
my $contents = scalar <>
or die "Unable to slurp $file";
return $contents;
}
sub get_latest_token {
my $content = $cmech->content;
$content =~ s/\boauth_token=(\w+)//
or return;
my $token = $1;
$content =~ s/\boauth_token_secret=(\w+)//
or return;
my $secret = $1;
local $Test::Builder::Level = $Test::Builder::Level + 1;
main::is($content, '&', "the output was exactly oauth_token=...&oauth_secret=...");
my $package = 'Jifty::Plugin::OAuth::Model::';
if ($cmech->uri =~ /request_token/) {
$package .= 'RequestToken';
}
elsif ($cmech->uri =~ /access_token/) {
$package .= 'AccessToken';
}
else {
Jifty->log->error("Called get_latest_token, but I cannot grok the URI " . $cmech->uri);
return;
}
$token_obj = $package->new(current_user => Jifty::CurrentUser->superuser);
$token_obj->load_by_cols(token => $token);
if (!$token_obj->id) {
Jifty->log->error("Could not find a $package with token $token");
return;
}
return $token_obj;
}
sub allow_ok {
local $Test::Builder::Level = $Test::Builder::Level + 1;
my $error = _authorize_request_token('Allow');
::fail($error), return if $error;
my $name = $token_obj->consumer->name;
if ($can_write) {
$umech->content_contains("Allowing $name to read and write your data for 1 hour.");
}
else {
$umech->content_contains("Allowing $name to read your data for 1 hour.");
}
}
sub deny_ok {
local $Test::Builder::Level = $Test::Builder::Level + 1;
( run in 1.624 second using v1.01-cache-2.11-cpan-13bb782fe5a )