Skip to content

Commit

Permalink
fix: Turn off SSL verification for provider states setup call.
Browse files Browse the repository at this point in the history
This allows the setup to work on servers that use self signed certificates.
Also, removed unused dependency on pact-provider-proxy gem, and use rack-reverse-proxy directly.
  • Loading branch information
bethesque committed Aug 9, 2017
1 parent e12bc84 commit 744add2
Show file tree
Hide file tree
Showing 5 changed files with 49 additions and 7 deletions.
8 changes: 3 additions & 5 deletions lib/pact/provider_verifier/app.rb
Original file line number Diff line number Diff line change
@@ -1,12 +1,9 @@
require 'pact/provider/proxy/tasks'
require 'pact/provider/proxy'
require 'pact/provider_verifier/add_header_middlware'
require 'pact/provider/rspec'
require 'rack/reverse_proxy'
require 'pact/cli/run_pact_verification'
require 'net/https'
require 'rack/reverse_proxy'
require 'faraday_middleware'
require 'json'
require 'pact/provider_verifier/add_header_middlware'

module Pact
module ProviderVerifier
Expand Down Expand Up @@ -41,6 +38,7 @@ def verify_pacts
publish_results = @options.publish_verification_results

rack_reverse_proxy = Rack::ReverseProxy.new do
reverse_proxy_options verify_mode: OpenSSL::SSL::VERIFY_NONE
reverse_proxy '/', provider_base_url
end

Expand Down
8 changes: 7 additions & 1 deletion lib/pact/provider_verifier/set_up_provider_state.rb
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,13 @@ def call

def post_to_provider_state
verbose = verbose?
connection = Faraday.new(:url => provider_states_setup_url) do | faraday |
options = {url: provider_states_setup_url}

if provider_states_setup_url.start_with?("https:")
options[:ssl] = {verify: false}
end

connection = Faraday.new(options) do | faraday |
# Have encountered flakiness on windows build for pact-go
# Using retries as a hacky solution to try and get around this
# until/if we can work out what the underlying cause is.
Expand Down
3 changes: 2 additions & 1 deletion pact-provider-verifier.gemspec
Original file line number Diff line number Diff line change
Expand Up @@ -22,17 +22,18 @@ Gem::Specification.new do |gem|

gem.add_runtime_dependency 'rspec', '~> 3.5'
gem.add_runtime_dependency 'pact', '~>1.13'
gem.add_runtime_dependency 'pact-provider-proxy', '~>2.1'
gem.add_runtime_dependency 'faraday', '~> 0.9', '>= 0.9.0'
gem.add_runtime_dependency 'faraday_middleware', '~> 0.10'
gem.add_runtime_dependency 'json', '>1.8'
gem.add_runtime_dependency 'rack', '~> 2.0'
gem.add_runtime_dependency 'rake', '~> 10.4', '>= 10.4.2'
gem.add_runtime_dependency 'rack-reverse-proxy'

gem.add_development_dependency 'sinatra'
gem.add_development_dependency 'sinatra-contrib'
gem.add_development_dependency 'octokit', '~> 4.7'
gem.add_development_dependency 'webmock', '~>3.0'
gem.add_development_dependency 'conventional-changelog', '~>1.2'
gem.add_development_dependency 'pry-byebug'

end
20 changes: 20 additions & 0 deletions spec/integration_with_ssl_no_verify_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
require 'support/provider_with_self_signed_cert'

describe "verifying a provider that uses a self signed certificate" do
before(:all) do
@ssl_server_pid = fork do
run_provider_with_self_signed_cert 4568
end
sleep 2
end

subject { `bundle exec bin/pact-provider-verifier -a 1.0.0 --provider-base-url https://localhost:4568 --pact-urls ./test/me-they.json --provider_states_setup_url https://localhost:4568/provider-state -v` }

it "passes because it has SSL verification turned off" do
expect(subject).to include "2 interactions, 0 failures"
end

after(:all) do
Process.kill('INT', @ssl_server_pid)
end
end
17 changes: 17 additions & 0 deletions spec/support/provider_with_self_signed_cert.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
require_relative 'provider'

def run_provider_with_self_signed_cert port
trap 'INT' do @server.shutdown end
require 'rack'
require 'rack/handler/webrick'
require 'webrick/https'

webrick_opts = {:Port => port, :SSLEnable => true, :SSLCertName => [%w[CN localhost]]}
Rack::Handler::WEBrick.run(Provider, webrick_opts) do |server|
@server = server
end
end

if __FILE__== $0
run_provider_with_self_signed_cert 4568
end

0 comments on commit 744add2

Please sign in to comment.