diff --git a/lib/jira/client.rb b/lib/jira/client.rb index ea245dc5..8b1724be 100644 --- a/lib/jira/client.rb +++ b/lib/jira/client.rb @@ -26,6 +26,8 @@ module JIRA # :auth_type => :oauth, # :proxy_address => nil, # :proxy_port => nil, + # :proxy_username => nil, + # :proxy_password => nil, # :additional_cookies => nil, # :default_headers => {} # diff --git a/lib/jira/http_client.rb b/lib/jira/http_client.rb index b2e8dc1a..5aa7f316 100644 --- a/lib/jira/http_client.rb +++ b/lib/jira/http_client.rb @@ -43,7 +43,7 @@ def basic_auth_http_conn def http_conn(uri) if @options[:proxy_address] - http_class = Net::HTTP::Proxy(@options[:proxy_address], @options[:proxy_port] || 80) + http_class = Net::HTTP::Proxy(@options[:proxy_address], @options[:proxy_port] || 80, @options[:proxy_username], @options[:proxy_password]) else http_class = Net::HTTP end diff --git a/spec/jira/http_client_spec.rb b/spec/jira/http_client_spec.rb index ab1684b1..4334d80c 100644 --- a/spec/jira/http_client_spec.rb +++ b/spec/jira/http_client_spec.rb @@ -59,6 +59,16 @@ { username: 'donaldduck', password: 'supersecret' } end + let(:proxy_client) do + options = JIRA::Client::DEFAULT_OPTIONS.merge(JIRA::HttpClient::DEFAULT_OPTIONS).merge( + proxy_address: 'proxyAddress', + proxy_port: 42, + proxy_username: 'proxyUsername', + proxy_password: 'proxyPassword' + ) + JIRA::HttpClient.new(options) + end + let(:response) do response = double('response') allow(response).to receive(:kind_of?).with(Net::HTTPSuccess).and_return(true) @@ -229,6 +239,36 @@ expect(custom_ssl_version_client.http_conn(uri)).to eq(http_conn) end + it 'sets up a non-proxied http connection by default' do + uri = double + host = double + port = double + + expect(uri).to receive(:host).and_return(host) + expect(uri).to receive(:port).and_return(port) + + proxy_configuration = basic_client.http_conn(uri).class + expect(proxy_configuration.proxy_address).to be_nil + expect(proxy_configuration.proxy_port).to be_nil + expect(proxy_configuration.proxy_user).to be_nil + expect(proxy_configuration.proxy_pass).to be_nil + end + + it 'sets up a proxied http connection when using proxy options' do + uri = double + host = double + port = double + + expect(uri).to receive(:host).and_return(host) + expect(uri).to receive(:port).and_return(port) + + proxy_configuration = proxy_client.http_conn(uri).class + expect(proxy_configuration.proxy_address).to eq(proxy_client.options[:proxy_address]) + expect(proxy_configuration.proxy_port).to eq(proxy_client.options[:proxy_port]) + expect(proxy_configuration.proxy_user).to eq(proxy_client.options[:proxy_username]) + expect(proxy_configuration.proxy_pass).to eq(proxy_client.options[:proxy_password]) + end + it 'can use client certificates' do http_conn = double uri = double