def request_with_oauth(method, path, *arguments)
@oauth_config = Aeolus::Image::Factory::Base.config || {}
unless Aeolus::Image::Factory::Base.use_oauth?
return request_without_oauth(method, path, *arguments)
end
result = ActiveSupport::Notifications.instrument("request.active_resource") do |payload|
payload[:method] = method
payload[:request_uri] = "#{site.scheme}://#{site.host}:#{site.port}#{path}"
oauth_consumer = OAuth::Consumer.new(
@oauth_config[:consumer_key],
@oauth_config[:consumer_secret],
:site => @oauth_config[:site] )
token = OAuth::AccessToken.new(oauth_consumer)
base_request = oauth_consumer.create_signed_request(method, path, token, {}, *arguments)
payload[:result] = http.request(base_request)
end
auth_header = result.to_hash['www-authenticate']
problem_header = auth_header ? auth_header.select{|h| h =~ /^OAuth /}.select{|h| h =~ /oauth_problem/}.first : nil
if auth_header && problem_header
params = OAuth::Helper.parse_header(problem_header)
raise OAuth::Problem.new(params.delete("oauth_problem"), result, params)
end
handle_response(result)
rescue Timeout::Error => e
raise TimeoutError.new(e.message)
rescue OpenSSL::SSL::SSLError => e
raise SSLError.new(e.message)
end