22require 'async/http/internet/instance'
33require 'async/http/proxy'
44require 'net/http'
5- require 'openssl'
65
76module Bosh ::Monitor ::Plugins
87 module HttpRequestHelper
9- include Bosh ::Monitor ::SSLHelpers
10-
11- def send_http_put_request ( uri , request , ca_cert = nil )
8+ def send_http_put_request ( uri , request )
129 logger . debug ( "sending HTTP PUT to: #{ uri } " )
13- process_async_http_request (
14- method : :put ,
15- uri : uri ,
16- headers : request . fetch ( :head , { } ) ,
17- body : request . fetch ( :body , nil ) ,
18- proxy : request . fetch ( :proxy , nil ) ,
19- ca_cert : ca_cert ,
20- )
10+ process_async_http_request ( method : :put , uri : uri , headers : request . fetch ( :head , { } ) , body : request . fetch ( :body , nil ) , proxy : request . fetch ( :proxy , nil ) )
2111 end
2212
23- def send_http_post_request ( uri , request , ca_cert = nil )
13+ def send_http_post_request ( uri , request )
2414 logger . debug ( "sending HTTP POST to: #{ uri } " )
25- process_async_http_request (
26- method : :post ,
27- uri : uri ,
28- headers : request . fetch ( :head , { } ) ,
29- body : request . fetch ( :body , nil ) ,
30- proxy : request . fetch ( :proxy , nil ) ,
31- ca_cert : ca_cert ,
32- )
15+ process_async_http_request ( method : :post , uri : uri , headers : request . fetch ( :head , { } ) , body : request . fetch ( :body , nil ) , proxy : request . fetch ( :proxy , nil ) )
3316 end
3417
35- def send_http_get_request_synchronous ( uri , ca_cert = nil , headers = nil )
18+ def send_http_get_request_synchronous ( uri , headers = nil )
3619 parsed_uri = URI . parse ( uri . to_s )
3720
3821 # we are interested in response, so send sync request
3922 logger . debug ( "Sending GET request to #{ parsed_uri } " )
4023
41- net_http = sync_client ( parsed_uri , ca_cert )
24+ net_http = sync_client ( parsed_uri , OpenSSL :: SSL :: VERIFY_NONE )
4225
4326 response = net_http . get ( parsed_uri . request_uri , headers )
4427
4528 [ response . body , response . code . to_i ]
4629 end
4730
48- def send_http_post_request_synchronous_with_tls_verify_peer ( uri , request , ca_cert = nil )
31+ def send_http_post_request_synchronous_with_tls_verify_peer ( uri , request )
4932 parsed_uri = URI . parse ( uri . to_s )
5033
51- net_http = sync_client ( parsed_uri , ca_cert , request . fetch ( :proxy , nil ) )
34+ net_http = sync_client ( parsed_uri , OpenSSL :: SSL :: VERIFY_PEER )
5235
5336 response = net_http . post ( parsed_uri . request_uri , request [ :body ] )
5437
@@ -57,40 +40,27 @@ def send_http_post_request_synchronous_with_tls_verify_peer(uri, request, ca_cer
5740
5841 private
5942
60- def resolved_proxy_uri ( parsed_uri , explicit_proxy_string )
61- explicit = explicit_proxy_string . to_s . strip
62- return URI . parse ( explicit ) unless explicit . empty?
63-
64- parsed_uri . find_proxy
65- end
66-
67- def sync_client ( parsed_uri , ca_cert , explicit_proxy = nil )
43+ def sync_client ( parsed_uri , ssl_verify_mode )
6844 net_http = Net ::HTTP . new ( parsed_uri . host , parsed_uri . port )
69- if parsed_uri . scheme == 'https'
70- net_http . use_ssl = true
71- configure_net_http_tls! ( net_http , ca_cert )
72- end
73-
74- unless ( proxy_uri = resolved_proxy_uri ( parsed_uri , explicit_proxy ) ) . nil?
75- net_http . proxy_address = proxy_uri . host
76- net_http . proxy_port = proxy_uri . port
77- net_http . proxy_user = proxy_uri . user
78- net_http . proxy_pass = proxy_uri . password
45+ net_http . use_ssl = ( parsed_uri . scheme == 'https' )
46+ net_http . verify_mode = ssl_verify_mode
47+
48+ env_proxy = parsed_uri . find_proxy
49+ unless env_proxy . nil?
50+ net_http . proxy_address = env_proxy . host
51+ net_http . proxy_port = env_proxy . port
52+ net_http . proxy_user = env_proxy . user
53+ net_http . proxy_pass = env_proxy . password
7954 end
8055
8156 net_http
8257 end
8358
84- def configure_net_http_tls! ( net_http , ca_cert_path )
85- net_http . verify_mode = OpenSSL ::SSL ::VERIFY_PEER
86- net_http . ca_file = ca_cert_path . to_s if configured_ca_cert? ( ca_cert_path )
87- end
88-
89- def process_async_http_request ( method :, uri :, headers : { } , body : nil , proxy : nil , ca_cert : nil )
59+ def process_async_http_request ( method :, uri :, headers : { } , body : nil , proxy : nil )
9060 name = self . class . name
9161 started = Time . now
9262
93- endpoint = create_async_endpoint ( uri : uri , proxy : proxy , ca_cert : ca_cert )
63+ endpoint = create_async_endpoint ( uri : uri , proxy : proxy )
9464 response = Async ::HTTP ::Internet . send ( method , endpoint , headers , body )
9565
9666 # Explicitly read the response stream to ensure the connection fully closes
@@ -105,19 +75,17 @@ def process_async_http_request(method:, uri:, headers: {}, body: nil, proxy: nil
10575 response . close if response
10676 end
10777
108- def create_async_endpoint ( uri :, proxy :, ca_cert : nil )
78+ def create_async_endpoint ( uri :, proxy :)
10979 parsed_uri = URI . parse ( uri . to_s )
80+ env_proxy = parsed_uri . find_proxy
11081
111- endpoint =
112- if parsed_uri . scheme == 'https'
113- ssl_context = ssl_context_for_peer_verification ( ca_cert )
114- Async ::HTTP ::Endpoint . parse ( uri . to_s , ssl_context : ssl_context )
115- else
116- Async ::HTTP ::Endpoint . parse ( uri . to_s )
117- end
82+ ssl_context = OpenSSL ::SSL ::SSLContext . new
83+ ssl_context . set_params ( verify_mode : OpenSSL ::SSL ::VERIFY_NONE )
84+ endpoint = Async ::HTTP ::Endpoint . parse ( uri ) . with ( ssl_context : ssl_context )
11885
119- unless ( proxy_uri = resolved_proxy_uri ( parsed_uri , proxy ) ) . nil?
120- client = Async ::HTTP ::Client . new ( Async ::HTTP ::Endpoint . parse ( proxy_uri . to_s ) )
86+ if proxy || env_proxy
87+ proxy_uri = proxy || "http://#{ env_proxy . host } :#{ env_proxy . port } "
88+ client = Async ::HTTP ::Client . new ( Async ::HTTP ::Endpoint . parse ( proxy_uri ) )
12189 proxy = Async ::HTTP ::Proxy . new ( client , "#{ parsed_uri . host } :#{ parsed_uri . port } " )
12290 endpoint = proxy . wrap_endpoint ( endpoint )
12391 end
0 commit comments