oauth-instructure 0.4.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gemtest +0 -0
- data/Gemfile +16 -0
- data/Gemfile.lock +47 -0
- data/HISTORY +174 -0
- data/LICENSE +20 -0
- data/README.rdoc +75 -0
- data/Rakefile +37 -0
- data/TODO +32 -0
- data/bin/oauth +5 -0
- data/examples/yql.rb +44 -0
- data/lib/digest/hmac.rb +104 -0
- data/lib/oauth.rb +13 -0
- data/lib/oauth/cli.rb +378 -0
- data/lib/oauth/client.rb +4 -0
- data/lib/oauth/client/action_pack.rb +9 -0
- data/lib/oauth/client/em_http.rb +120 -0
- data/lib/oauth/client/helper.rb +91 -0
- data/lib/oauth/client/net_http.rb +120 -0
- data/lib/oauth/consumer.rb +389 -0
- data/lib/oauth/core_ext.rb +31 -0
- data/lib/oauth/errors.rb +3 -0
- data/lib/oauth/errors/error.rb +4 -0
- data/lib/oauth/errors/problem.rb +14 -0
- data/lib/oauth/errors/unauthorized.rb +12 -0
- data/lib/oauth/helper.rb +109 -0
- data/lib/oauth/oauth.rb +13 -0
- data/lib/oauth/oauth_test_helper.rb +25 -0
- data/lib/oauth/request_proxy.rb +24 -0
- data/lib/oauth/request_proxy/action_controller_request.rb +116 -0
- data/lib/oauth/request_proxy/action_dispatch_request.rb +113 -0
- data/lib/oauth/request_proxy/base.rb +174 -0
- data/lib/oauth/request_proxy/curb_request.rb +55 -0
- data/lib/oauth/request_proxy/em_http_request.rb +66 -0
- data/lib/oauth/request_proxy/jabber_request.rb +41 -0
- data/lib/oauth/request_proxy/mock_request.rb +44 -0
- data/lib/oauth/request_proxy/net_http.rb +73 -0
- data/lib/oauth/request_proxy/rack_request.rb +44 -0
- data/lib/oauth/request_proxy/typhoeus_request.rb +53 -0
- data/lib/oauth/server.rb +66 -0
- data/lib/oauth/signature.rb +45 -0
- data/lib/oauth/signature/base.rb +110 -0
- data/lib/oauth/signature/hmac/base.rb +15 -0
- data/lib/oauth/signature/hmac/md5.rb +8 -0
- data/lib/oauth/signature/hmac/rmd160.rb +8 -0
- data/lib/oauth/signature/hmac/sha1.rb +9 -0
- data/lib/oauth/signature/hmac/sha2.rb +8 -0
- data/lib/oauth/signature/md5.rb +13 -0
- data/lib/oauth/signature/plaintext.rb +23 -0
- data/lib/oauth/signature/rsa/sha1.rb +46 -0
- data/lib/oauth/signature/sha1.rb +13 -0
- data/lib/oauth/token.rb +7 -0
- data/lib/oauth/tokens/access_token.rb +71 -0
- data/lib/oauth/tokens/consumer_token.rb +33 -0
- data/lib/oauth/tokens/request_token.rb +32 -0
- data/lib/oauth/tokens/server_token.rb +9 -0
- data/lib/oauth/tokens/token.rb +17 -0
- data/oauth.gemspec +148 -0
- data/tasks/deployment.rake +34 -0
- data/tasks/environment.rake +7 -0
- data/tasks/website.rake +17 -0
- data/test/cases/oauth_case.rb +19 -0
- data/test/cases/spec/1_0-final/test_construct_request_url.rb +62 -0
- data/test/cases/spec/1_0-final/test_normalize_request_parameters.rb +88 -0
- data/test/cases/spec/1_0-final/test_parameter_encodings.rb +86 -0
- data/test/cases/spec/1_0-final/test_signature_base_strings.rb +77 -0
- data/test/integration/consumer_test.rb +307 -0
- data/test/keys/rsa.cert +11 -0
- data/test/keys/rsa.pem +16 -0
- data/test/test_access_token.rb +26 -0
- data/test/test_action_controller_request_proxy.rb +133 -0
- data/test/test_consumer.rb +220 -0
- data/test/test_curb_request_proxy.rb +77 -0
- data/test/test_em_http_client.rb +80 -0
- data/test/test_em_http_request_proxy.rb +115 -0
- data/test/test_helper.rb +28 -0
- data/test/test_hmac_sha1.rb +20 -0
- data/test/test_net_http_client.rb +292 -0
- data/test/test_net_http_request_proxy.rb +72 -0
- data/test/test_oauth_helper.rb +94 -0
- data/test/test_rack_request_proxy.rb +40 -0
- data/test/test_request_token.rb +51 -0
- data/test/test_rsa_sha1.rb +59 -0
- data/test/test_server.rb +40 -0
- data/test/test_signature.rb +22 -0
- data/test/test_signature_base.rb +32 -0
- data/test/test_signature_plain_text.rb +31 -0
- data/test/test_token.rb +14 -0
- data/test/test_typhoeus_request_proxy.rb +80 -0
- metadata +274 -0
| @@ -0,0 +1,72 @@ | |
| 1 | 
            +
            require File.expand_path('../test_helper', __FILE__)
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            class NetHTTPRequestProxyTest < Test::Unit::TestCase
         | 
| 4 | 
            +
             | 
| 5 | 
            +
              def test_that_proxy_simple_get_request_works
         | 
| 6 | 
            +
                request = Net::HTTP::Get.new('/test?key=value')
         | 
| 7 | 
            +
                request_proxy = OAuth::RequestProxy.proxy(request, {:uri => 'http://example.com/test?key=value'})
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                expected_parameters = {'key' => ['value']}
         | 
| 10 | 
            +
                assert_equal expected_parameters, request_proxy.parameters_for_signature
         | 
| 11 | 
            +
                assert_equal 'http://example.com/test', request_proxy.normalized_uri
         | 
| 12 | 
            +
                assert_equal 'GET', request_proxy.method
         | 
| 13 | 
            +
              end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
              def test_that_proxy_simple_post_request_works_with_arguments
         | 
| 16 | 
            +
                request = Net::HTTP::Post.new('/test')
         | 
| 17 | 
            +
                params = {'key' => 'value'}
         | 
| 18 | 
            +
                request_proxy = OAuth::RequestProxy.proxy(request, {:uri => 'http://example.com/test', :parameters => params})
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                expected_parameters = {'key' => ['value']}
         | 
| 21 | 
            +
                assert_equal expected_parameters, request_proxy.parameters_for_signature
         | 
| 22 | 
            +
                assert_equal 'http://example.com/test', request_proxy.normalized_uri
         | 
| 23 | 
            +
                assert_equal 'POST', request_proxy.method
         | 
| 24 | 
            +
              end
         | 
| 25 | 
            +
             | 
| 26 | 
            +
              def test_that_proxy_simple_post_request_works_with_form_data
         | 
| 27 | 
            +
                request = Net::HTTP::Post.new('/test')
         | 
| 28 | 
            +
                params = {'key' => 'value'}
         | 
| 29 | 
            +
                request.set_form_data(params)
         | 
| 30 | 
            +
                request_proxy = OAuth::RequestProxy.proxy(request, {:uri => 'http://example.com/test'})
         | 
| 31 | 
            +
             | 
| 32 | 
            +
                expected_parameters = {'key' => ['value']}
         | 
| 33 | 
            +
                assert_equal expected_parameters, request_proxy.parameters_for_signature
         | 
| 34 | 
            +
                assert_equal 'http://example.com/test', request_proxy.normalized_uri
         | 
| 35 | 
            +
                assert_equal 'POST', request_proxy.method
         | 
| 36 | 
            +
              end
         | 
| 37 | 
            +
             | 
| 38 | 
            +
              def test_that_proxy_simple_put_request_works_with_argugments
         | 
| 39 | 
            +
                request = Net::HTTP::Put.new('/test')
         | 
| 40 | 
            +
                params = {'key' => 'value'}
         | 
| 41 | 
            +
                request_proxy = OAuth::RequestProxy.proxy(request, {:uri => 'http://example.com/test', :parameters => params})
         | 
| 42 | 
            +
             | 
| 43 | 
            +
                expected_parameters = {'key' => ['value']}
         | 
| 44 | 
            +
                assert_equal expected_parameters, request_proxy.parameters_for_signature
         | 
| 45 | 
            +
                assert_equal 'http://example.com/test', request_proxy.normalized_uri
         | 
| 46 | 
            +
                assert_equal 'PUT', request_proxy.method
         | 
| 47 | 
            +
              end
         | 
| 48 | 
            +
             | 
| 49 | 
            +
              def test_that_proxy_simple_put_request_works_with_form_data
         | 
| 50 | 
            +
                request = Net::HTTP::Put.new('/test')
         | 
| 51 | 
            +
                params = {'key' => 'value'}
         | 
| 52 | 
            +
                request.set_form_data(params)
         | 
| 53 | 
            +
                request_proxy = OAuth::RequestProxy.proxy(request, {:uri => 'http://example.com/test'})
         | 
| 54 | 
            +
             | 
| 55 | 
            +
                expected_parameters = {'key' => ['value']}
         | 
| 56 | 
            +
                assert_equal expected_parameters, request_proxy.parameters_for_signature
         | 
| 57 | 
            +
                assert_equal 'http://example.com/test', request_proxy.normalized_uri
         | 
| 58 | 
            +
                assert_equal 'PUT', request_proxy.method
         | 
| 59 | 
            +
              end
         | 
| 60 | 
            +
             | 
| 61 | 
            +
              def test_that_proxy_post_request_uses_post_parameters
         | 
| 62 | 
            +
                request = Net::HTTP::Post.new('/test?key=value')
         | 
| 63 | 
            +
                request.set_form_data({'key2' => 'value2'})
         | 
| 64 | 
            +
                request_proxy = OAuth::RequestProxy.proxy(request, {:uri => 'http://example.com/test?key=value', :parameters => {'key3' => 'value3'}})
         | 
| 65 | 
            +
             | 
| 66 | 
            +
                expected_parameters = {'key' => ['value'], 'key2' => ['value2'], 'key3' => ['value3']}
         | 
| 67 | 
            +
                assert_equal expected_parameters, request_proxy.parameters_for_signature
         | 
| 68 | 
            +
                assert_equal 'http://example.com/test', request_proxy.normalized_uri
         | 
| 69 | 
            +
                assert_equal 'POST', request_proxy.method
         | 
| 70 | 
            +
              end
         | 
| 71 | 
            +
             | 
| 72 | 
            +
            end
         | 
| @@ -0,0 +1,94 @@ | |
| 1 | 
            +
            require File.expand_path('../test_helper', __FILE__)
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            class TestOAuthHelper < Test::Unit::TestCase
         | 
| 4 | 
            +
             | 
| 5 | 
            +
              def test_parse_valid_header
         | 
| 6 | 
            +
                header = 'OAuth ' \
         | 
| 7 | 
            +
                         'realm="http://example.com/method", ' \
         | 
| 8 | 
            +
                         'oauth_consumer_key="vince_clortho", ' \
         | 
| 9 | 
            +
                         'oauth_token="token_value", ' \
         | 
| 10 | 
            +
                         'oauth_signature_method="HMAC-SHA1", ' \
         | 
| 11 | 
            +
                         'oauth_signature="signature_here", ' \
         | 
| 12 | 
            +
                         'oauth_timestamp="1240004133", oauth_nonce="nonce", ' \
         | 
| 13 | 
            +
                         'oauth_version="1.0" '
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                params = OAuth::Helper.parse_header(header)
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                assert_equal "http://example.com/method", params['realm']
         | 
| 18 | 
            +
                assert_equal "vince_clortho", params['oauth_consumer_key']
         | 
| 19 | 
            +
                assert_equal "token_value", params['oauth_token']
         | 
| 20 | 
            +
                assert_equal "HMAC-SHA1", params['oauth_signature_method']
         | 
| 21 | 
            +
                assert_equal "signature_here", params['oauth_signature']
         | 
| 22 | 
            +
                assert_equal "1240004133", params['oauth_timestamp']
         | 
| 23 | 
            +
                assert_equal "nonce", params['oauth_nonce']
         | 
| 24 | 
            +
                assert_equal "1.0", params['oauth_version']
         | 
| 25 | 
            +
              end
         | 
| 26 | 
            +
             | 
| 27 | 
            +
              def test_parse_header_ill_formed
         | 
| 28 | 
            +
                header = "OAuth garbage"
         | 
| 29 | 
            +
             | 
| 30 | 
            +
                assert_raise OAuth::Problem do
         | 
| 31 | 
            +
                  OAuth::Helper.parse_header(header)
         | 
| 32 | 
            +
                end
         | 
| 33 | 
            +
              end
         | 
| 34 | 
            +
             | 
| 35 | 
            +
              def test_parse_header_contains_equals
         | 
| 36 | 
            +
                header = 'OAuth ' \
         | 
| 37 | 
            +
                         'realm="http://example.com/method", ' \
         | 
| 38 | 
            +
                         'oauth_consumer_key="vince_clortho", ' \
         | 
| 39 | 
            +
                         'oauth_token="token_value", ' \
         | 
| 40 | 
            +
                         'oauth_signature_method="HMAC-SHA1", ' \
         | 
| 41 | 
            +
                         'oauth_signature="signature_here_with_=", ' \
         | 
| 42 | 
            +
                         'oauth_timestamp="1240004133", oauth_nonce="nonce", ' \
         | 
| 43 | 
            +
                         'oauth_version="1.0" '
         | 
| 44 | 
            +
             | 
| 45 | 
            +
                assert_raise OAuth::Problem do
         | 
| 46 | 
            +
                  OAuth::Helper.parse_header(header)
         | 
| 47 | 
            +
                end
         | 
| 48 | 
            +
              end
         | 
| 49 | 
            +
             | 
| 50 | 
            +
              def test_parse_valid_header_with_and_signs
         | 
| 51 | 
            +
                header = 'OAuth ' \
         | 
| 52 | 
            +
                         'realm="http://example.com/method"&' \
         | 
| 53 | 
            +
                         'oauth_consumer_key="vince_clortho"&' \
         | 
| 54 | 
            +
                         'oauth_token="token_value"&' \
         | 
| 55 | 
            +
                         'oauth_signature_method="HMAC-SHA1"&' \
         | 
| 56 | 
            +
                         'oauth_signature="signature_here"&' \
         | 
| 57 | 
            +
                         'oauth_timestamp="1240004133"&oauth_nonce="nonce"&' \
         | 
| 58 | 
            +
                         'oauth_version="1.0"'
         | 
| 59 | 
            +
             | 
| 60 | 
            +
                params = OAuth::Helper.parse_header(header)
         | 
| 61 | 
            +
             | 
| 62 | 
            +
                assert_equal "http://example.com/method", params['realm']
         | 
| 63 | 
            +
                assert_equal "vince_clortho", params['oauth_consumer_key']
         | 
| 64 | 
            +
                assert_equal "token_value", params['oauth_token']
         | 
| 65 | 
            +
                assert_equal "HMAC-SHA1", params['oauth_signature_method']
         | 
| 66 | 
            +
                assert_equal "signature_here", params['oauth_signature']
         | 
| 67 | 
            +
                assert_equal "1240004133", params['oauth_timestamp']
         | 
| 68 | 
            +
                assert_equal "nonce", params['oauth_nonce']
         | 
| 69 | 
            +
                assert_equal "1.0", params['oauth_version']
         | 
| 70 | 
            +
              end
         | 
| 71 | 
            +
              
         | 
| 72 | 
            +
              def test_normalize
         | 
| 73 | 
            +
                params = {
         | 
| 74 | 
            +
                  'oauth_nonce' => 'nonce',
         | 
| 75 | 
            +
                  'weight' => { :value => "65" },
         | 
| 76 | 
            +
                  'oauth_signature_method' => 'HMAC-SHA1',
         | 
| 77 | 
            +
                  'oauth_timestamp' => "1240004133",
         | 
| 78 | 
            +
                  'oauth_consumer_key' => 'vince_clortho',
         | 
| 79 | 
            +
                  'oauth_token' => 'token_value',
         | 
| 80 | 
            +
                  'oauth_version' => "1.0"
         | 
| 81 | 
            +
                }
         | 
| 82 | 
            +
                assert_equal("oauth_consumer_key=vince_clortho&oauth_nonce=nonce&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1240004133&oauth_token=token_value&oauth_version=1.0&weight%5Bvalue%5D=65", OAuth::Helper.normalize(params))
         | 
| 83 | 
            +
              end
         | 
| 84 | 
            +
              
         | 
| 85 | 
            +
              def test_normalize_nested_query
         | 
| 86 | 
            +
                assert_equal([], OAuth::Helper.normalize_nested_query({}))
         | 
| 87 | 
            +
                assert_equal(["foo=bar"], OAuth::Helper.normalize_nested_query({:foo => 'bar'}))
         | 
| 88 | 
            +
                assert_equal(["prefix%5Bfoo%5D=bar"], OAuth::Helper.normalize_nested_query({:foo => 'bar'}, 'prefix'))
         | 
| 89 | 
            +
                assert_equal(["prefix%5Buser%5D%5Bage%5D=12",
         | 
| 90 | 
            +
                 "prefix%5Buser%5D%5Bdate%5D=2011-10-05",
         | 
| 91 | 
            +
                 "prefix%5Buser%5D%5Btwitter_id%5D=123"], OAuth::Helper.normalize_nested_query({:user => {:twitter_id => 123, :date => '2011-10-05', :age => 12}}, 'prefix'))
         | 
| 92 | 
            +
              end
         | 
| 93 | 
            +
             | 
| 94 | 
            +
            end
         | 
| @@ -0,0 +1,40 @@ | |
| 1 | 
            +
            require File.expand_path('../test_helper', __FILE__)
         | 
| 2 | 
            +
            require 'oauth/request_proxy/rack_request'
         | 
| 3 | 
            +
            require 'rack/request'
         | 
| 4 | 
            +
            require 'rack/mock'
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            class RackRequestProxyTest < Test::Unit::TestCase
         | 
| 7 | 
            +
             | 
| 8 | 
            +
              def test_that_proxy_simple_get_request_works
         | 
| 9 | 
            +
                request = Rack::Request.new(Rack::MockRequest.env_for('http://example.com/test?key=value'))
         | 
| 10 | 
            +
                request_proxy = OAuth::RequestProxy.proxy(request, {:uri => 'http://example.com/test?key=value'})
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                expected_parameters = {'key' => 'value'}
         | 
| 13 | 
            +
                assert_equal expected_parameters, request_proxy.parameters
         | 
| 14 | 
            +
                assert_equal 'http://example.com/test', request_proxy.normalized_uri
         | 
| 15 | 
            +
                assert_equal 'GET', request_proxy.method
         | 
| 16 | 
            +
              end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
              def test_that_proxy_simple_post_request_works
         | 
| 19 | 
            +
                request = Rack::Request.new(Rack::MockRequest.env_for('http://example.com/test', :method => 'POST'))
         | 
| 20 | 
            +
                params = {'key' => 'value'}
         | 
| 21 | 
            +
                request_proxy = OAuth::RequestProxy.proxy(request, {:uri => 'http://example.com/test', :parameters => params})
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                expected_parameters = {'key' => 'value'}
         | 
| 24 | 
            +
                assert_equal expected_parameters, request_proxy.parameters
         | 
| 25 | 
            +
                assert_equal 'http://example.com/test', request_proxy.normalized_uri
         | 
| 26 | 
            +
                assert_equal 'POST', request_proxy.method
         | 
| 27 | 
            +
              end
         | 
| 28 | 
            +
             | 
| 29 | 
            +
              def test_that_proxy_post_and_get_request_works
         | 
| 30 | 
            +
                request = Rack::Request.new(Rack::MockRequest.env_for('http://example.com/test?key=value', :method => 'POST', :input => 'key2=value2'))
         | 
| 31 | 
            +
                params = {'key2' => 'value2'}
         | 
| 32 | 
            +
                request_proxy = OAuth::RequestProxy.proxy(request, {:uri => 'http://example.com/test?key=value', :parameters => params})
         | 
| 33 | 
            +
             | 
| 34 | 
            +
                expected_parameters = {'key' => 'value', 'key2' => 'value2'}
         | 
| 35 | 
            +
                assert_equal expected_parameters, request_proxy.parameters
         | 
| 36 | 
            +
                assert_equal 'http://example.com/test', request_proxy.normalized_uri
         | 
| 37 | 
            +
                assert_equal 'POST', request_proxy.method
         | 
| 38 | 
            +
              end
         | 
| 39 | 
            +
             | 
| 40 | 
            +
            end
         | 
| @@ -0,0 +1,51 @@ | |
| 1 | 
            +
            require File.expand_path('../test_helper', __FILE__)
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            class StubbedToken < OAuth::RequestToken
         | 
| 4 | 
            +
              define_method :build_authorize_url_promoted do |root_domain, params|
         | 
| 5 | 
            +
                build_authorize_url root_domain, params
         | 
| 6 | 
            +
              end
         | 
| 7 | 
            +
            end
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            class TestRequestToken < Test::Unit::TestCase
         | 
| 10 | 
            +
              def setup
         | 
| 11 | 
            +
                # setup a fake req. token. mocking Consumer would be more appropriate...
         | 
| 12 | 
            +
                @request_token = OAuth::RequestToken.new(
         | 
| 13 | 
            +
                  OAuth::Consumer.new("key", "secret", {}),
         | 
| 14 | 
            +
                  "key",
         | 
| 15 | 
            +
                  "secret"
         | 
| 16 | 
            +
                )
         | 
| 17 | 
            +
              end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
              def test_request_token_builds_authorize_url_connectly_with_additional_params
         | 
| 20 | 
            +
                auth_url = @request_token.authorize_url({:oauth_callback => "github.com"})
         | 
| 21 | 
            +
                assert_not_nil auth_url
         | 
| 22 | 
            +
                assert_match(/oauth_token/, auth_url)
         | 
| 23 | 
            +
                assert_match(/oauth_callback/, auth_url)
         | 
| 24 | 
            +
              end
         | 
| 25 | 
            +
             | 
| 26 | 
            +
              def test_request_token_builds_authorize_url_connectly_with_no_or_nil_params
         | 
| 27 | 
            +
                # we should only have 1 key in the url returned if we didn't pass anything.
         | 
| 28 | 
            +
                # this is the only required param to authenticate the client.
         | 
| 29 | 
            +
                auth_url = @request_token.authorize_url(nil)
         | 
| 30 | 
            +
                assert_not_nil auth_url
         | 
| 31 | 
            +
                assert_match(/\?oauth_token=/, auth_url)
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                auth_url = @request_token.authorize_url
         | 
| 34 | 
            +
                assert_not_nil auth_url
         | 
| 35 | 
            +
                assert_match(/\?oauth_token=/, auth_url)
         | 
| 36 | 
            +
              end
         | 
| 37 | 
            +
             | 
| 38 | 
            +
              #TODO: mock out the Consumer to test the Consumer/AccessToken interaction.
         | 
| 39 | 
            +
              def test_get_access_token
         | 
| 40 | 
            +
              end
         | 
| 41 | 
            +
             | 
| 42 | 
            +
              def test_build_authorize_url
         | 
| 43 | 
            +
               @stubbed_token = StubbedToken.new(nil, nil, nil)
         | 
| 44 | 
            +
                assert_respond_to @stubbed_token, :build_authorize_url_promoted
         | 
| 45 | 
            +
                url = @stubbed_token.build_authorize_url_promoted(
         | 
| 46 | 
            +
                  "http://github.com/oauth/authorize",
         | 
| 47 | 
            +
                  {:foo => "bar bar"})
         | 
| 48 | 
            +
                assert url
         | 
| 49 | 
            +
                assert_equal "http://github.com/oauth/authorize?foo=bar+bar", url
         | 
| 50 | 
            +
              end
         | 
| 51 | 
            +
            end
         | 
| @@ -0,0 +1,59 @@ | |
| 1 | 
            +
            require File.expand_path('../test_helper', __FILE__)
         | 
| 2 | 
            +
            require 'oauth/consumer'
         | 
| 3 | 
            +
            require 'oauth/signature/rsa/sha1'
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            class TestSignatureRsaSha1 < Test::Unit::TestCase
         | 
| 6 | 
            +
             | 
| 7 | 
            +
              def setup
         | 
| 8 | 
            +
                @request = Net::HTTP::Get.new('/photos?file=vacaction.jpg&size=original&oauth_version=1.0&oauth_consumer_key=dpf43f3p2l4k3l03&oauth_timestamp=1196666512&oauth_nonce=13917289812797014437&oauth_signature_method=RSA-SHA1')
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                @consumer = OAuth::Consumer.new('dpf43f3p2l4k3l03', OpenSSL::PKey::RSA.new(IO.read(File.dirname(__FILE__) + "/keys/rsa.pem")))
         | 
| 11 | 
            +
             | 
| 12 | 
            +
              end
         | 
| 13 | 
            +
             | 
| 14 | 
            +
              def test_that_rsa_sha1_implements_rsa_sha1
         | 
| 15 | 
            +
                assert OAuth::Signature.available_methods.include?('rsa-sha1')
         | 
| 16 | 
            +
              end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
              def test_that_get_request_from_oauth_test_cases_produces_matching_signature_base_string
         | 
| 19 | 
            +
                sbs = OAuth::Signature.signature_base_string(@request, { :consumer => @consumer,
         | 
| 20 | 
            +
                                                             :uri => 'http://photos.example.net/photos' } )
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                assert_equal 'GET&http%3A%2F%2Fphotos.example.net%2Fphotos&file%3Dvacaction.jpg%26oauth_consumer_key%3Ddpf43f3p2l4k3l03%26oauth_nonce%3D13917289812797014437%26oauth_signature_method%3DRSA-SHA1%26oauth_timestamp%3D1196666512%26oauth_version%3D1.0%26size%3Doriginal', sbs
         | 
| 23 | 
            +
              end
         | 
| 24 | 
            +
             | 
| 25 | 
            +
              def test_that_get_request_from_oauth_test_cases_produces_matching_signature
         | 
| 26 | 
            +
                signature = OAuth::Signature.sign(@request, { :consumer => @consumer,
         | 
| 27 | 
            +
                                                             :uri => 'http://photos.example.net/photos' } )
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                assert_equal 'jvTp/wX1TYtByB1m+Pbyo0lnCOLIsyGCH7wke8AUs3BpnwZJtAuEJkvQL2/9n4s5wUmUl4aCI4BwpraNx4RtEXMe5qg5T1LVTGliMRpKasKsW//e+RinhejgCuzoH26dyF8iY2ZZ/5D1ilgeijhV/vBka5twt399mXwaYdCwFYE=', signature
         | 
| 30 | 
            +
             | 
| 31 | 
            +
              end
         | 
| 32 | 
            +
             | 
| 33 | 
            +
              def test_that_get_request_from_oauth_test_cases_produces_matching_signature_using_private_key_file
         | 
| 34 | 
            +
                @consumer = OAuth::Consumer.new('dpf43f3p2l4k3l03',nil)
         | 
| 35 | 
            +
             | 
| 36 | 
            +
                signature = OAuth::Signature.sign(@request, { :consumer => @consumer,
         | 
| 37 | 
            +
                                                              :private_key_file=>File.dirname(__FILE__) + "/keys/rsa.pem",
         | 
| 38 | 
            +
                                                             :uri => 'http://photos.example.net/photos' } )
         | 
| 39 | 
            +
             | 
| 40 | 
            +
                assert_equal 'jvTp/wX1TYtByB1m+Pbyo0lnCOLIsyGCH7wke8AUs3BpnwZJtAuEJkvQL2/9n4s5wUmUl4aCI4BwpraNx4RtEXMe5qg5T1LVTGliMRpKasKsW//e+RinhejgCuzoH26dyF8iY2ZZ/5D1ilgeijhV/vBka5twt399mXwaYdCwFYE=', signature
         | 
| 41 | 
            +
              end
         | 
| 42 | 
            +
             | 
| 43 | 
            +
              def test_that_get_request_from_oauth_test_cases_verifies_signature
         | 
| 44 | 
            +
                @request = Net::HTTP::Get.new('/photos?oauth_signature_method=RSA-SHA1&oauth_version=1.0&oauth_consumer_key=dpf43f3p2l4k3l03&oauth_timestamp=1196666512&oauth_nonce=13917289812797014437&file=vacaction.jpg&size=original&oauth_signature=jvTp%2FwX1TYtByB1m%2BPbyo0lnCOLIsyGCH7wke8AUs3BpnwZJtAuEJkvQL2%2F9n4s5wUmUl4aCI4BwpraNx4RtEXMe5qg5T1LVTGliMRpKasKsW%2F%2Fe%2BRinhejgCuzoH26dyF8iY2ZZ%2F5D1ilgeijhV%2FvBka5twt399mXwaYdCwFYE%3D')
         | 
| 45 | 
            +
                @consumer = OAuth::Consumer.new('dpf43f3p2l4k3l03',OpenSSL::X509::Certificate.new(IO.read(File.dirname(__FILE__) + "/keys/rsa.cert")))
         | 
| 46 | 
            +
             | 
| 47 | 
            +
                assert OAuth::Signature.verify(@request, { :consumer => @consumer,
         | 
| 48 | 
            +
                                                             :uri => 'http://photos.example.net/photos' } )
         | 
| 49 | 
            +
             | 
| 50 | 
            +
              end
         | 
| 51 | 
            +
             | 
| 52 | 
            +
              def test_that_get_request_from_oauth_test_cases_verifies_signature_with_pem
         | 
| 53 | 
            +
                @request = Net::HTTP::Get.new('/photos?oauth_signature_method=RSA-SHA1&oauth_version=1.0&oauth_consumer_key=dpf43f3p2l4k3l03&oauth_timestamp=1196666512&oauth_nonce=13917289812797014437&file=vacaction.jpg&size=original&oauth_signature=jvTp%2FwX1TYtByB1m%2BPbyo0lnCOLIsyGCH7wke8AUs3BpnwZJtAuEJkvQL2%2F9n4s5wUmUl4aCI4BwpraNx4RtEXMe5qg5T1LVTGliMRpKasKsW%2F%2Fe%2BRinhejgCuzoH26dyF8iY2ZZ%2F5D1ilgeijhV%2FvBka5twt399mXwaYdCwFYE%3D')
         | 
| 54 | 
            +
                assert OAuth::Signature.verify(@request, { :consumer => @consumer,
         | 
| 55 | 
            +
                                                             :uri => 'http://photos.example.net/photos' } )
         | 
| 56 | 
            +
             | 
| 57 | 
            +
              end
         | 
| 58 | 
            +
             | 
| 59 | 
            +
            end
         | 
    
        data/test/test_server.rb
    ADDED
    
    | @@ -0,0 +1,40 @@ | |
| 1 | 
            +
            require File.expand_path('../test_helper', __FILE__)
         | 
| 2 | 
            +
            require 'oauth/server'
         | 
| 3 | 
            +
            class ServerTest < Test::Unit::TestCase
         | 
| 4 | 
            +
              def setup
         | 
| 5 | 
            +
                @server=OAuth::Server.new "http://test.com"
         | 
| 6 | 
            +
              end
         | 
| 7 | 
            +
             | 
| 8 | 
            +
              def test_default_paths
         | 
| 9 | 
            +
                assert_equal "/oauth/request_token",@server.request_token_path
         | 
| 10 | 
            +
                assert_equal "/oauth/authorize",@server.authorize_path
         | 
| 11 | 
            +
                assert_equal "/oauth/access_token",@server.access_token_path
         | 
| 12 | 
            +
              end
         | 
| 13 | 
            +
             | 
| 14 | 
            +
              def test_default_urls
         | 
| 15 | 
            +
                assert_equal "http://test.com/oauth/request_token",@server.request_token_url
         | 
| 16 | 
            +
                assert_equal "http://test.com/oauth/authorize",@server.authorize_url
         | 
| 17 | 
            +
                assert_equal "http://test.com/oauth/access_token",@server.access_token_url
         | 
| 18 | 
            +
              end
         | 
| 19 | 
            +
             | 
| 20 | 
            +
              def test_generate_consumer_credentials
         | 
| 21 | 
            +
                consumer=@server.generate_consumer_credentials
         | 
| 22 | 
            +
                assert_not_nil consumer.key
         | 
| 23 | 
            +
                assert_not_nil consumer.secret
         | 
| 24 | 
            +
              end
         | 
| 25 | 
            +
             | 
| 26 | 
            +
              def test_create_consumer
         | 
| 27 | 
            +
                @consumer=@server.create_consumer
         | 
| 28 | 
            +
                assert_not_nil @consumer
         | 
| 29 | 
            +
                assert_not_nil @consumer.key
         | 
| 30 | 
            +
                assert_not_nil @consumer.secret
         | 
| 31 | 
            +
                assert_equal "http://test.com",@consumer.site
         | 
| 32 | 
            +
                assert_equal "/oauth/request_token",@consumer.request_token_path
         | 
| 33 | 
            +
                assert_equal "/oauth/authorize",@consumer.authorize_path
         | 
| 34 | 
            +
                assert_equal "/oauth/access_token",@consumer.access_token_path
         | 
| 35 | 
            +
                assert_equal "http://test.com/oauth/request_token",@consumer.request_token_url
         | 
| 36 | 
            +
                assert_equal "http://test.com/oauth/authorize",@consumer.authorize_url
         | 
| 37 | 
            +
                assert_equal "http://test.com/oauth/access_token",@consumer.access_token_url
         | 
| 38 | 
            +
              end
         | 
| 39 | 
            +
             | 
| 40 | 
            +
            end
         | 
| @@ -0,0 +1,22 @@ | |
| 1 | 
            +
            # -*- encoding: utf-8 -*-
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require File.expand_path('../test_helper', __FILE__)
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            class TestOauth < Test::Unit::TestCase
         | 
| 6 | 
            +
             | 
| 7 | 
            +
              def test_parameter_escaping_kcode_invariant
         | 
| 8 | 
            +
                ruby19 = RUBY_VERSION =~ /^1\.9/
         | 
| 9 | 
            +
                old = $KCODE if !ruby19
         | 
| 10 | 
            +
                begin
         | 
| 11 | 
            +
                  %w(n N e E s S u U).each do |kcode|
         | 
| 12 | 
            +
                    $KCODE = kcode if !ruby19
         | 
| 13 | 
            +
                    assert_equal '%E3%81%82', OAuth::Helper.escape('あ'),
         | 
| 14 | 
            +
                                  "Failed to correctly escape Japanese under $KCODE = #{kcode}"
         | 
| 15 | 
            +
                    assert_equal '%C3%A9', OAuth::Helper.escape('é'),
         | 
| 16 | 
            +
                                  "Failed to correctly escape e+acute under $KCODE = #{kcode}"
         | 
| 17 | 
            +
                  end
         | 
| 18 | 
            +
                ensure
         | 
| 19 | 
            +
                  $KCODE = old if !ruby19
         | 
| 20 | 
            +
                end
         | 
| 21 | 
            +
              end
         | 
| 22 | 
            +
            end
         | 
| @@ -0,0 +1,32 @@ | |
| 1 | 
            +
            require File.expand_path('../test_helper', __FILE__)
         | 
| 2 | 
            +
            require 'oauth/signature/base'
         | 
| 3 | 
            +
            require 'net/http'
         | 
| 4 | 
            +
            class SignatureBaseTest < Test::Unit::TestCase
         | 
| 5 | 
            +
             | 
| 6 | 
            +
              def test_that_initialize_requires_one_request_argument
         | 
| 7 | 
            +
                assert_raises ArgumentError do
         | 
| 8 | 
            +
                  OAuth::Signature::Base.new()
         | 
| 9 | 
            +
                end
         | 
| 10 | 
            +
              end
         | 
| 11 | 
            +
             | 
| 12 | 
            +
              def test_that_initialize_requires_a_valid_request_argument
         | 
| 13 | 
            +
                request = nil
         | 
| 14 | 
            +
                assert_raises TypeError do
         | 
| 15 | 
            +
                  OAuth::Signature::Base.new(request) { |token|
         | 
| 16 | 
            +
                    # just a stub
         | 
| 17 | 
            +
                  }
         | 
| 18 | 
            +
                end
         | 
| 19 | 
            +
              end
         | 
| 20 | 
            +
             | 
| 21 | 
            +
              def test_that_initialize_succeeds_when_the_request_proxy_is_valid
         | 
| 22 | 
            +
                # this isn't quite valid, but it will do.
         | 
| 23 | 
            +
                raw_request = Net::HTTP::Get.new('/test')
         | 
| 24 | 
            +
                request = OAuth::RequestProxy.proxy(raw_request)
         | 
| 25 | 
            +
                assert_nothing_raised do
         | 
| 26 | 
            +
                  OAuth::Signature::Base.new(request) { |token|
         | 
| 27 | 
            +
                    # just a stub
         | 
| 28 | 
            +
                  }
         | 
| 29 | 
            +
                end
         | 
| 30 | 
            +
              end
         | 
| 31 | 
            +
             | 
| 32 | 
            +
            end
         | 
| @@ -0,0 +1,31 @@ | |
| 1 | 
            +
            require File.expand_path('../test_helper', __FILE__)
         | 
| 2 | 
            +
            require 'oauth/signature/plaintext'
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            class TestSignaturePlaintext < Test::Unit::TestCase
         | 
| 5 | 
            +
              def test_that_plaintext_implements_plaintext
         | 
| 6 | 
            +
                assert OAuth::Signature.available_methods.include?('plaintext')
         | 
| 7 | 
            +
              end
         | 
| 8 | 
            +
             | 
| 9 | 
            +
              def test_that_get_request_from_oauth_test_cases_produces_matching_signature
         | 
| 10 | 
            +
                request = Net::HTTP::Get.new('/photos?file=vacation.jpg&size=original&oauth_version=1.0&oauth_consumer_key=dpf43f3p2l4k3l03&oauth_token=nnch734d00sl2jdk&oauth_signature=kd94hf93k423kf44%26&oauth_timestamp=1191242096&oauth_nonce=kllo9940pd9333jh&oauth_signature_method=PLAINTEXT')
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                consumer = OAuth::Consumer.new('dpf43f3p2l4k3l03','kd94hf93k423kf44')
         | 
| 13 | 
            +
                token = OAuth::Token.new('nnch734d00sl2jdk', nil)
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                assert OAuth::Signature.verify(request, { :consumer => consumer,
         | 
| 16 | 
            +
                                                            :token => token,
         | 
| 17 | 
            +
                                                            :uri => 'http://photos.example.net/photos' } )
         | 
| 18 | 
            +
              end
         | 
| 19 | 
            +
             | 
| 20 | 
            +
              def test_that_get_request_from_oauth_test_cases_produces_matching_signature_part_two
         | 
| 21 | 
            +
                request = Net::HTTP::Get.new('/photos?file=vacation.jpg&size=original&oauth_version=1.0&oauth_consumer_key=dpf43f3p2l4k3l03&oauth_token=nnch734d00sl2jdk&oauth_signature=kd94hf93k423kf44%26pfkkdhi9sl3r4s00&oauth_timestamp=1191242096&oauth_nonce=kllo9940pd9333jh&oauth_signature_method=PLAINTEXT')
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                consumer = OAuth::Consumer.new('dpf43f3p2l4k3l03','kd94hf93k423kf44')
         | 
| 24 | 
            +
                token = OAuth::Token.new('nnch734d00sl2jdk', 'pfkkdhi9sl3r4s00')
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                assert OAuth::Signature.verify(request, { :consumer => consumer,
         | 
| 27 | 
            +
                                                            :token => token,
         | 
| 28 | 
            +
                                                            :uri => 'http://photos.example.net/photos' } )
         | 
| 29 | 
            +
              end
         | 
| 30 | 
            +
             | 
| 31 | 
            +
            end
         |