use Test::More tests => 17; use OAuth::Lite::ServerUtil; use OAuth::Lite::Util; use OAuth::Lite::SignatureMethod::HMAC_SHA1; my $util = OAuth::Lite::ServerUtil->new; eval {$util->support_signature_method('HMAC-SHA1');}; ok(!$@, 'load HMAC-SHA1 signature method class'); eval {$util->support_signature_methods(qw/RSA-SHA1 PLAINTEXT/);}; ok(!$@, 'load RSA-SHA1 and PLAINTEXT signature method classes'); eval {$util->support_signature_method('FOO-BAR');}; like($@, qr{Couldn't require class, OAuth::Lite::SignatureMethod::FOO_BAR}, 'fails to load FOO-BAR signature method class'); eval {$util->support_signature_methods(qw/FOO BAR/);}; like($@, qr{Couldn't require class, OAuth::Lite::SignatureMethod::FOO}, 'fails to load FOO and BAR signature method classes'); ok($util->validate_signature_method('HMAC-SHA1'), 'HMAC-SHA1 is valid'); ok($util->validate_signature_method('PLAINTEXT'), 'PLAINTEXT is valid'); ok($util->validate_signature_method('RSA-SHA1'), 'RSA-SHA1 is valid'); ok(!$util->validate_signature_method('FOO-BAR'), 'FOO-BAR is invalid'); ok(!$util->validate_signature_method('FOO'), 'FOO is invalid'); ok(!$util->validate_signature_method('BAR'), 'BAR is invalid'); $util->allow_extra_params(qw/file size/); $util->allow_extra_param('another'); my $http_method = "GET"; my $request_url = "http://example.com/resource"; my $consumer_key = 'dpf43f3p214k3103'; my $consumer_secret = 'abcddpf43f3p214k'; my $sign_method = OAuth::Lite::SignatureMethod::HMAC_SHA1->new( consumer_secret => $consumer_secret, ); my $params = { oauth_consumer_key => $consumer_key, oauth_signature_method => 'HMAC-SHA1', oauth_timestamp => '1191242096', oauth_nonce => 'kllo9940pd9333jh', oauth_version => '1.0', file => 'vacation.jpg', size => 'original', another => 'hoge', }; my $base_string = OAuth::Lite::Util::create_signature_base_string($http_method, $request_url, $params); my $signature = $sign_method->sign($base_string); $params->{oauth_signature} = $signature; ok($util->validate_params($params), $util->errstr); ok(!$util->validate_params($params, 1), 'validate_params should fail'); my $params_with_token = { oauth_token => 'nnch734d00s12jdk', %$params, }; my $base_string2 = OAuth::Lite::Util::create_signature_base_string($http_method, $request_url, $params_with_token); my $signature2 = $sign_method->sign($base_string2); $params_with_token->{oauth_signature} = $signature2; ok($util->validate_params($params_with_token, 1), $util->errstr); ok(!$util->validate_params($params_with_token), 'validate_params should fail'); my $ext_params = { ext => 'foo', %$params_with_token, }; my $base_string3 = OAuth::Lite::Util::create_signature_base_string($http_method, $request_url, $ext_params); my $signature3 = $sign_method->sign($base_string3); $ext_params->{oauth_signature} = $signature3; ok(!$util->validate_params($ext_params, 1), $util->errstr); my $signature_is_ok = $util->verify_signature( method => $http_method, url => $request_url, params => $params, consumer_secret => $consumer_secret, ); ok($signature_is_ok, $util->errstr); my $signature_is_not_ok = $util->verify_signature( method => 'POST', url => $request_url, params => $params, consumer_secret => $consumer_secret, ); ok(!$signature_is_not_ok, 'verify should fail');