pact_broker 2.19.0 → 2.19.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +2 -0
- data/CHANGELOG.md +15 -0
- data/lib/pact_broker/api/decorators/provider_pacts_decorator.rb +2 -1
- data/lib/pact_broker/api/resources/verification.rb +1 -1
- data/lib/pact_broker/api/resources/verifications.rb +4 -0
- data/lib/pact_broker/pacts/diff.rb +2 -2
- data/lib/pact_broker/version.rb +1 -1
- data/script/generate-certificates-for-webooks-certificate-spec.rb +41 -0
- data/script/publish.sh +5 -1
- data/script/query.rb +21 -0
- data/script/recreate-pg-db.sh +3 -1
- data/script/seed-example-matrix.rb +105 -0
- data/script/seed-matrix.rb +1 -0
- data/script/seed.rb +2 -0
- data/spec/features/publish_verification_spec.rb +2 -2
- data/spec/fixtures/certificates/cacert.pem +16 -16
- data/spec/fixtures/certificates/cert.pem +17 -17
- data/spec/fixtures/certificates/key.pem +25 -25
- data/spec/integration/webhooks/certificate_spec.rb +1 -40
- data/spec/lib/pact_broker/api/decorators/provider_pacts_decorator_spec.rb +1 -1
- metadata +5 -3
- data/bethtest.rb +0 -30
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6f1619d6f62ce6aaa00ca73eca6b1cdf76ee0305
|
4
|
+
data.tar.gz: c8fc20b4a52499d6bc259a4937d463c1a902567e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1a8ad6a1480b3a288c11e66f4473ba5af7890fe6ccab8f5ff81f69054dd0df7dc47d24ffc3e77b1888a202b5c9d73ef118794a9c8def6acce31e25590962f89c
|
7
|
+
data.tar.gz: c7270ddcf9932fc5579263dbb0149de7b1e3da15f8e69be217f4b2ddbc47182b409b0fcb0fc3b2d232922b854caae41eb47f2fc08d4ec9ae84d5773b3152751e
|
data/.gitignore
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,18 @@
|
|
1
|
+
<a name="v2.19.1"></a>
|
2
|
+
### v2.19.1 (2018-05-18)
|
3
|
+
|
4
|
+
|
5
|
+
#### Features
|
6
|
+
|
7
|
+
* rename relations in pact diff view ([8c3c62e](/../../commit/8c3c62e))
|
8
|
+
|
9
|
+
|
10
|
+
#### Bug Fixes
|
11
|
+
|
12
|
+
* add pact name back into title of deprecated pacts relation of provider pacts resource ([f5f002a](/../../commit/f5f002a))
|
13
|
+
* set correct content type for verification result resources ([c177fdd](/../../commit/c177fdd))
|
14
|
+
|
15
|
+
|
1
16
|
<a name="v2.19.0"></a>
|
2
17
|
### v2.19.0 (2018-05-03)
|
3
18
|
|
@@ -21,6 +21,7 @@ module PactBroker
|
|
21
21
|
}
|
22
22
|
end
|
23
23
|
|
24
|
+
# TODO make the title and name consistent with title and name of other resources
|
24
25
|
links :'pb:pacts' do | context |
|
25
26
|
represented.collect do | pact |
|
26
27
|
{
|
@@ -35,7 +36,7 @@ module PactBroker
|
|
35
36
|
represented.collect do | pact |
|
36
37
|
{
|
37
38
|
:href => pact_url(context[:base_url], pact),
|
38
|
-
:title =>
|
39
|
+
:title => "DEPRECATED - please use the pb:pacts relation. #{pact.name}",
|
39
40
|
:name => pact.consumer_name
|
40
41
|
}
|
41
42
|
end
|
@@ -84,12 +84,12 @@ module PactBroker
|
|
84
84
|
previous_distinct_url = PactBroker::Api::PactBrokerUrls.pact_url(base_url, comparison_pact)
|
85
85
|
|
86
86
|
links = {
|
87
|
-
"
|
87
|
+
"pact-version" => {
|
88
88
|
"title" => "Pact",
|
89
89
|
"name" => pact.name,
|
90
90
|
"href" => self_url
|
91
91
|
},
|
92
|
-
"
|
92
|
+
"comparison-pact-version" => {
|
93
93
|
"title" => "Pact",
|
94
94
|
"name" => comparison_pact.name,
|
95
95
|
"href" => previous_distinct_url
|
data/lib/pact_broker/version.rb
CHANGED
@@ -0,0 +1,41 @@
|
|
1
|
+
#Code to generate certificates
|
2
|
+
require 'openssl'
|
3
|
+
|
4
|
+
root_key = OpenSSL::PKey::RSA.new 2048 # the CA's public/private key
|
5
|
+
root_ca = OpenSSL::X509::Certificate.new
|
6
|
+
root_ca.version = 2 # cf. RFC 5280 - to make it a "v3" certificate
|
7
|
+
root_ca.serial = 1
|
8
|
+
root_ca.subject = OpenSSL::X509::Name.parse "/DC=org/DC=ruby-lang/CN=Ruby CA"
|
9
|
+
root_ca.issuer = root_ca.subject # root CA's are "self-signed"
|
10
|
+
root_ca.public_key = root_key.public_key
|
11
|
+
root_ca.not_before = Time.now
|
12
|
+
root_ca.not_after = root_ca.not_before + (100 * 365 * 24 * 60 * 60) # 100 years validity
|
13
|
+
ef = OpenSSL::X509::ExtensionFactory.new
|
14
|
+
ef.subject_certificate = root_ca
|
15
|
+
ef.issuer_certificate = root_ca
|
16
|
+
root_ca.add_extension(ef.create_extension("basicConstraints","CA:TRUE",true))
|
17
|
+
root_ca.add_extension(ef.create_extension("keyUsage","keyCertSign, cRLSign", true))
|
18
|
+
root_ca.add_extension(ef.create_extension("subjectKeyIdentifier","hash",false))
|
19
|
+
root_ca.add_extension(ef.create_extension("authorityKeyIdentifier","keyid:always",false))
|
20
|
+
root_ca.sign(root_key, OpenSSL::Digest::SHA256.new)
|
21
|
+
puts root_ca.to_pem
|
22
|
+
File.open("spec/fixtures/certificates/cacert.pem", "w") { |file| file << root_ca.to_pem }
|
23
|
+
|
24
|
+
key = OpenSSL::PKey::RSA.new 2048
|
25
|
+
cert = OpenSSL::X509::Certificate.new
|
26
|
+
cert.version = 2
|
27
|
+
cert.serial = 2
|
28
|
+
cert.subject = OpenSSL::X509::Name.parse "/DC=org/DC=ruby-lang/CN=localhost"
|
29
|
+
cert.issuer = root_ca.subject # root CA is the issuer
|
30
|
+
cert.public_key = key.public_key
|
31
|
+
cert.not_before = Time.now
|
32
|
+
cert.not_after = cert.not_before + (100 * 365 * 24 * 60 * 60) # 100 years validity
|
33
|
+
ef = OpenSSL::X509::ExtensionFactory.new
|
34
|
+
ef.subject_certificate = cert
|
35
|
+
ef.issuer_certificate = root_ca
|
36
|
+
cert.add_extension(ef.create_extension("keyUsage","digitalSignature", true))
|
37
|
+
cert.add_extension(ef.create_extension("subjectKeyIdentifier","hash",false))
|
38
|
+
cert.sign(root_key, OpenSSL::Digest::SHA256.new)
|
39
|
+
puts cert.to_pem
|
40
|
+
File.open("spec/fixtures/certificates/cert.pem", "w") { |file| file << cert.to_pem }
|
41
|
+
File.open("spec/fixtures/certificates/key.pem", "w") { |file| file << key.to_pem }
|
data/script/publish.sh
CHANGED
@@ -4,12 +4,16 @@ function finish {
|
|
4
4
|
}
|
5
5
|
trap finish EXIT
|
6
6
|
|
7
|
+
set -x
|
8
|
+
|
7
9
|
consumer=${1:-Foo}
|
8
10
|
provider=${2:-Bar}
|
11
|
+
escaped_consumer=$(echo $consumer | ruby -e "require 'uri'; puts URI.encode(ARGF.read.strip)")
|
12
|
+
escaped_provider=$(echo $provider | ruby -e "require 'uri'; puts URI.encode(ARGF.read.strip)")
|
9
13
|
echo $consumer $provider
|
10
14
|
body=$(cat script/foo-bar.json | sed "s/Foo/${consumer}/" | sed "s/Bar/${provider}/")
|
11
15
|
echo $body > tmp/pact.json
|
12
16
|
curl -v -XPUT \-H "Content-Type: application/json" \
|
13
17
|
-d@tmp/pact.json \
|
14
|
-
http://127.0.0.1:9292/pacts/provider/${
|
18
|
+
http://127.0.0.1:9292/pacts/provider/${escaped_provider}/consumer/${escaped_consumer}/version/1.0.0
|
15
19
|
echo ""
|
data/script/query.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'benchmark'
|
3
|
+
require 'sequel'
|
4
|
+
require 'logger'
|
5
|
+
require 'table_print'
|
6
|
+
DATABASE_CREDENTIALS = {logger: Logger.new($stdout), adapter: "sqlite", database: ARGV[0], :encoding => 'utf8'}
|
7
|
+
#DATABASE_CREDENTIALS = {logger: Logger.new($stdout), adapter: "sqlite", database: "pact_broker_database_test.sqlite3", :encoding => 'utf8'}
|
8
|
+
#DATABASE_CREDENTIALS = {adapter: "postgres", database: "pact_broker", username: 'pact_broker', password: 'pact_broker', :encoding => 'utf8'}
|
9
|
+
connection = Sequel.connect(DATABASE_CREDENTIALS)
|
10
|
+
connection.timezone = :utc
|
11
|
+
|
12
|
+
time = Benchmark.measure {
|
13
|
+
puts connection[DATA.read].to_a
|
14
|
+
}
|
15
|
+
|
16
|
+
puts time.real
|
17
|
+
|
18
|
+
__END__
|
19
|
+
|
20
|
+
|
21
|
+
select * from matrix
|
data/script/recreate-pg-db.sh
CHANGED
@@ -1,7 +1,9 @@
|
|
1
1
|
SCHEMA="pact_broker"
|
2
|
-
set
|
2
|
+
set +e
|
3
3
|
psql postgres -c "DROP DATABASE ${SCHEMA};"
|
4
4
|
psql postgres -c "CREATE DATABASE ${SCHEMA};"
|
5
|
+
psql postgres -c "CREATE USER pact_broker WITH PASSWORD 'pact_broker'"
|
6
|
+
psql postgres -c "GRANT ALL PRIVILEGES ON DATABASE pact_broker to pact_broker;"
|
5
7
|
psql postgres -c "GRANT ALL PRIVILEGES ON DATABASE ${SCHEMA} TO pact_broker;"
|
6
8
|
ip=$(ifconfig en0 | sed -n -e '/inet/s/.*inet \([0-9.]*\) netmask .*/\1/p')
|
7
9
|
echo ""
|
@@ -0,0 +1,105 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
raise "Please supply database path" unless ARGV[0]
|
4
|
+
|
5
|
+
$LOAD_PATH.unshift './lib'
|
6
|
+
$LOAD_PATH.unshift './spec'
|
7
|
+
$LOAD_PATH.unshift './tasks'
|
8
|
+
ENV['RACK_ENV'] = 'development'
|
9
|
+
require 'sequel'
|
10
|
+
require 'logger'
|
11
|
+
DATABASE_CREDENTIALS = {logger: Logger.new($stdout), adapter: "sqlite", database: ARGV[0], :encoding => 'utf8'}
|
12
|
+
#DATABASE_CREDENTIALS = {adapter: "postgres", database: "pact_broker", username: 'pact_broker', password: 'pact_broker', :encoding => 'utf8'}
|
13
|
+
|
14
|
+
connection = Sequel.connect(DATABASE_CREDENTIALS)
|
15
|
+
connection.timezone = :utc
|
16
|
+
require 'pact_broker/db'
|
17
|
+
PactBroker::DB.connection = connection
|
18
|
+
require 'pact_broker'
|
19
|
+
require 'support/test_data_builder'
|
20
|
+
|
21
|
+
require 'database/table_dependency_calculator'
|
22
|
+
PactBroker::Database::TableDependencyCalculator.call(connection).each do | table_name |
|
23
|
+
connection[table_name].delete
|
24
|
+
end
|
25
|
+
|
26
|
+
PactBroker.configuration.order_versions_by_date = true
|
27
|
+
|
28
|
+
TestDataBuilder.new
|
29
|
+
.create_consumer("zoo-app")
|
30
|
+
.create_provider("animal-service")
|
31
|
+
.create_consumer_version("96327295487f71f8af70a72da820d85333ab5d3e")
|
32
|
+
.create_consumer_version_tag("master")
|
33
|
+
.create_consumer_version_tag("prod")
|
34
|
+
.create_pact(created_at: DateTime.now - 4)
|
35
|
+
.create_verification(provider_version: "a519731ba244b7c0a5de7b1c862d5949e7e5db33", success: true, tag_names: ["master", "prod"], execution_date: DateTime.now - 3)
|
36
|
+
.create_consumer_version("955b9ea2b9eb0c8515ed94b919b0bb3be06db5b5")
|
37
|
+
.create_consumer_version_tag("master")
|
38
|
+
.create_pact(created_at: DateTime.now - 2)
|
39
|
+
.create_verification(provider_version: "82b59ef5f8aef1b1abfb47c3e0004e9697d03b7e", success: false, number: 2, tag_names: ["master"], execution_date: DateTime.now - 1)
|
40
|
+
.create_consumer_version("07247012de27131ff879c3109023942b272d2716")
|
41
|
+
.create_consumer_version_tag("master")
|
42
|
+
.create_pact(created_at: DateTime.now - 0.5)
|
43
|
+
|
44
|
+
# # .create_webhook(method: 'GET', url: 'https://localhost:9393?url=${pactbroker.pactUrl}', body: '${pactbroker.pactUrl}')
|
45
|
+
# TestDataBuilder.new
|
46
|
+
# .create_consumer("Foo")
|
47
|
+
# .create_label("microservice")
|
48
|
+
# .create_provider("Bar")
|
49
|
+
# .create_label("microservice")
|
50
|
+
# .create_webhook(method: 'GET', url: 'https://self-signed.badssl.com')
|
51
|
+
# .create_consumer_version("1.2.100")
|
52
|
+
# .create_environment("production")
|
53
|
+
# .publish_pact
|
54
|
+
# .create_verification(provider_version: "1.4.234", success: true, execution_date: DateTime.now - 15)
|
55
|
+
# .revise_pact
|
56
|
+
# .create_consumer_version("1.2.101")
|
57
|
+
# .create_consumer_version_tag('prod')
|
58
|
+
# .publish_pact
|
59
|
+
# .create_verification(provider_version: "9.9.10", success: false, execution_date: DateTime.now - 15)
|
60
|
+
# .create_consumer_version("1.2.102")
|
61
|
+
# .publish_pact(created_at: (Date.today - 7).to_datetime)
|
62
|
+
# .create_verification(provider_version: "9.9.9", success: true, execution_date: DateTime.now - 14)
|
63
|
+
# .create_provider("Animals")
|
64
|
+
# .create_webhook(method: 'GET', url: 'http://localhost:9393/')
|
65
|
+
# .publish_pact(created_at: (Time.now - 140).to_datetime)
|
66
|
+
# .create_verification(provider_version: "2.0.366", execution_date: Date.today - 2) #changed
|
67
|
+
# .create_provider("Wiffles")
|
68
|
+
# .publish_pact
|
69
|
+
# .create_verification(provider_version: "3.6.100", success: false, execution_date: Date.today - 7)
|
70
|
+
# .create_provider("Hello World App")
|
71
|
+
# .create_consumer_version("1.2.107")
|
72
|
+
# .publish_pact(created_at: (Date.today - 1).to_datetime)
|
73
|
+
# .create_consumer("The Android App")
|
74
|
+
# .create_provider("The back end")
|
75
|
+
# .create_webhook(method: 'GET', url: 'http://localhost:9393/')
|
76
|
+
# .create_consumer_version("1.2.106")
|
77
|
+
# .create_consumer_version_tag("production")
|
78
|
+
# .create_consumer_version_tag("feat-x")
|
79
|
+
# .publish_pact
|
80
|
+
# .create_consumer("Some other app")
|
81
|
+
# .create_provider("A service")
|
82
|
+
# .create_webhook(method: 'GET', url: 'http://localhost:9393/')
|
83
|
+
# .create_triggered_webhook(status: 'success')
|
84
|
+
# .create_webhook_execution
|
85
|
+
# .create_webhook(method: 'POST', url: 'http://foo:9393/')
|
86
|
+
# .create_triggered_webhook(status: 'failure')
|
87
|
+
# .create_webhook_execution
|
88
|
+
# .create_consumer_version("1.2.106")
|
89
|
+
# .publish_pact(created_at: (Date.today - 26).to_datetime)
|
90
|
+
# .create_verification(provider_version: "4.8.152", execution_date: DateTime.now)
|
91
|
+
|
92
|
+
# # TestDataBuilder.new
|
93
|
+
# # .create_pact_with_hierarchy("A", "1", "B")
|
94
|
+
# # .create_consumer_version_tag("master")
|
95
|
+
# # .create_consumer_version_tag("prod")
|
96
|
+
# # .create_verification(provider_version: "1")
|
97
|
+
# # .create_consumer_version("2")
|
98
|
+
# # .create_consumer_version_tag("master")
|
99
|
+
# # .create_pact
|
100
|
+
# # .create_verification(provider_version: "2")
|
101
|
+
|
102
|
+
# # TestDataBuilder.new
|
103
|
+
# # .create_pact_with_hierarchy("Foo", "1", "Bar")
|
104
|
+
# # .create_webhook(method: 'GET', url: 'http://localhost:9393', events: [{ name: 'provider_verification_published' }, {name: ''}])
|
105
|
+
|
data/script/seed-matrix.rb
CHANGED
data/script/seed.rb
CHANGED
@@ -9,6 +9,8 @@ ENV['RACK_ENV'] = 'development'
|
|
9
9
|
require 'sequel'
|
10
10
|
require 'logger'
|
11
11
|
DATABASE_CREDENTIALS = {logger: Logger.new($stdout), adapter: "sqlite", database: ARGV[0], :encoding => 'utf8'}
|
12
|
+
#DATABASE_CREDENTIALS = {adapter: "postgres", database: "pact_broker", username: 'pact_broker', password: 'pact_broker', :encoding => 'utf8'}
|
13
|
+
|
12
14
|
connection = Sequel.connect(DATABASE_CREDENTIALS)
|
13
15
|
connection.timezone = :utc
|
14
16
|
require 'pact_broker/db'
|
@@ -8,7 +8,7 @@ describe "Recording a pact verification" do
|
|
8
8
|
let(:parsed_response_body) { JSON.parse(subject.body) }
|
9
9
|
let(:pact) { td.pact }
|
10
10
|
|
11
|
-
subject { post path, verification_content, {'CONTENT_TYPE' => 'application/json' }; last_response }
|
11
|
+
subject { post path, verification_content, {'CONTENT_TYPE' => 'application/json', 'HTTP_ACCEPT' => 'application/hal+json' }; last_response }
|
12
12
|
|
13
13
|
before do
|
14
14
|
td.create_provider("Provider")
|
@@ -40,7 +40,7 @@ describe "Recording a pact verification" do
|
|
40
40
|
|
41
41
|
it "returns a link to itself that can be followed" do
|
42
42
|
get_verification_link = parsed_response_body['_links']['self']['href']
|
43
|
-
get get_verification_link
|
43
|
+
get get_verification_link, nil, { 'HTTP_ACCEPT' => 'application/hal+json' }
|
44
44
|
expect(last_response.status).to be 200
|
45
45
|
expect(JSON.parse(subject.body)).to include JSON.parse(verification_content)
|
46
46
|
end
|
@@ -1,21 +1,21 @@
|
|
1
1
|
-----BEGIN CERTIFICATE-----
|
2
2
|
MIIDZDCCAkygAwIBAgIBATANBgkqhkiG9w0BAQsFADBCMRMwEQYKCZImiZPyLGQB
|
3
3
|
GRYDb3JnMRkwFwYKCZImiZPyLGQBGRYJcnVieS1sYW5nMRAwDgYDVQQDDAdSdWJ5
|
4
|
-
|
4
|
+
IENBMCAXDTE4MDUxNzA3NDQzNVoYDzIxMTgwNDIzMDc0NDM1WjBCMRMwEQYKCZIm
|
5
5
|
iZPyLGQBGRYDb3JnMRkwFwYKCZImiZPyLGQBGRYJcnVieS1sYW5nMRAwDgYDVQQD
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
6
|
+
DAdSdWJ5IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1tcEnh7S
|
7
|
+
iiL46HNfx5LkGxBZ9Dn7tUm6CKlPzykjlCGZ9a5VpnZxwEK5LkIvbMiBz8UjhcVh
|
8
|
+
8pUghbyvwSHdtiMDNU4zpKIgrTXZ/tiqctgYYSFbtEtE17VrVM8JZFSxzLSJEvEZ
|
9
|
+
rhkOqeVEGJJY28taItbjxfHYkTlQYTjn6tA18KT13nGAUMEoC0HZTHYr2nCY7MzI
|
10
|
+
cEISvm5PP7gXKHrOfpbm+E3qMm9kyDQLkez8iGfq2aGSshuT4mcAvxq5dS6TsPSy
|
11
|
+
ZphnfHw3THqgBrR8Bw1tMhsnLhD96Miy5sRnY2gQEAQngccLZ/F6ls6a+5Adka2o
|
12
|
+
zFmJVZXhHbVeRwIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE
|
13
|
+
AwIBBjAdBgNVHQ4EFgQUBX8ZMupoE2NMwyE1kdlVptFti/kwHwYDVR0jBBgwFoAU
|
14
|
+
BX8ZMupoE2NMwyE1kdlVptFti/kwDQYJKoZIhvcNAQELBQADggEBAIxS0jDTRC9R
|
15
|
+
mxsr2j/o9oQvRi5+74qDlXs7YzbQ1V7dy++g48St6Yjk4xfdGdgAS8IrS9vIRKUy
|
16
|
+
jnlwUklnkvoWk2DKF9NFA32c1mxZhau5QGu3VH7pgmcWQawXttqpgHbSLEDAf9wU
|
17
|
+
jgTRdL8LxMIf6xy2uPL8GZWFbmdU5HOb3czS1drouE0U3ZI+1uzAlR3vqGo0Mvhd
|
18
|
+
MwYBodIJlWa0mXKMnfZxYLtiv7m5H5I2zBfget3+3ovuN79Zn6RA3ecnxn75jalA
|
19
|
+
R6MNlS/tzpXcS/gwnSKrwHSjb1V+B4Q96EsfulWC2UpTa0WTxngyiqtp6GU6RZva
|
20
|
+
jHT1Ty2CglM=
|
21
21
|
-----END CERTIFICATE-----
|
@@ -1,20 +1,20 @@
|
|
1
1
|
-----BEGIN CERTIFICATE-----
|
2
|
-
|
2
|
+
MIIDNDCCAhygAwIBAgIBAjANBgkqhkiG9w0BAQsFADBCMRMwEQYKCZImiZPyLGQB
|
3
3
|
GRYDb3JnMRkwFwYKCZImiZPyLGQBGRYJcnVieS1sYW5nMRAwDgYDVQQDDAdSdWJ5
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
4
|
+
IENBMCAXDTE4MDUxNzA3NDQzNVoYDzIxMTgwNDIzMDc0NDM1WjBEMRMwEQYKCZIm
|
5
|
+
iZPyLGQBGRYDb3JnMRkwFwYKCZImiZPyLGQBGRYJcnVieS1sYW5nMRIwEAYDVQQD
|
6
|
+
DAlsb2NhbGhvc3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCRSyWN
|
7
|
+
EBxxMKdSJucoT4b3rs8xq98TVV3Lo7RyLZbf/KUl7Q3GttdfnLRBRb49rAMcXLOA
|
8
|
+
pccdBVq7kImNQPZOBhlD839sxpupYRiQ7ehVcsZkGVMw13gL31SHcaeYIVxFcAMJ
|
9
|
+
iBCSusqk2p5KpcgoihznOX6MkYV1s2TRARbfobSzA3mGczA0frJe/dJ5xZymBhpQ
|
10
|
+
3cFUonNrnLeBL2pP2jKAyQLLYW+Cfj+U26CEKZSAre/Y5xcSOP0AIVsnQjUGYYsb
|
11
|
+
PM1PokA8n/CYpeppQdyL+nQcOe2csHAiBa9kSdiM1GshdvnOO1UoHQ9GcyN7Xikm
|
12
|
+
Bw34JvB7VUvilaeJAgMBAAGjMTAvMA4GA1UdDwEB/wQEAwIHgDAdBgNVHQ4EFgQU
|
13
|
+
qVjAGwu3nbFw5OJDPEmJ/lO24gQwDQYJKoZIhvcNAQELBQADggEBAMK3j313EZxR
|
14
|
+
msAdmlVKKldRQGTXpu59wune60cME/BWYrPlprmIREy8ygJl1hqLivoQpxyWfJw3
|
15
|
+
RxTNSg6b1JYDq1ze3OxqcWMVPOC2rAwOAa57eQxS4fB9RLL18PuLzcHPRnNBbphl
|
16
|
+
NfB47ymIdMwH2WuuSg2qY0E35ufX09dK6sV+LdgzKsYDQFgYTzBoWen+WGCvNZ/i
|
17
|
+
dzCv7ZhZwVhDm8CoBoc6eHamzFmt4ysdZ95FarMHGTllAVrqLMwu6IIoIEj4C07X
|
18
|
+
n7E5lMFJkOPlA9UJFHHzOqEb3jk/fIe/QPuyXQDLxOY+tLCBRw32lO+3jzpgLrJ2
|
19
|
+
YbVnmeUvpz0=
|
20
20
|
-----END CERTIFICATE-----
|
@@ -1,27 +1,27 @@
|
|
1
1
|
-----BEGIN RSA PRIVATE KEY-----
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
/
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
2
|
+
MIIEogIBAAKCAQEAkUsljRAccTCnUibnKE+G967PMavfE1Vdy6O0ci2W3/ylJe0N
|
3
|
+
xrbXX5y0QUW+PawDHFyzgKXHHQVau5CJjUD2TgYZQ/N/bMabqWEYkO3oVXLGZBlT
|
4
|
+
MNd4C99Uh3GnmCFcRXADCYgQkrrKpNqeSqXIKIoc5zl+jJGFdbNk0QEW36G0swN5
|
5
|
+
hnMwNH6yXv3SecWcpgYaUN3BVKJza5y3gS9qT9oygMkCy2Fvgn4/lNughCmUgK3v
|
6
|
+
2OcXEjj9ACFbJ0I1BmGLGzzNT6JAPJ/wmKXqaUHci/p0HDntnLBwIgWvZEnYjNRr
|
7
|
+
IXb5zjtVKB0PRnMje14pJgcN+Cbwe1VL4pWniQIDAQABAoIBAHskPqJNKl4Ax39I
|
8
|
+
O5idtp2Lyk2mBr5DFuj2SYSQARS781iujoOCCg4eKWQ88R0iAczzAKwjVRvSovDf
|
9
|
+
csWGbnr4jkdaRAB0YA/xnDmRed2aFm1WTXzS0gr18JWPDWVRuPudEOXuLWW+7OtF
|
10
|
+
4u0PjxJU5GRRBWGsIHn+Xo8JplJIW4vWSrwEp8G+rJqzQ6hUN8kHS8Sz3tLy3puQ
|
11
|
+
fu9o4CTiZMDIlRu0PqzBIJ8wuSUa9McSQzdvr3sQGmx0bpmuXbslEuZWjQPGdN2M
|
12
|
+
FMHCelRPBOJr1w/kP/pcORSWv4K3wUtKDS4/zzgaq2dmXOVAgGWyC04VGKgZ0XL/
|
13
|
+
WyiYAYECgYEAwapB4V9wEEbBXMBEzg6KEX2mCPsGqCMuwGfh2+erw4vAebjX5pBQ
|
14
|
+
AQ9Ip7Nvk+9X+ns4gOxvtPAEBAXNkU7cvFvdJaQ023QMATDj1s/a7rNbXHql3CYy
|
15
|
+
vBmsKQFm/eF3oi8NXRnyqsh1j8wWLpXDwp8wVAtPP1Rfx3SzJEd2czkCgYEAwA8j
|
16
|
+
6ILlxsSj59px9Lo/a0ug0GtXoNjX1p7pCCZFK8P0guu/JC8we/tQob8nStpGJ/Jo
|
17
|
+
+WO4sQUyKwqezo9FqLO41NFvySQ2HbIs40Hpv0CWzX17zJA5zwWbuAb9oGaWAICP
|
18
|
+
JHIPbOlYc18y56kbMzQh/gMdNVC819Ku3YJgRtECgYBwv/npB1JL95WdtUaZnLdf
|
19
|
+
ZYKj2dnPS+RtGk3RZHiIuTVO6IGx9zTM2SQYlowQWZkj+Fc2H/ENK2t7GBHNVleG
|
20
|
+
xgjjYE1xsodGrjsHli3FKOC436Lun8KL5npnySw4BOtMng4utOul6F0hYdVMO98j
|
21
|
+
0OAnHgp+OVYl3lhpd72LaQKBgC/kFpol+dIEurJX4E6cGrBQnXsbKTCsobWczpL/
|
22
|
+
qAPvywrSaklFkxt3YXXTyqJ5p0DSy6ZUXXuWxhnBfjQXudEFb7NxviQz6WKiSVsp
|
23
|
+
1nWgT3pSLgqmdCPRTDEpXRkgO4tIg2kdIAeScEHknTbzDhtIhqlmcWQYC97tZDlM
|
24
|
+
B2HhAoGAXKZrKbiQlQ+AdMoFHFDdViQc+yotF03HNryJHMqXHWgL67wJNhsZymlU
|
25
|
+
1nfU74llxLj+w6Fx2h8UOTf5HFSx+6YUuLYM02PW398oi0NmqhuXvdTs4qk/tbf6
|
26
|
+
7/P2Ddgcr2M4iB0LbIude4JKMby3gDiY1RzpGJpvRyYhDyr+owk=
|
27
27
|
-----END RSA PRIVATE KEY-----
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'pact_broker/domain/webhook_request'
|
2
|
+
# certificates and key generated by script/generate-certificates-for-webooks-certificate-spec.rb
|
2
3
|
|
3
4
|
describe "executing a webhook to a server with a self signed certificate" do
|
4
5
|
let(:td) { TestDataBuilder.new }
|
@@ -38,43 +39,3 @@ describe "executing a webhook to a server with a self signed certificate" do
|
|
38
39
|
Process.kill 'KILL', @pipe.pid
|
39
40
|
end
|
40
41
|
end
|
41
|
-
|
42
|
-
# Code to generate certificates
|
43
|
-
# root_key = OpenSSL::PKey::RSA.new 2048 # the CA's public/private key
|
44
|
-
# root_ca = OpenSSL::X509::Certificate.new
|
45
|
-
# root_ca.version = 2 # cf. RFC 5280 - to make it a "v3" certificate
|
46
|
-
# root_ca.serial = 1
|
47
|
-
# root_ca.subject = OpenSSL::X509::Name.parse "/DC=org/DC=ruby-lang/CN=Ruby CA"
|
48
|
-
# root_ca.issuer = root_ca.subject # root CA's are "self-signed"
|
49
|
-
# root_ca.public_key = root_key.public_key
|
50
|
-
# root_ca.not_before = Time.now
|
51
|
-
# root_ca.not_after = root_ca.not_before + 100 * 365 * 24 * 60 * 60 # 100 years validity
|
52
|
-
# ef = OpenSSL::X509::ExtensionFactory.new
|
53
|
-
# ef.subject_certificate = root_ca
|
54
|
-
# ef.issuer_certificate = root_ca
|
55
|
-
# root_ca.add_extension(ef.create_extension("basicConstraints","CA:TRUE",true))
|
56
|
-
# root_ca.add_extension(ef.create_extension("keyUsage","keyCertSign, cRLSign", true))
|
57
|
-
# root_ca.add_extension(ef.create_extension("subjectKeyIdentifier","hash",false))
|
58
|
-
# root_ca.add_extension(ef.create_extension("authorityKeyIdentifier","keyid:always",false))
|
59
|
-
# root_ca.sign(root_key, OpenSSL::Digest::SHA256.new)
|
60
|
-
# puts root_ca.to_pem
|
61
|
-
# File.open("spec/fixtures/certificates/cacert.pem", "w") { |file| file << root_ca.to_pem }
|
62
|
-
|
63
|
-
# key = OpenSSL::PKey::RSA.new 2048
|
64
|
-
# cert = OpenSSL::X509::Certificate.new
|
65
|
-
# cert.version = 2
|
66
|
-
# cert.serial = 2
|
67
|
-
# cert.subject = OpenSSL::X509::Name.parse "/DC=org/DC=ruby-lang/CN=Ruby certificate"
|
68
|
-
# cert.issuer = root_ca.subject # root CA is the issuer
|
69
|
-
# cert.public_key = key.public_key
|
70
|
-
# cert.not_before = Time.now
|
71
|
-
# cert.not_after = cert.not_before + 1 * 365 * 24 * 60 * 60 # 1 years validity
|
72
|
-
# ef = OpenSSL::X509::ExtensionFactory.new
|
73
|
-
# ef.subject_certificate = cert
|
74
|
-
# ef.issuer_certificate = root_ca
|
75
|
-
# cert.add_extension(ef.create_extension("keyUsage","digitalSignature", true))
|
76
|
-
# cert.add_extension(ef.create_extension("subjectKeyIdentifier","hash",false))
|
77
|
-
# cert.sign(root_key, OpenSSL::Digest::SHA256.new)
|
78
|
-
# puts cert.to_pem
|
79
|
-
# File.open("spec/fixtures/certificates/cert.pem", "w") { |file| file << cert.to_pem }
|
80
|
-
# File.open("spec/fixtures/certificates/key.pem", "w") { |file| file << key.to_pem }
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pact_broker
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.19.
|
4
|
+
version: 2.19.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bethany Skurrie
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2018-05-
|
13
|
+
date: 2018-05-18 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: httparty
|
@@ -537,7 +537,6 @@ files:
|
|
537
537
|
- RELEASING.md
|
538
538
|
- Rakefile
|
539
539
|
- UPGRADING.md
|
540
|
-
- bethtest.rb
|
541
540
|
- config.ru
|
542
541
|
- config/boot.rb
|
543
542
|
- config/database.travis.yml
|
@@ -943,16 +942,19 @@ files:
|
|
943
942
|
- script/db-spec.sh
|
944
943
|
- script/foo-bar-verification.json
|
945
944
|
- script/foo-bar.json
|
945
|
+
- script/generate-certificates-for-webooks-certificate-spec.rb
|
946
946
|
- script/insert-self-signed-certificate-from-url.rb
|
947
947
|
- script/publish-2.sh
|
948
948
|
- script/publish-new.sh
|
949
949
|
- script/publish-not-a-pact.sh
|
950
950
|
- script/publish-verification.sh
|
951
951
|
- script/publish.sh
|
952
|
+
- script/query.rb
|
952
953
|
- script/recreate-mysql-db.sh
|
953
954
|
- script/recreate-pg-db.sh
|
954
955
|
- script/recreate-test-database.sh
|
955
956
|
- script/release.sh
|
957
|
+
- script/seed-example-matrix.rb
|
956
958
|
- script/seed-matrix.rb
|
957
959
|
- script/seed.rb
|
958
960
|
- script/update-hal-browser
|
data/bethtest.rb
DELETED
@@ -1,30 +0,0 @@
|
|
1
|
-
require 'openssl'
|
2
|
-
require 'uri'
|
3
|
-
require 'net/http'
|
4
|
-
|
5
|
-
uri = URI('https://self-signed.badssl.com')
|
6
|
-
downloaded_cert_path = '/tmp/downloaded_cert.pem'
|
7
|
-
|
8
|
-
puts `openssl s_client -showcerts -servername #{uri.host} -connect #{uri.host}:#{uri.port} </dev/null 2>/dev/null|openssl x509 -text`
|
9
|
-
command = "openssl s_client -showcerts -servername #{uri.host} -connect #{uri.host}:#{uri.port} </dev/null 2>/dev/null|openssl x509 -outform PEM > #{downloaded_cert_path}"
|
10
|
-
puts command
|
11
|
-
puts `#{command}`
|
12
|
-
|
13
|
-
|
14
|
-
cert_store = OpenSSL::X509::Store.new
|
15
|
-
puts "Adding certificate #{downloaded_cert_path}"
|
16
|
-
cert_store.add_file(downloaded_cert_path)
|
17
|
-
|
18
|
-
req = Net::HTTP::Get.new(uri)
|
19
|
-
|
20
|
-
options = {
|
21
|
-
:use_ssl => uri.scheme == 'https',
|
22
|
-
verify_mode: OpenSSL::SSL::VERIFY_PEER,
|
23
|
-
cert_store: cert_store
|
24
|
-
}
|
25
|
-
|
26
|
-
response = Net::HTTP.start(uri.hostname, uri.port, options) do |http|
|
27
|
-
http.request req
|
28
|
-
end
|
29
|
-
|
30
|
-
puts response
|