diff --git a/lib/rollbar/notifier.rb b/lib/rollbar/notifier.rb index df08a374..6910d13f 100644 --- a/lib/rollbar/notifier.rb +++ b/lib/rollbar/notifier.rb @@ -530,14 +530,15 @@ def http_proxy(uri) end def proxy_from_config - proxy = configuration.proxy - return nil unless proxy - - px = URI.parse(proxy[:host]) - px.port = proxy[:port] - px.user = proxy[:user] - px.password = proxy[:password] - px + proxy_settings = configuration.proxy + return nil unless proxy_settings + + proxy = null_proxy + proxy.host = URI.parse(proxy_settings[:host]).host + proxy.port = proxy_settings[:port] + proxy.user = proxy_settings[:user] + proxy.password = proxy_settings[:password] + proxy end def proxy_from_env(uri) diff --git a/spec/rollbar_spec.rb b/spec/rollbar_spec.rb index 0247118f..110dc1bd 100644 --- a/spec/rollbar_spec.rb +++ b/spec/rollbar_spec.rb @@ -1043,18 +1043,20 @@ def backtrace end context 'via environment variables' do + before do + @uri = URI.parse(Rollbar::Configuration::DEFAULT_ENDPOINT) + end + it 'honors proxy settings in the environment' do ENV['http_proxy'] = 'http://user:pass@example.com:80' ENV['https_proxy'] = 'http://user:pass@example.com:80' - uri = URI.parse(Rollbar::Configuration::DEFAULT_ENDPOINT) - expect(Net::HTTP).to receive(:new).with(uri.host, uri.port, 'example.com', 80, 'user', 'pass').and_call_original + expect(Net::HTTP).to receive(:new).with(@uri.host, @uri.port, 'example.com', 80, 'user', 'pass').and_call_original Rollbar.info("proxy this") end it 'does not use a proxy if no proxy settings in environemnt' do - uri = URI.parse(Rollbar::Configuration::DEFAULT_ENDPOINT) - expect(Net::HTTP).to receive(:new).with(uri.host, uri.port, nil, nil, nil, nil).and_call_original + expect(Net::HTTP).to receive(:new).with(@uri.host, @uri.port, nil, nil, nil, nil).and_call_original Rollbar.info("proxy this") end end @@ -1069,11 +1071,12 @@ def backtrace :password => 'bar' } end + + @uri = URI.parse(Rollbar::Configuration::DEFAULT_ENDPOINT) end it 'honors proxy settings in the config file' do - uri = URI.parse(Rollbar::Configuration::DEFAULT_ENDPOINT) - expect(Net::HTTP).to receive(:new).with(uri.host, uri.port, 'config.com', 8080, 'foo', 'bar').and_call_original + expect(Net::HTTP).to receive(:new).with(@uri.host, @uri.port, 'config.com', 8080, 'foo', 'bar').and_call_original Rollbar.info("proxy this") end @@ -1081,8 +1084,16 @@ def backtrace ENV['http_proxy'] = 'http://user:pass@example.com:80' ENV['https_proxy'] = 'http://user:pass@example.com:80' - uri = URI.parse(Rollbar::Configuration::DEFAULT_ENDPOINT) - expect(Net::HTTP).to receive(:new).with(uri.host, uri.port, 'config.com', 8080, 'foo', 'bar').and_call_original + expect(Net::HTTP).to receive(:new).with(@uri.host, @uri.port, 'config.com', 8080, 'foo', 'bar').and_call_original + Rollbar.info("proxy this") + end + + it 'allows @-signs in passwords' do + Rollbar.configure do |config| + config.proxy[:password] = "manh@tan" + end + + expect(Net::HTTP).to receive(:new).with(@uri.host, @uri.port, 'config.com', 8080, 'foo', 'manh@tan').and_call_original Rollbar.info("proxy this") end end