lib/puppetfile-resolver/util.rb in puppetfile-resolver-0.4.0 vs lib/puppetfile-resolver/util.rb in puppetfile-resolver-0.5.0
- old
+ new
@@ -17,7 +17,31 @@
end
def self.static_ca_cert_file
@static_ca_cert_file ||= File.expand_path(File.join(__dir__, 'data', 'ruby_ca_certs.pem'))
end
+
+ # Execute a HTTP/S GET query and return the response
+ # @param [String, URI] uri The URI to request
+ # @param [nil, String, URI] proxy The URI of the proxy server to use. Defaults to nil (No proxy server)
+ # @return [Net::HTTPResponse] the response of the request
+ def self.net_http_get(uri, proxy = nil)
+ uri = URI.parse(uri) unless uri.is_a?(URI)
+
+ http_options = { :use_ssl => uri.class == URI::HTTPS }
+ # Because on Windows Ruby doesn't use the Windows certificate store which has up-to date
+ # CA certs, we can't depend on someone setting the environment variable correctly. So use our
+ # static CA PEM file if SSL_CERT_FILE is not set.
+ http_options[:ca_file] = PuppetfileResolver::Util.static_ca_cert_file if ENV['SSL_CERT_FILE'].nil?
+
+ start_args = [uri.host, uri.port]
+
+ unless proxy.nil?
+ proxy = URI.parse(proxy) unless proxy.is_a?(URI)
+ start_args.concat([proxy.host, proxy.port, proxy.user, proxy.password])
+ end
+
+ Net::HTTP.start(*start_args, http_options) { |http| return http.request(Net::HTTP::Get.new(uri)) }
+ nil
+ end
end
end