proletarian-oauth 0.3.2
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/History.txt +48 -0
 - data/License.txt +20 -0
 - data/Manifest.txt +71 -0
 - data/README.rdoc +73 -0
 - data/Rakefile +34 -0
 - data/TODO +14 -0
 - data/bin/oauth +5 -0
 - data/lib/oauth/cli.rb +130 -0
 - data/lib/oauth/client/action_controller_request.rb +52 -0
 - data/lib/oauth/client/helper.rb +75 -0
 - data/lib/oauth/client/net_http.rb +75 -0
 - data/lib/oauth/client.rb +4 -0
 - data/lib/oauth/consumer.rb +246 -0
 - data/lib/oauth/helper.rb +17 -0
 - data/lib/oauth/oauth_test_helper.rb +26 -0
 - data/lib/oauth/request_proxy/action_controller_request.rb +62 -0
 - data/lib/oauth/request_proxy/base.rb +107 -0
 - data/lib/oauth/request_proxy/jabber_request.rb +42 -0
 - data/lib/oauth/request_proxy/mock_request.rb +36 -0
 - data/lib/oauth/request_proxy/net_http.rb +65 -0
 - data/lib/oauth/request_proxy/rack_request.rb +40 -0
 - data/lib/oauth/request_proxy.rb +24 -0
 - data/lib/oauth/server.rb +68 -0
 - data/lib/oauth/signature/base.rb +89 -0
 - data/lib/oauth/signature/hmac/base.rb +12 -0
 - data/lib/oauth/signature/hmac/md5.rb +9 -0
 - data/lib/oauth/signature/hmac/rmd160.rb +9 -0
 - data/lib/oauth/signature/hmac/sha1.rb +10 -0
 - data/lib/oauth/signature/hmac/sha2.rb +9 -0
 - data/lib/oauth/signature/md5.rb +13 -0
 - data/lib/oauth/signature/plaintext.rb +23 -0
 - data/lib/oauth/signature/rsa/sha1.rb +44 -0
 - data/lib/oauth/signature/sha1.rb +13 -0
 - data/lib/oauth/signature.rb +28 -0
 - data/lib/oauth/token.rb +137 -0
 - data/lib/oauth/version.rb +3 -0
 - data/lib/oauth.rb +3 -0
 - data/oauth.gemspec +43 -0
 - data/script/destroy +14 -0
 - data/script/generate +14 -0
 - data/script/txt2html +74 -0
 - data/setup.rb +1585 -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/keys/rsa.cert +11 -0
 - data/test/keys/rsa.pem +16 -0
 - data/test/test_action_controller_request_proxy.rb +28 -0
 - data/test/test_consumer.rb +328 -0
 - data/test/test_helper.rb +15 -0
 - data/test/test_hmac_sha1.rb +21 -0
 - data/test/test_net_http_client.rb +169 -0
 - data/test/test_net_http_request_proxy.rb +38 -0
 - data/test/test_rack_request_proxy.rb +40 -0
 - data/test/test_rsa_sha1.rb +59 -0
 - data/test/test_server.rb +40 -0
 - data/test/test_signature.rb +11 -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/website/index.html +87 -0
 - data/website/index.txt +73 -0
 - data/website/javascripts/rounded_corners_lite.inc.js +285 -0
 - data/website/stylesheets/screen.css +138 -0
 - data/website/template.rhtml +48 -0
 - metadata +177 -0
 
| 
         @@ -0,0 +1,246 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'net/http'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'net/https'
         
     | 
| 
      
 3 
     | 
    
         
            +
            require 'oauth/client/net_http'
         
     | 
| 
      
 4 
     | 
    
         
            +
            module OAuth
         
     | 
| 
      
 5 
     | 
    
         
            +
              class Consumer
         
     | 
| 
      
 6 
     | 
    
         
            +
                
         
     | 
| 
      
 7 
     | 
    
         
            +
                @@default_options={
         
     | 
| 
      
 8 
     | 
    
         
            +
                  # Signature method used by server. Defaults to HMAC-SHA1
         
     | 
| 
      
 9 
     | 
    
         
            +
                  :signature_method => 'HMAC-SHA1',
         
     | 
| 
      
 10 
     | 
    
         
            +
                  
         
     | 
| 
      
 11 
     | 
    
         
            +
                  # default paths on site. These are the same as the defaults set up by the generators
         
     | 
| 
      
 12 
     | 
    
         
            +
                  :request_token_path=>'/oauth/request_token',
         
     | 
| 
      
 13 
     | 
    
         
            +
                  :authorize_path=>'/oauth/authorize',
         
     | 
| 
      
 14 
     | 
    
         
            +
                  :access_token_path=>'/oauth/access_token',
         
     | 
| 
      
 15 
     | 
    
         
            +
                  
         
     | 
| 
      
 16 
     | 
    
         
            +
                  # How do we send the oauth values to the server see 
         
     | 
| 
      
 17 
     | 
    
         
            +
                  # http://oauth.net/core/1.0/#consumer_req_param for more info
         
     | 
| 
      
 18 
     | 
    
         
            +
                  #
         
     | 
| 
      
 19 
     | 
    
         
            +
                  # Possible values:
         
     | 
| 
      
 20 
     | 
    
         
            +
                  #
         
     | 
| 
      
 21 
     | 
    
         
            +
                  #   :header - via the Authorize header (Default) ( option 1. in spec)
         
     | 
| 
      
 22 
     | 
    
         
            +
                  #   :body - url form encoded in body of POST request ( option 2. in spec)
         
     | 
| 
      
 23 
     | 
    
         
            +
                  #   :query_string - via the query part of the url ( option 3. in spec)
         
     | 
| 
      
 24 
     | 
    
         
            +
                  :scheme=>:header, 
         
     | 
| 
      
 25 
     | 
    
         
            +
                  
         
     | 
| 
      
 26 
     | 
    
         
            +
                  # Default http method used for OAuth Token Requests (defaults to :post)
         
     | 
| 
      
 27 
     | 
    
         
            +
                  :http_method=>:post, 
         
     | 
| 
      
 28 
     | 
    
         
            +
                  
         
     | 
| 
      
 29 
     | 
    
         
            +
                  :oauth_version=>"1.0"
         
     | 
| 
      
 30 
     | 
    
         
            +
                }
         
     | 
| 
      
 31 
     | 
    
         
            +
                
         
     | 
| 
      
 32 
     | 
    
         
            +
                attr_accessor :site,:options, :key, :secret,:http
         
     | 
| 
      
 33 
     | 
    
         
            +
                
         
     | 
| 
      
 34 
     | 
    
         
            +
                
         
     | 
| 
      
 35 
     | 
    
         
            +
                # Create a new consumer instance by passing it a configuration hash:
         
     | 
| 
      
 36 
     | 
    
         
            +
                #
         
     | 
| 
      
 37 
     | 
    
         
            +
                #   @consumer=OAuth::Consumer.new( key,secret,{
         
     | 
| 
      
 38 
     | 
    
         
            +
                #     :site=>"http://term.ie",
         
     | 
| 
      
 39 
     | 
    
         
            +
                #     :scheme=>:header,
         
     | 
| 
      
 40 
     | 
    
         
            +
                #     :http_method=>:post,
         
     | 
| 
      
 41 
     | 
    
         
            +
                #     :request_token_path=>"/oauth/example/request_token.php",
         
     | 
| 
      
 42 
     | 
    
         
            +
                #     :access_token_path=>"/oauth/example/access_token.php",
         
     | 
| 
      
 43 
     | 
    
         
            +
                #     :authorize_path=>"/oauth/example/authorize.php"
         
     | 
| 
      
 44 
     | 
    
         
            +
                #    })
         
     | 
| 
      
 45 
     | 
    
         
            +
                #
         
     | 
| 
      
 46 
     | 
    
         
            +
                # Start the process by requesting a token
         
     | 
| 
      
 47 
     | 
    
         
            +
                #
         
     | 
| 
      
 48 
     | 
    
         
            +
                #   @request_token=@consumer.get_request_token
         
     | 
| 
      
 49 
     | 
    
         
            +
                #   session[:request_token]=@request_token
         
     | 
| 
      
 50 
     | 
    
         
            +
                #   redirect_to @request_token.authorize_url
         
     | 
| 
      
 51 
     | 
    
         
            +
                #
         
     | 
| 
      
 52 
     | 
    
         
            +
                # When user returns create an access_token
         
     | 
| 
      
 53 
     | 
    
         
            +
                #
         
     | 
| 
      
 54 
     | 
    
         
            +
                #   @access_token=@request_token.get_access_token
         
     | 
| 
      
 55 
     | 
    
         
            +
                #   @photos=@access_token.get('/photos.xml')
         
     | 
| 
      
 56 
     | 
    
         
            +
                #
         
     | 
| 
      
 57 
     | 
    
         
            +
                #
         
     | 
| 
      
 58 
     | 
    
         
            +
                
         
     | 
| 
      
 59 
     | 
    
         
            +
                def initialize(consumer_key,consumer_secret,options={})
         
     | 
| 
      
 60 
     | 
    
         
            +
                  # ensure that keys are symbols
         
     | 
| 
      
 61 
     | 
    
         
            +
                  @options=@@default_options.merge( options.inject({}) do |options, (key, value)|
         
     | 
| 
      
 62 
     | 
    
         
            +
                    options[key.to_sym] = value
         
     | 
| 
      
 63 
     | 
    
         
            +
                    options
         
     | 
| 
      
 64 
     | 
    
         
            +
                  end)
         
     | 
| 
      
 65 
     | 
    
         
            +
                  @key = consumer_key
         
     | 
| 
      
 66 
     | 
    
         
            +
                  @secret = consumer_secret
         
     | 
| 
      
 67 
     | 
    
         
            +
                end
         
     | 
| 
      
 68 
     | 
    
         
            +
                
         
     | 
| 
      
 69 
     | 
    
         
            +
                # The default http method
         
     | 
| 
      
 70 
     | 
    
         
            +
                def http_method
         
     | 
| 
      
 71 
     | 
    
         
            +
                  @http_method||=@options[:http_method]||:post
         
     | 
| 
      
 72 
     | 
    
         
            +
                end
         
     | 
| 
      
 73 
     | 
    
         
            +
                
         
     | 
| 
      
 74 
     | 
    
         
            +
                # The HTTP object for the site. The HTTP Object is what you get when you do Net::HTTP.new
         
     | 
| 
      
 75 
     | 
    
         
            +
                def http
         
     | 
| 
      
 76 
     | 
    
         
            +
                  @http ||= create_http
         
     | 
| 
      
 77 
     | 
    
         
            +
                end
         
     | 
| 
      
 78 
     | 
    
         
            +
                
         
     | 
| 
      
 79 
     | 
    
         
            +
                # Contains the root URI for this site
         
     | 
| 
      
 80 
     | 
    
         
            +
                def uri(custom_uri=nil)
         
     | 
| 
      
 81 
     | 
    
         
            +
                  if custom_uri
         
     | 
| 
      
 82 
     | 
    
         
            +
                    @uri = custom_uri
         
     | 
| 
      
 83 
     | 
    
         
            +
                    @http = create_http # yike, oh well. less intrusive this way
         
     | 
| 
      
 84 
     | 
    
         
            +
                  else  # if no custom passed, we use existing, which, if unset, is set to site uri
         
     | 
| 
      
 85 
     | 
    
         
            +
                    @uri ||= URI.parse(site)
         
     | 
| 
      
 86 
     | 
    
         
            +
                  end
         
     | 
| 
      
 87 
     | 
    
         
            +
                end
         
     | 
| 
      
 88 
     | 
    
         
            +
                
         
     | 
| 
      
 89 
     | 
    
         
            +
                # Makes a request to the service for a new OAuth::RequestToken
         
     | 
| 
      
 90 
     | 
    
         
            +
                #   
         
     | 
| 
      
 91 
     | 
    
         
            +
                #  @request_token=@consumer.get_request_token
         
     | 
| 
      
 92 
     | 
    
         
            +
                #
         
     | 
| 
      
 93 
     | 
    
         
            +
                def get_request_token(request_options={}, *arguments)
         
     | 
| 
      
 94 
     | 
    
         
            +
                  response=token_request(http_method,(request_token_url? ? request_token_url : request_token_path), nil, request_options, *arguments)
         
     | 
| 
      
 95 
     | 
    
         
            +
                  OAuth::RequestToken.new(self,response[:oauth_token],response[:oauth_token_secret])
         
     | 
| 
      
 96 
     | 
    
         
            +
                end
         
     | 
| 
      
 97 
     | 
    
         
            +
                
         
     | 
| 
      
 98 
     | 
    
         
            +
                # Creates, signs and performs an http request.
         
     | 
| 
      
 99 
     | 
    
         
            +
                # It's recommended to use the OAuth::Token classes to set this up correctly.
         
     | 
| 
      
 100 
     | 
    
         
            +
                # The arguments parameters are a hash or string encoded set of parameters if it's a post request as well as optional http headers.
         
     | 
| 
      
 101 
     | 
    
         
            +
                # 
         
     | 
| 
      
 102 
     | 
    
         
            +
                #   @consumer.request(:get,'/people',@token,{:scheme=>:query_string})
         
     | 
| 
      
 103 
     | 
    
         
            +
                #   @consumer.request(:post,'/people',@token,{},@person.to_xml,{ 'Content-Type' => 'application/xml' })
         
     | 
| 
      
 104 
     | 
    
         
            +
                #
         
     | 
| 
      
 105 
     | 
    
         
            +
                def request(http_method,path, token=nil,request_options={},*arguments)
         
     | 
| 
      
 106 
     | 
    
         
            +
                  if path=~/^\//
         
     | 
| 
      
 107 
     | 
    
         
            +
                    _http=http
         
     | 
| 
      
 108 
     | 
    
         
            +
                  else
         
     | 
| 
      
 109 
     | 
    
         
            +
                    _http=create_http(path)
         
     | 
| 
      
 110 
     | 
    
         
            +
                    _uri=URI.parse(path)
         
     | 
| 
      
 111 
     | 
    
         
            +
                    path="#{_uri.path}#{_uri.query ? "?#{_uri.query}" : ""}"
         
     | 
| 
      
 112 
     | 
    
         
            +
                  end
         
     | 
| 
      
 113 
     | 
    
         
            +
                  _http.request(create_signed_request(http_method,path,token,request_options,*arguments))
         
     | 
| 
      
 114 
     | 
    
         
            +
                end
         
     | 
| 
      
 115 
     | 
    
         
            +
                
         
     | 
| 
      
 116 
     | 
    
         
            +
                # Creates and signs an http request.
         
     | 
| 
      
 117 
     | 
    
         
            +
                # It's recommended to use the Token classes to set this up correctly
         
     | 
| 
      
 118 
     | 
    
         
            +
                def create_signed_request(http_method,path, token=nil,request_options={},*arguments)
         
     | 
| 
      
 119 
     | 
    
         
            +
                  request=create_http_request(http_method,path,*arguments)
         
     | 
| 
      
 120 
     | 
    
         
            +
                  sign!(request,token,request_options)
         
     | 
| 
      
 121 
     | 
    
         
            +
                  request
         
     | 
| 
      
 122 
     | 
    
         
            +
                end
         
     | 
| 
      
 123 
     | 
    
         
            +
                
         
     | 
| 
      
 124 
     | 
    
         
            +
                # Creates a request and parses the result as url_encoded. This is used internally for the RequestToken and AccessToken requests.
         
     | 
| 
      
 125 
     | 
    
         
            +
                def token_request(http_method,path,token=nil,request_options={},*arguments)
         
     | 
| 
      
 126 
     | 
    
         
            +
                  response=request(http_method,path,token,request_options,*arguments)
         
     | 
| 
      
 127 
     | 
    
         
            +
                  if response.code=="200"
         
     | 
| 
      
 128 
     | 
    
         
            +
                    CGI.parse(response.body).inject({}){|h,(k,v)| h[k.to_sym]=v.first;h}
         
     | 
| 
      
 129 
     | 
    
         
            +
                  else 
         
     | 
| 
      
 130 
     | 
    
         
            +
                    response.error! 
         
     | 
| 
      
 131 
     | 
    
         
            +
                  end
         
     | 
| 
      
 132 
     | 
    
         
            +
                end
         
     | 
| 
      
 133 
     | 
    
         
            +
             
     | 
| 
      
 134 
     | 
    
         
            +
                # Sign the Request object. Use this if you have an externally generated http request object you want to sign.
         
     | 
| 
      
 135 
     | 
    
         
            +
                def sign!(request,token=nil, request_options = {})
         
     | 
| 
      
 136 
     | 
    
         
            +
                  request.oauth!(http, self, token, options.merge(request_options))
         
     | 
| 
      
 137 
     | 
    
         
            +
                end
         
     | 
| 
      
 138 
     | 
    
         
            +
                
         
     | 
| 
      
 139 
     | 
    
         
            +
                # Return the signature_base_string
         
     | 
| 
      
 140 
     | 
    
         
            +
                def signature_base_string(request,token=nil, request_options = {})
         
     | 
| 
      
 141 
     | 
    
         
            +
                  request.signature_base_string(http, self, token, options.merge(request_options))
         
     | 
| 
      
 142 
     | 
    
         
            +
                end
         
     | 
| 
      
 143 
     | 
    
         
            +
             
     | 
| 
      
 144 
     | 
    
         
            +
                def site
         
     | 
| 
      
 145 
     | 
    
         
            +
                  @options[:site].to_s
         
     | 
| 
      
 146 
     | 
    
         
            +
                end
         
     | 
| 
      
 147 
     | 
    
         
            +
             
     | 
| 
      
 148 
     | 
    
         
            +
                def scheme
         
     | 
| 
      
 149 
     | 
    
         
            +
                  @options[:scheme]
         
     | 
| 
      
 150 
     | 
    
         
            +
                end
         
     | 
| 
      
 151 
     | 
    
         
            +
                
         
     | 
| 
      
 152 
     | 
    
         
            +
                def request_token_path
         
     | 
| 
      
 153 
     | 
    
         
            +
                  @options[:request_token_path]
         
     | 
| 
      
 154 
     | 
    
         
            +
                end
         
     | 
| 
      
 155 
     | 
    
         
            +
                
         
     | 
| 
      
 156 
     | 
    
         
            +
                def authorize_path
         
     | 
| 
      
 157 
     | 
    
         
            +
                  @options[:authorize_path]
         
     | 
| 
      
 158 
     | 
    
         
            +
                end
         
     | 
| 
      
 159 
     | 
    
         
            +
             
     | 
| 
      
 160 
     | 
    
         
            +
                def authentication_path
         
     | 
| 
      
 161 
     | 
    
         
            +
                  'yabadadooo!!!!'
         
     | 
| 
      
 162 
     | 
    
         
            +
                end
         
     | 
| 
      
 163 
     | 
    
         
            +
                
         
     | 
| 
      
 164 
     | 
    
         
            +
                def access_token_path
         
     | 
| 
      
 165 
     | 
    
         
            +
                  @options[:access_token_path]
         
     | 
| 
      
 166 
     | 
    
         
            +
                end
         
     | 
| 
      
 167 
     | 
    
         
            +
                
         
     | 
| 
      
 168 
     | 
    
         
            +
                # TODO this is ugly, rewrite
         
     | 
| 
      
 169 
     | 
    
         
            +
                def request_token_url
         
     | 
| 
      
 170 
     | 
    
         
            +
                  @options[:request_token_url]||site+request_token_path
         
     | 
| 
      
 171 
     | 
    
         
            +
                end
         
     | 
| 
      
 172 
     | 
    
         
            +
             
     | 
| 
      
 173 
     | 
    
         
            +
                def request_token_url?
         
     | 
| 
      
 174 
     | 
    
         
            +
                  @options[:request_token_url]!=nil
         
     | 
| 
      
 175 
     | 
    
         
            +
                end
         
     | 
| 
      
 176 
     | 
    
         
            +
                
         
     | 
| 
      
 177 
     | 
    
         
            +
                def authorize_url
         
     | 
| 
      
 178 
     | 
    
         
            +
                  @options[:authorize_url]||site+authorize_path
         
     | 
| 
      
 179 
     | 
    
         
            +
                end
         
     | 
| 
      
 180 
     | 
    
         
            +
                
         
     | 
| 
      
 181 
     | 
    
         
            +
                def authorize_url?
         
     | 
| 
      
 182 
     | 
    
         
            +
                  @options[:authorize_url]!=nil
         
     | 
| 
      
 183 
     | 
    
         
            +
                end
         
     | 
| 
      
 184 
     | 
    
         
            +
             
     | 
| 
      
 185 
     | 
    
         
            +
                def access_token_url
         
     | 
| 
      
 186 
     | 
    
         
            +
                  @options[:access_token_url]||site+access_token_path
         
     | 
| 
      
 187 
     | 
    
         
            +
                end
         
     | 
| 
      
 188 
     | 
    
         
            +
             
     | 
| 
      
 189 
     | 
    
         
            +
                def access_token_url?
         
     | 
| 
      
 190 
     | 
    
         
            +
                  @options[:access_token_url]!=nil
         
     | 
| 
      
 191 
     | 
    
         
            +
                end
         
     | 
| 
      
 192 
     | 
    
         
            +
             
     | 
| 
      
 193 
     | 
    
         
            +
                protected
         
     | 
| 
      
 194 
     | 
    
         
            +
                
         
     | 
| 
      
 195 
     | 
    
         
            +
                #Instantiates the http object
         
     | 
| 
      
 196 
     | 
    
         
            +
                def create_http(_url=nil)
         
     | 
| 
      
 197 
     | 
    
         
            +
                  if _url.nil?||_url[0]=~/^\//
         
     | 
| 
      
 198 
     | 
    
         
            +
                    our_uri=URI.parse(site)
         
     | 
| 
      
 199 
     | 
    
         
            +
                  else
         
     | 
| 
      
 200 
     | 
    
         
            +
                    our_uri=URI.parse(_url)
         
     | 
| 
      
 201 
     | 
    
         
            +
                  end
         
     | 
| 
      
 202 
     | 
    
         
            +
                  http_object=Net::HTTP.new(our_uri.host, our_uri.port)
         
     | 
| 
      
 203 
     | 
    
         
            +
                  http_object.use_ssl = true if our_uri.scheme=="https"
         
     | 
| 
      
 204 
     | 
    
         
            +
                  http_object
         
     | 
| 
      
 205 
     | 
    
         
            +
                end
         
     | 
| 
      
 206 
     | 
    
         
            +
                
         
     | 
| 
      
 207 
     | 
    
         
            +
                # create the http request object for a given http_method and path
         
     | 
| 
      
 208 
     | 
    
         
            +
                def create_http_request(http_method,path,*arguments)
         
     | 
| 
      
 209 
     | 
    
         
            +
                  http_method=http_method.to_sym
         
     | 
| 
      
 210 
     | 
    
         
            +
                  if [:post,:put].include?(http_method)
         
     | 
| 
      
 211 
     | 
    
         
            +
                    data=arguments.shift
         
     | 
| 
      
 212 
     | 
    
         
            +
                  end
         
     | 
| 
      
 213 
     | 
    
         
            +
                  headers=(arguments.first.is_a?(Hash) ? arguments.shift : {})
         
     | 
| 
      
 214 
     | 
    
         
            +
                  case http_method
         
     | 
| 
      
 215 
     | 
    
         
            +
                  when :post
         
     | 
| 
      
 216 
     | 
    
         
            +
                    request=Net::HTTP::Post.new(path,headers)
         
     | 
| 
      
 217 
     | 
    
         
            +
                    request["Content-Length"]=0 # Default to 0
         
     | 
| 
      
 218 
     | 
    
         
            +
                  when :put
         
     | 
| 
      
 219 
     | 
    
         
            +
                    request=Net::HTTP::Put.new(path,headers)
         
     | 
| 
      
 220 
     | 
    
         
            +
                    request["Content-Length"]=0 # Default to 0
         
     | 
| 
      
 221 
     | 
    
         
            +
                  when :get
         
     | 
| 
      
 222 
     | 
    
         
            +
                    request=Net::HTTP::Get.new(path,headers)
         
     | 
| 
      
 223 
     | 
    
         
            +
                  when :delete
         
     | 
| 
      
 224 
     | 
    
         
            +
                    request=Net::HTTP::Delete.new(path,headers)
         
     | 
| 
      
 225 
     | 
    
         
            +
                  when :head
         
     | 
| 
      
 226 
     | 
    
         
            +
                    request=Net::HTTP::Head.new(path,headers)
         
     | 
| 
      
 227 
     | 
    
         
            +
                  else
         
     | 
| 
      
 228 
     | 
    
         
            +
                    raise ArgumentError, "Don't know how to handle http_method: :#{http_method.to_s}"
         
     | 
| 
      
 229 
     | 
    
         
            +
                  end
         
     | 
| 
      
 230 
     | 
    
         
            +
                  if data.is_a?(Hash)
         
     | 
| 
      
 231 
     | 
    
         
            +
                    request.set_form_data(data)
         
     | 
| 
      
 232 
     | 
    
         
            +
                  elsif data
         
     | 
| 
      
 233 
     | 
    
         
            +
                    request.body=data.to_s
         
     | 
| 
      
 234 
     | 
    
         
            +
                    request["Content-Length"]=request.body.length
         
     | 
| 
      
 235 
     | 
    
         
            +
                  end
         
     | 
| 
      
 236 
     | 
    
         
            +
                  request
         
     | 
| 
      
 237 
     | 
    
         
            +
                end
         
     | 
| 
      
 238 
     | 
    
         
            +
                
         
     | 
| 
      
 239 
     | 
    
         
            +
                # Unset cached http instance because it cannot be marshalled when
         
     | 
| 
      
 240 
     | 
    
         
            +
                # it has already been used and use_ssl is set to true
         
     | 
| 
      
 241 
     | 
    
         
            +
                def marshal_dump(*args)
         
     | 
| 
      
 242 
     | 
    
         
            +
                  @http = nil
         
     | 
| 
      
 243 
     | 
    
         
            +
                  self
         
     | 
| 
      
 244 
     | 
    
         
            +
                end
         
     | 
| 
      
 245 
     | 
    
         
            +
              end
         
     | 
| 
      
 246 
     | 
    
         
            +
            end
         
     | 
    
        data/lib/oauth/helper.rb
    ADDED
    
    | 
         @@ -0,0 +1,17 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'openssl'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'base64'
         
     | 
| 
      
 3 
     | 
    
         
            +
            require 'cgi'
         
     | 
| 
      
 4 
     | 
    
         
            +
            module OAuth
         
     | 
| 
      
 5 
     | 
    
         
            +
              module Helper
         
     | 
| 
      
 6 
     | 
    
         
            +
                extend self
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
                def escape(value)
         
     | 
| 
      
 9 
     | 
    
         
            +
                  CGI.escape(value.to_s).gsub("%7E", '~').gsub("+", "%20")
         
     | 
| 
      
 10 
     | 
    
         
            +
                end
         
     | 
| 
      
 11 
     | 
    
         
            +
                
         
     | 
| 
      
 12 
     | 
    
         
            +
                def generate_key(size=32)
         
     | 
| 
      
 13 
     | 
    
         
            +
                  Base64.encode64(OpenSSL::Random.random_bytes(size)).gsub(/\W/,'')
         
     | 
| 
      
 14 
     | 
    
         
            +
                end    
         
     | 
| 
      
 15 
     | 
    
         
            +
                
         
     | 
| 
      
 16 
     | 
    
         
            +
              end
         
     | 
| 
      
 17 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,26 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'action_controller'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'action_controller/test_process'
         
     | 
| 
      
 3 
     | 
    
         
            +
            module OAuth
         
     | 
| 
      
 4 
     | 
    
         
            +
              module OAuthTestHelper
         
     | 
| 
      
 5 
     | 
    
         
            +
                
         
     | 
| 
      
 6 
     | 
    
         
            +
                def mock_incoming_request_with_query(request)
         
     | 
| 
      
 7 
     | 
    
         
            +
                  incoming=ActionController::TestRequest.new(request.to_hash)
         
     | 
| 
      
 8 
     | 
    
         
            +
                  incoming.request_uri=request.path
         
     | 
| 
      
 9 
     | 
    
         
            +
                  incoming.env["SERVER_PORT"]=request.uri.port
         
     | 
| 
      
 10 
     | 
    
         
            +
                  incoming.host=request.uri.host
         
     | 
| 
      
 11 
     | 
    
         
            +
                  incoming.env['REQUEST_METHOD']=request.http_method
         
     | 
| 
      
 12 
     | 
    
         
            +
                  incoming
         
     | 
| 
      
 13 
     | 
    
         
            +
                end
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                def mock_incoming_request_with_authorize_header(request)
         
     | 
| 
      
 16 
     | 
    
         
            +
                  incoming=ActionController::TestRequest.new
         
     | 
| 
      
 17 
     | 
    
         
            +
                  incoming.env["HTTP_AUTHORIZATION"]=request.to_auth_string
         
     | 
| 
      
 18 
     | 
    
         
            +
                  incoming.request_uri=request.path
         
     | 
| 
      
 19 
     | 
    
         
            +
                  incoming.env["SERVER_PORT"]=request.uri.port
         
     | 
| 
      
 20 
     | 
    
         
            +
                  incoming.host=request.uri.host
         
     | 
| 
      
 21 
     | 
    
         
            +
                  incoming.env['REQUEST_METHOD']=request.http_method
         
     | 
| 
      
 22 
     | 
    
         
            +
                  incoming
         
     | 
| 
      
 23 
     | 
    
         
            +
                end
         
     | 
| 
      
 24 
     | 
    
         
            +
              
         
     | 
| 
      
 25 
     | 
    
         
            +
              end
         
     | 
| 
      
 26 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,62 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'rubygems'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'active_support'
         
     | 
| 
      
 3 
     | 
    
         
            +
            require 'action_controller/request'
         
     | 
| 
      
 4 
     | 
    
         
            +
            require 'oauth/request_proxy/base'
         
     | 
| 
      
 5 
     | 
    
         
            +
            require 'uri'
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            module OAuth::RequestProxy
         
     | 
| 
      
 8 
     | 
    
         
            +
              class ActionControllerRequest < OAuth::RequestProxy::Base
         
     | 
| 
      
 9 
     | 
    
         
            +
                proxies(defined?(ActionController::AbstractRequest) ? ActionController::AbstractRequest : ActionController::Request)
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                def method
         
     | 
| 
      
 12 
     | 
    
         
            +
                  request.method.to_s.upcase
         
     | 
| 
      
 13 
     | 
    
         
            +
                end
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                def uri
         
     | 
| 
      
 16 
     | 
    
         
            +
                  request.url
         
     | 
| 
      
 17 
     | 
    
         
            +
                end
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                def parameters
         
     | 
| 
      
 20 
     | 
    
         
            +
                  if options[:clobber_request]
         
     | 
| 
      
 21 
     | 
    
         
            +
                    options[:parameters] || {}
         
     | 
| 
      
 22 
     | 
    
         
            +
                  else
         
     | 
| 
      
 23 
     | 
    
         
            +
                    params = request_params.merge(query_params).merge(header_params)
         
     | 
| 
      
 24 
     | 
    
         
            +
                    params.stringify_keys! if params.respond_to?(:stringify_keys!)
         
     | 
| 
      
 25 
     | 
    
         
            +
                    params.merge(options[:parameters] || {})
         
     | 
| 
      
 26 
     | 
    
         
            +
                  end
         
     | 
| 
      
 27 
     | 
    
         
            +
                end
         
     | 
| 
      
 28 
     | 
    
         
            +
                
         
     | 
| 
      
 29 
     | 
    
         
            +
                # Override from OAuth::RequestProxy::Base to avoid roundtrip
         
     | 
| 
      
 30 
     | 
    
         
            +
                # conversion to Hash or Array and thus preserve the original
         
     | 
| 
      
 31 
     | 
    
         
            +
                # parameter names
         
     | 
| 
      
 32 
     | 
    
         
            +
                def parameters_for_signature
         
     | 
| 
      
 33 
     | 
    
         
            +
                  params = []
         
     | 
| 
      
 34 
     | 
    
         
            +
                  params << options[:parameters].to_query if options[:parameters]
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
                  unless options[:clobber_request]
         
     | 
| 
      
 37 
     | 
    
         
            +
                    params << header_params.to_query
         
     | 
| 
      
 38 
     | 
    
         
            +
                    params << request.query_string unless request.query_string.blank?
         
     | 
| 
      
 39 
     | 
    
         
            +
                    if request.content_type == Mime::Type.lookup("application/x-www-form-urlencoded")
         
     | 
| 
      
 40 
     | 
    
         
            +
                      params << CGI.unescape(request.raw_post)
         
     | 
| 
      
 41 
     | 
    
         
            +
                    end
         
     | 
| 
      
 42 
     | 
    
         
            +
                  end
         
     | 
| 
      
 43 
     | 
    
         
            +
                  
         
     | 
| 
      
 44 
     | 
    
         
            +
                  params.
         
     | 
| 
      
 45 
     | 
    
         
            +
                    join('&').split('&').
         
     | 
| 
      
 46 
     | 
    
         
            +
                    reject { |kv| kv =~ /^oauth_signature=.*/}.
         
     | 
| 
      
 47 
     | 
    
         
            +
                    reject(&:blank?).
         
     | 
| 
      
 48 
     | 
    
         
            +
                    map { |p| p.split('=') }
         
     | 
| 
      
 49 
     | 
    
         
            +
                end
         
     | 
| 
      
 50 
     | 
    
         
            +
             
     | 
| 
      
 51 
     | 
    
         
            +
                protected
         
     | 
| 
      
 52 
     | 
    
         
            +
             
     | 
| 
      
 53 
     | 
    
         
            +
                def query_params
         
     | 
| 
      
 54 
     | 
    
         
            +
                  request.query_parameters
         
     | 
| 
      
 55 
     | 
    
         
            +
                end
         
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
      
 57 
     | 
    
         
            +
                def request_params
         
     | 
| 
      
 58 
     | 
    
         
            +
                  request.request_parameters
         
     | 
| 
      
 59 
     | 
    
         
            +
                end
         
     | 
| 
      
 60 
     | 
    
         
            +
             
     | 
| 
      
 61 
     | 
    
         
            +
              end
         
     | 
| 
      
 62 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,107 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'oauth/request_proxy'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'oauth/helper'
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            module OAuth::RequestProxy
         
     | 
| 
      
 5 
     | 
    
         
            +
              class Base
         
     | 
| 
      
 6 
     | 
    
         
            +
                include OAuth::Helper
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
                def self.proxies(klass)
         
     | 
| 
      
 9 
     | 
    
         
            +
                  OAuth::RequestProxy.available_proxies[klass] = self
         
     | 
| 
      
 10 
     | 
    
         
            +
                end
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
                attr_accessor :request, :options
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
                def initialize(request, options = {})
         
     | 
| 
      
 15 
     | 
    
         
            +
                  @request = request
         
     | 
| 
      
 16 
     | 
    
         
            +
                  @options = options
         
     | 
| 
      
 17 
     | 
    
         
            +
                end
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                def token
         
     | 
| 
      
 20 
     | 
    
         
            +
                  parameters['oauth_token']
         
     | 
| 
      
 21 
     | 
    
         
            +
                end
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
                def consumer_key
         
     | 
| 
      
 24 
     | 
    
         
            +
                  parameters['oauth_consumer_key']
         
     | 
| 
      
 25 
     | 
    
         
            +
                end
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
                def parameters_for_signature
         
     | 
| 
      
 28 
     | 
    
         
            +
                  p = parameters.dup
         
     | 
| 
      
 29 
     | 
    
         
            +
                  p.delete("oauth_signature")
         
     | 
| 
      
 30 
     | 
    
         
            +
                  p
         
     | 
| 
      
 31 
     | 
    
         
            +
                end
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
                def nonce
         
     | 
| 
      
 34 
     | 
    
         
            +
                  parameters['oauth_nonce']
         
     | 
| 
      
 35 
     | 
    
         
            +
                end
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
                def timestamp
         
     | 
| 
      
 38 
     | 
    
         
            +
                  parameters['oauth_timestamp']
         
     | 
| 
      
 39 
     | 
    
         
            +
                end
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
                def signature_method
         
     | 
| 
      
 42 
     | 
    
         
            +
                  case parameters['oauth_signature_method']
         
     | 
| 
      
 43 
     | 
    
         
            +
                  when Array: parameters['oauth_signature_method'].first
         
     | 
| 
      
 44 
     | 
    
         
            +
                  else
         
     | 
| 
      
 45 
     | 
    
         
            +
                    parameters['oauth_signature_method']
         
     | 
| 
      
 46 
     | 
    
         
            +
                  end
         
     | 
| 
      
 47 
     | 
    
         
            +
                end
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
                def signature
         
     | 
| 
      
 50 
     | 
    
         
            +
                  parameters['oauth_signature'] || ""
         
     | 
| 
      
 51 
     | 
    
         
            +
                end
         
     | 
| 
      
 52 
     | 
    
         
            +
                
         
     | 
| 
      
 53 
     | 
    
         
            +
                # See 9.1.2 in specs
         
     | 
| 
      
 54 
     | 
    
         
            +
                def normalized_uri
         
     | 
| 
      
 55 
     | 
    
         
            +
                  u=URI.parse(uri)
         
     | 
| 
      
 56 
     | 
    
         
            +
                  "#{u.scheme.downcase}://#{u.host.downcase}#{(u.scheme.downcase=='http'&&u.port!=80)||(u.scheme.downcase=='https'&&u.port!=443) ? ":#{u.port}" : ""}#{(u.path&&u.path!='') ? u.path : '/'}"
         
     | 
| 
      
 57 
     | 
    
         
            +
                end
         
     | 
| 
      
 58 
     | 
    
         
            +
                
         
     | 
| 
      
 59 
     | 
    
         
            +
                # See 9.1.1. in specs Normalize Request Parameters
         
     | 
| 
      
 60 
     | 
    
         
            +
                def normalized_parameters
         
     | 
| 
      
 61 
     | 
    
         
            +
                  parameters_for_signature.sort.map do |k, values|
         
     | 
| 
      
 62 
     | 
    
         
            +
             
     | 
| 
      
 63 
     | 
    
         
            +
                    if values.is_a?(Array)
         
     | 
| 
      
 64 
     | 
    
         
            +
                      # multiple values were provided for a single key
         
     | 
| 
      
 65 
     | 
    
         
            +
                      values.sort.collect do |v|
         
     | 
| 
      
 66 
     | 
    
         
            +
                        [escape(k),escape(v)] * "="
         
     | 
| 
      
 67 
     | 
    
         
            +
                      end
         
     | 
| 
      
 68 
     | 
    
         
            +
                    else
         
     | 
| 
      
 69 
     | 
    
         
            +
                      [escape(k),escape(values)] * "="
         
     | 
| 
      
 70 
     | 
    
         
            +
                    end
         
     | 
| 
      
 71 
     | 
    
         
            +
                  end * "&"
         
     | 
| 
      
 72 
     | 
    
         
            +
                end
         
     | 
| 
      
 73 
     | 
    
         
            +
                
         
     | 
| 
      
 74 
     | 
    
         
            +
                # See 9.1 in specs
         
     | 
| 
      
 75 
     | 
    
         
            +
                def signature_base_string
         
     | 
| 
      
 76 
     | 
    
         
            +
                  base = [method, normalized_uri, normalized_parameters]
         
     | 
| 
      
 77 
     | 
    
         
            +
                  base.map { |v| escape(v) }.join("&")
         
     | 
| 
      
 78 
     | 
    
         
            +
                end
         
     | 
| 
      
 79 
     | 
    
         
            +
                
         
     | 
| 
      
 80 
     | 
    
         
            +
                
         
     | 
| 
      
 81 
     | 
    
         
            +
                protected
         
     | 
| 
      
 82 
     | 
    
         
            +
                
         
     | 
| 
      
 83 
     | 
    
         
            +
                def header_params
         
     | 
| 
      
 84 
     | 
    
         
            +
                  %w( X-HTTP_AUTHORIZATION Authorization HTTP_AUTHORIZATION ).each do |header|
         
     | 
| 
      
 85 
     | 
    
         
            +
                    next unless request.env.include?(header)
         
     | 
| 
      
 86 
     | 
    
         
            +
             
     | 
| 
      
 87 
     | 
    
         
            +
                    header = request.env[header]
         
     | 
| 
      
 88 
     | 
    
         
            +
                    next unless header[0,6] == 'OAuth '
         
     | 
| 
      
 89 
     | 
    
         
            +
             
     | 
| 
      
 90 
     | 
    
         
            +
                    oauth_param_string = header[6,header.length].split(/[,=]/)
         
     | 
| 
      
 91 
     | 
    
         
            +
                    oauth_param_string.map! { |v| unescape(v.strip) }
         
     | 
| 
      
 92 
     | 
    
         
            +
                    oauth_param_string.map! { |v| v =~ /^\".*\"$/ ? v[1..-2] : v }
         
     | 
| 
      
 93 
     | 
    
         
            +
                    oauth_params = Hash[*oauth_param_string.flatten]
         
     | 
| 
      
 94 
     | 
    
         
            +
                    oauth_params.reject! { |k,v| k !~ /^oauth_/ }
         
     | 
| 
      
 95 
     | 
    
         
            +
             
     | 
| 
      
 96 
     | 
    
         
            +
                    return oauth_params
         
     | 
| 
      
 97 
     | 
    
         
            +
                  end
         
     | 
| 
      
 98 
     | 
    
         
            +
             
     | 
| 
      
 99 
     | 
    
         
            +
                  return {}
         
     | 
| 
      
 100 
     | 
    
         
            +
                end
         
     | 
| 
      
 101 
     | 
    
         
            +
                
         
     | 
| 
      
 102 
     | 
    
         
            +
                def unescape(value)
         
     | 
| 
      
 103 
     | 
    
         
            +
                  URI.unescape(value.gsub('+', '%2B'))
         
     | 
| 
      
 104 
     | 
    
         
            +
                end
         
     | 
| 
      
 105 
     | 
    
         
            +
                
         
     | 
| 
      
 106 
     | 
    
         
            +
              end
         
     | 
| 
      
 107 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,42 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'xmpp4r'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'oauth/request_proxy/base'
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            module OAuth
         
     | 
| 
      
 5 
     | 
    
         
            +
              module RequestProxy
         
     | 
| 
      
 6 
     | 
    
         
            +
                class JabberRequest < OAuth::RequestProxy::Base
         
     | 
| 
      
 7 
     | 
    
         
            +
                  proxies Jabber::Iq
         
     | 
| 
      
 8 
     | 
    
         
            +
                  proxies Jabber::Presence
         
     | 
| 
      
 9 
     | 
    
         
            +
                  proxies Jabber::Message
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                  def parameters
         
     | 
| 
      
 12 
     | 
    
         
            +
                    return @params if @params
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
                    @params = {}
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
                    oauth = @request.get_elements('//oauth').first
         
     | 
| 
      
 17 
     | 
    
         
            +
                    return @params unless oauth
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                    %w( oauth_token oauth_consumer_key oauth_signature_method oauth_signature
         
     | 
| 
      
 20 
     | 
    
         
            +
                        oauth_timestamp oauth_nonce oauth_version ).each do |param|
         
     | 
| 
      
 21 
     | 
    
         
            +
                      next unless element = oauth.first_element(param)
         
     | 
| 
      
 22 
     | 
    
         
            +
                      @params[param] = element.text
         
     | 
| 
      
 23 
     | 
    
         
            +
                    end
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
                    @params
         
     | 
| 
      
 26 
     | 
    
         
            +
                  end
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                  def method
         
     | 
| 
      
 29 
     | 
    
         
            +
                    @request.name
         
     | 
| 
      
 30 
     | 
    
         
            +
                  end
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
                  def uri
         
     | 
| 
      
 33 
     | 
    
         
            +
                    [@request.from.strip.to_s, @request.to.strip.to_s].join("&")
         
     | 
| 
      
 34 
     | 
    
         
            +
                  end
         
     | 
| 
      
 35 
     | 
    
         
            +
                  
         
     | 
| 
      
 36 
     | 
    
         
            +
                  def normalized_uri
         
     | 
| 
      
 37 
     | 
    
         
            +
                    uri
         
     | 
| 
      
 38 
     | 
    
         
            +
                  end
         
     | 
| 
      
 39 
     | 
    
         
            +
                  
         
     | 
| 
      
 40 
     | 
    
         
            +
                end
         
     | 
| 
      
 41 
     | 
    
         
            +
              end
         
     | 
| 
      
 42 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,36 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'oauth/request_proxy/base'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module OAuth
         
     | 
| 
      
 4 
     | 
    
         
            +
              module RequestProxy
         
     | 
| 
      
 5 
     | 
    
         
            +
                # RequestProxy for Hashes to facilitate simpler signature creation.
         
     | 
| 
      
 6 
     | 
    
         
            +
                # Usage:
         
     | 
| 
      
 7 
     | 
    
         
            +
                #   request = OAuth::RequestProxy.proxy \
         
     | 
| 
      
 8 
     | 
    
         
            +
                #      "method" => "iq",
         
     | 
| 
      
 9 
     | 
    
         
            +
                #      "uri"    => [from, to] * "&",
         
     | 
| 
      
 10 
     | 
    
         
            +
                #      "parameters" => {
         
     | 
| 
      
 11 
     | 
    
         
            +
                #        "oauth_consumer_key"     => oauth_consumer_key,
         
     | 
| 
      
 12 
     | 
    
         
            +
                #        "oauth_token"            => oauth_token,
         
     | 
| 
      
 13 
     | 
    
         
            +
                #        "oauth_signature_method" => "HMAC-SHA1"
         
     | 
| 
      
 14 
     | 
    
         
            +
                #      }
         
     | 
| 
      
 15 
     | 
    
         
            +
                #
         
     | 
| 
      
 16 
     | 
    
         
            +
                #   signature = OAuth::Signature.sign \
         
     | 
| 
      
 17 
     | 
    
         
            +
                #     request,
         
     | 
| 
      
 18 
     | 
    
         
            +
                #     :consumer_secret => oauth_consumer_secret,
         
     | 
| 
      
 19 
     | 
    
         
            +
                #     :token_secret    => oauth_token_secret,
         
     | 
| 
      
 20 
     | 
    
         
            +
                class MockRequest < OAuth::RequestProxy::Base
         
     | 
| 
      
 21 
     | 
    
         
            +
                  proxies Hash
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
                  def parameters
         
     | 
| 
      
 24 
     | 
    
         
            +
                    @request["parameters"]
         
     | 
| 
      
 25 
     | 
    
         
            +
                  end
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
                  def method
         
     | 
| 
      
 28 
     | 
    
         
            +
                    @request["method"]
         
     | 
| 
      
 29 
     | 
    
         
            +
                  end
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
                  def uri
         
     | 
| 
      
 32 
     | 
    
         
            +
                    @request["uri"]
         
     | 
| 
      
 33 
     | 
    
         
            +
                  end
         
     | 
| 
      
 34 
     | 
    
         
            +
                end
         
     | 
| 
      
 35 
     | 
    
         
            +
              end
         
     | 
| 
      
 36 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,65 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'oauth/request_proxy/base'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'net/http'
         
     | 
| 
      
 3 
     | 
    
         
            +
            require 'uri'
         
     | 
| 
      
 4 
     | 
    
         
            +
            require 'cgi'
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            module OAuth::RequestProxy::Net
         
     | 
| 
      
 7 
     | 
    
         
            +
              module HTTP
         
     | 
| 
      
 8 
     | 
    
         
            +
                class HTTPRequest < OAuth::RequestProxy::Base
         
     | 
| 
      
 9 
     | 
    
         
            +
                  proxies ::Net::HTTPRequest
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                  def method
         
     | 
| 
      
 12 
     | 
    
         
            +
                    request.method
         
     | 
| 
      
 13 
     | 
    
         
            +
                  end
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                  def uri
         
     | 
| 
      
 16 
     | 
    
         
            +
                    uri = options[:uri]
         
     | 
| 
      
 17 
     | 
    
         
            +
                    uri.to_s
         
     | 
| 
      
 18 
     | 
    
         
            +
                  end
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
                  def parameters
         
     | 
| 
      
 21 
     | 
    
         
            +
                    if options[:clobber_request]
         
     | 
| 
      
 22 
     | 
    
         
            +
                      options[:parameters]
         
     | 
| 
      
 23 
     | 
    
         
            +
                    else
         
     | 
| 
      
 24 
     | 
    
         
            +
                      all_parameters
         
     | 
| 
      
 25 
     | 
    
         
            +
                    end
         
     | 
| 
      
 26 
     | 
    
         
            +
                  end
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                  private
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
                  def all_parameters
         
     | 
| 
      
 31 
     | 
    
         
            +
                    request_params = CGI.parse(query_string)
         
     | 
| 
      
 32 
     | 
    
         
            +
                    if options[:parameters]
         
     | 
| 
      
 33 
     | 
    
         
            +
                      options[:parameters].each do |k,v|
         
     | 
| 
      
 34 
     | 
    
         
            +
                        if request_params.has_key?(k)
         
     | 
| 
      
 35 
     | 
    
         
            +
                          request_params[k] << v
         
     | 
| 
      
 36 
     | 
    
         
            +
                        else
         
     | 
| 
      
 37 
     | 
    
         
            +
                          request_params[k] = [v].flatten
         
     | 
| 
      
 38 
     | 
    
         
            +
                        end
         
     | 
| 
      
 39 
     | 
    
         
            +
                      end
         
     | 
| 
      
 40 
     | 
    
         
            +
                    end
         
     | 
| 
      
 41 
     | 
    
         
            +
                    request_params
         
     | 
| 
      
 42 
     | 
    
         
            +
                  end
         
     | 
| 
      
 43 
     | 
    
         
            +
             
     | 
| 
      
 44 
     | 
    
         
            +
                  def query_string
         
     | 
| 
      
 45 
     | 
    
         
            +
                    params = [ query_params, auth_header_params ]
         
     | 
| 
      
 46 
     | 
    
         
            +
                    is_form_urlencoded = request['Content-Type'] != nil && request['Content-Type'].downcase == 'application/x-www-form-urlencoded'
         
     | 
| 
      
 47 
     | 
    
         
            +
                    params << post_params if method.to_s.upcase == 'POST' && is_form_urlencoded
         
     | 
| 
      
 48 
     | 
    
         
            +
                    params.compact.join('&')
         
     | 
| 
      
 49 
     | 
    
         
            +
                  end
         
     | 
| 
      
 50 
     | 
    
         
            +
                  
         
     | 
| 
      
 51 
     | 
    
         
            +
                  def query_params
         
     | 
| 
      
 52 
     | 
    
         
            +
                    URI.parse(request.path).query
         
     | 
| 
      
 53 
     | 
    
         
            +
                  end
         
     | 
| 
      
 54 
     | 
    
         
            +
             
     | 
| 
      
 55 
     | 
    
         
            +
                  def post_params
         
     | 
| 
      
 56 
     | 
    
         
            +
                    request.body
         
     | 
| 
      
 57 
     | 
    
         
            +
                  end
         
     | 
| 
      
 58 
     | 
    
         
            +
             
     | 
| 
      
 59 
     | 
    
         
            +
                  def auth_header_params
         
     | 
| 
      
 60 
     | 
    
         
            +
                    return nil unless request['Authorization'] && request['Authorization'][0,5] == 'OAuth'
         
     | 
| 
      
 61 
     | 
    
         
            +
                    auth_params = request['Authorization']
         
     | 
| 
      
 62 
     | 
    
         
            +
                  end
         
     | 
| 
      
 63 
     | 
    
         
            +
                end
         
     | 
| 
      
 64 
     | 
    
         
            +
              end
         
     | 
| 
      
 65 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,40 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'oauth/request_proxy/base'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'uri'
         
     | 
| 
      
 3 
     | 
    
         
            +
            require 'rack'
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            module OAuth::RequestProxy
         
     | 
| 
      
 6 
     | 
    
         
            +
              class RackRequest < OAuth::RequestProxy::Base
         
     | 
| 
      
 7 
     | 
    
         
            +
                proxies Rack::Request
         
     | 
| 
      
 8 
     | 
    
         
            +
                
         
     | 
| 
      
 9 
     | 
    
         
            +
                def method
         
     | 
| 
      
 10 
     | 
    
         
            +
                  request.request_method
         
     | 
| 
      
 11 
     | 
    
         
            +
                end
         
     | 
| 
      
 12 
     | 
    
         
            +
                
         
     | 
| 
      
 13 
     | 
    
         
            +
                def uri
         
     | 
| 
      
 14 
     | 
    
         
            +
                  request.url
         
     | 
| 
      
 15 
     | 
    
         
            +
                end
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                def parameters
         
     | 
| 
      
 18 
     | 
    
         
            +
                  if options[:clobber_request]
         
     | 
| 
      
 19 
     | 
    
         
            +
                    options[:parameters] || {}
         
     | 
| 
      
 20 
     | 
    
         
            +
                  else
         
     | 
| 
      
 21 
     | 
    
         
            +
                    params = request_params.merge(query_params).merge(header_params)
         
     | 
| 
      
 22 
     | 
    
         
            +
                    params.merge(options[:parameters] || {})
         
     | 
| 
      
 23 
     | 
    
         
            +
                  end
         
     | 
| 
      
 24 
     | 
    
         
            +
                end
         
     | 
| 
      
 25 
     | 
    
         
            +
                
         
     | 
| 
      
 26 
     | 
    
         
            +
                def signature
         
     | 
| 
      
 27 
     | 
    
         
            +
                  parameters['oauth_signature']
         
     | 
| 
      
 28 
     | 
    
         
            +
                end
         
     | 
| 
      
 29 
     | 
    
         
            +
                
         
     | 
| 
      
 30 
     | 
    
         
            +
                protected
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
                def query_params
         
     | 
| 
      
 33 
     | 
    
         
            +
                  request.GET
         
     | 
| 
      
 34 
     | 
    
         
            +
                end
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
                def request_params
         
     | 
| 
      
 37 
     | 
    
         
            +
                  request.params
         
     | 
| 
      
 38 
     | 
    
         
            +
                end
         
     | 
| 
      
 39 
     | 
    
         
            +
              end
         
     | 
| 
      
 40 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,24 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module OAuth
         
     | 
| 
      
 2 
     | 
    
         
            +
              module RequestProxy
         
     | 
| 
      
 3 
     | 
    
         
            +
                def self.available_proxies #:nodoc:
         
     | 
| 
      
 4 
     | 
    
         
            +
                  @available_proxies ||= {}
         
     | 
| 
      
 5 
     | 
    
         
            +
                end
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
                def self.proxy(request, options = {})
         
     | 
| 
      
 8 
     | 
    
         
            +
                  return request if request.kind_of?(OAuth::RequestProxy::Base)
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
                  klass = available_proxies[request.class]
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
                  # Search for possible superclass matches.
         
     | 
| 
      
 13 
     | 
    
         
            +
                  if klass.nil?
         
     | 
| 
      
 14 
     | 
    
         
            +
                    request_parent = available_proxies.keys.find { |rc| request.kind_of?(rc) }
         
     | 
| 
      
 15 
     | 
    
         
            +
                    klass = available_proxies[request_parent]
         
     | 
| 
      
 16 
     | 
    
         
            +
                  end
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                  raise UnknownRequestType, request.class.to_s unless klass
         
     | 
| 
      
 19 
     | 
    
         
            +
                  klass.new(request, options)
         
     | 
| 
      
 20 
     | 
    
         
            +
                end
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
                class UnknownRequestType < Exception; end
         
     | 
| 
      
 23 
     | 
    
         
            +
              end
         
     | 
| 
      
 24 
     | 
    
         
            +
            end
         
     |