diff --git a/lib/active_merchant/connection.rb b/lib/active_merchant/connection.rb index c2669cd4a2e..4e7d357fb77 100644 --- a/lib/active_merchant/connection.rb +++ b/lib/active_merchant/connection.rb @@ -18,7 +18,7 @@ class Connection RETRY_SAFE = false RUBY_184_POST_HEADERS = { 'Content-Type' => 'application/x-www-form-urlencoded' } - attr_accessor :endpoint, :open_timeout, :read_timeout, :verify_peer, :ssl_version, :ca_file, :ca_path, :pem, :pem_password, :logger, :tag, :ignore_http_status, :max_retries, :proxy_address, :proxy_port + attr_accessor :endpoint, :open_timeout, :read_timeout, :verify_peer, :ssl_version, :ca_file, :ca_path, :pem, :pem_password, :logger, :tag, :ignore_http_status, :max_retries, :proxy_address, :proxy_port, :proxy_user, :proxy_password if Net::HTTP.instance_methods.include?(:min_version=) attr_accessor :min_version @@ -44,6 +44,8 @@ def initialize(endpoint) @ssl_connection = {} @proxy_address = :ENV @proxy_port = nil + @proxy_user = nil + @proxy_password = nil end def wiredump_device=(device) @@ -111,7 +113,7 @@ def request(method, body, headers = {}) def http @http ||= begin - http = Net::HTTP.new(endpoint.host, endpoint.port, proxy_address, proxy_port) + http = Net::HTTP.new(endpoint.host, endpoint.port, proxy_address, proxy_port, proxy_user, proxy_password) configure_debugging(http) configure_timeouts(http) configure_ssl(http) diff --git a/lib/active_merchant/posts_data.rb b/lib/active_merchant/posts_data.rb index ded8a8f3a70..61007399aa0 100644 --- a/lib/active_merchant/posts_data.rb +++ b/lib/active_merchant/posts_data.rb @@ -30,6 +30,8 @@ def self.included(base) base.class_attribute :proxy_address base.class_attribute :proxy_port + base.class_attribute :proxy_user + base.class_attribute :proxy_password end def ssl_get(endpoint, headers = {}) @@ -68,8 +70,10 @@ def raw_ssl_request(method, endpoint, data, headers = {}) connection.ignore_http_status = @options[:ignore_http_status] if @options - connection.proxy_address = proxy_address - connection.proxy_port = proxy_port + connection.proxy_address = proxy_address + connection.proxy_port = proxy_port + connection.proxy_user = proxy_user + connection.proxy_password = proxy_password connection.request(method, data, headers) end diff --git a/test/unit/connection_test.rb b/test/unit/connection_test.rb index 338718a99b4..c6bdc1d72e4 100644 --- a/test/unit/connection_test.rb +++ b/test/unit/connection_test.rb @@ -27,7 +27,7 @@ def test_connection_endpoint_raises_uri_error def test_connection_passes_env_proxy_by_default spy = Net::HTTP.new('example.com', 443) - Net::HTTP.expects(:new).with('example.com', 443, :ENV, nil).returns(spy) + Net::HTTP.expects(:new).with('example.com', 443, :ENV, nil, nil, nil).returns(spy) spy.expects(:start).returns(true) spy.expects(:get).with('/tx.php', { 'connection' => 'close' }).returns(@ok) @connection.request(:get, nil, {}) @@ -36,8 +36,10 @@ def test_connection_passes_env_proxy_by_default def test_connection_does_pass_requested_proxy @connection.proxy_address = 'proxy.example.com' @connection.proxy_port = 8080 + @connection.proxy_user = 'user' + @connection.proxy_password = 'password' spy = Net::HTTP.new('example.com', 443) - Net::HTTP.expects(:new).with('example.com', 443, 'proxy.example.com', 8080).returns(spy) + Net::HTTP.expects(:new).with('example.com', 443, 'proxy.example.com', 8080, 'user', 'password').returns(spy) spy.expects(:start).returns(true) spy.expects(:get).with('/tx.php', { 'connection' => 'close' }).returns(@ok) @connection.request(:get, nil, {}) diff --git a/test/unit/posts_data_test.rb b/test/unit/posts_data_test.rb index 58de35f5d6c..81f5197c602 100644 --- a/test/unit/posts_data_test.rb +++ b/test/unit/posts_data_test.rb @@ -70,9 +70,13 @@ def test_setting_timeouts def test_setting_proxy_settings @gateway.class.proxy_address = 'http://proxy.com' @gateway.class.proxy_port = 1234 + @gateway.class.proxy_user = 'user' + @gateway.class.proxy_password = 'password' ActiveMerchant::Connection.any_instance.expects(:request).returns(@ok) ActiveMerchant::Connection.any_instance.expects(:proxy_address=).with('http://proxy.com') ActiveMerchant::Connection.any_instance.expects(:proxy_port=).with(1234) + ActiveMerchant::Connection.any_instance.expects(:proxy_user=).with('user') + ActiveMerchant::Connection.any_instance.expects(:proxy_password=).with('password') assert_nothing_raised do @gateway.ssl_post(@url, '')