]> git.donarmstrong.com Git - dsa-puppet.git/blob - 3rdparty/modules/aviator/lib/puppet/feature/faraday/adapter/net_http_persistent.rb
add aimonb/aviator to 3rdparty
[dsa-puppet.git] / 3rdparty / modules / aviator / lib / puppet / feature / faraday / adapter / net_http_persistent.rb
1 # Rely on autoloading instead of explicit require; helps avoid the "already
2 # initialized constant" warning on Ruby 1.8.7 when NetHttp is refereced below.
3 # require 'faraday/adapter/net_http'
4
5 module Faraday
6   class Adapter
7     # Experimental adapter for net-http-persistent
8     class NetHttpPersistent < NetHttp
9       dependency 'net/http/persistent'
10
11       def net_http_connection(env)
12         if proxy = env[:request][:proxy]
13           proxy_uri = ::URI::HTTP === proxy[:uri] ? proxy[:uri].dup : ::URI.parse(proxy[:uri].to_s)
14           proxy_uri.user = proxy_uri.password = nil
15           # awful patch for net-http-persistent 2.8 not unescaping user/password
16           (class << proxy_uri; self; end).class_eval do
17             define_method(:user) { proxy[:user] }
18             define_method(:password) { proxy[:password] }
19           end if proxy[:user]
20         end
21         Net::HTTP::Persistent.new 'Faraday', proxy_uri
22       end
23
24       def perform_request(http, env)
25         http.request env[:url], create_request(env)
26       rescue Net::HTTP::Persistent::Error => error
27         if error.message.include? 'Timeout'
28           raise Faraday::Error::TimeoutError, error
29         elsif error.message.include? 'connection refused'
30           raise Faraday::Error::ConnectionFailed, error
31         else
32           raise
33         end
34       end
35
36       def configure_ssl(http, ssl)
37         http.verify_mode  = ssl_verify_mode(ssl)
38         http.cert_store   = ssl_cert_store(ssl)
39
40         http.certificate  = ssl[:client_cert]  if ssl[:client_cert]
41         http.private_key  = ssl[:client_key]   if ssl[:client_key]
42         http.ca_file      = ssl[:ca_file]      if ssl[:ca_file]
43         http.ssl_version  = ssl[:version]      if ssl[:version]
44       end
45     end
46   end
47 end