pact_broker 2.19.0 → 2.19.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4a315c4d4db3576fad3d6fbb76104b211382b36d
4
- data.tar.gz: 88587d68f58299bd29b576172ce920c60bc4a2d7
3
+ metadata.gz: 6f1619d6f62ce6aaa00ca73eca6b1cdf76ee0305
4
+ data.tar.gz: c8fc20b4a52499d6bc259a4937d463c1a902567e
5
5
  SHA512:
6
- metadata.gz: d061e082b1b76232f88f8a0d5e6f21bd53a9c1f1dd84ff1694ee5066ab62468c1d36c123bcb19c0f52f9663db318d14ce0c4aef0366e2f6961cef9975b85a7fb
7
- data.tar.gz: 5db882315d0172d445f4966dece781605ceb818e7a4527710d0d5ca5721030950148bab308552c688dc51b077022935c8e66d2f0e85f96b32e4df6ed3c0fbb13
6
+ metadata.gz: 1a8ad6a1480b3a288c11e66f4473ba5af7890fe6ccab8f5ff81f69054dd0df7dc47d24ffc3e77b1888a202b5c9d73ef118794a9c8def6acce31e25590962f89c
7
+ data.tar.gz: c7270ddcf9932fc5579263dbb0149de7b1e3da15f8e69be217f4b2ddbc47182b409b0fcb0fc3b2d232922b854caae41eb47f2fc08d4ec9ae84d5773b3152751e
data/.gitignore CHANGED
@@ -29,6 +29,8 @@ _yardoc
29
29
  Gemfile.lock
30
30
 
31
31
  bethtest/
32
+ *bethtest*
33
+ *dogfood*
32
34
  bin/
33
35
  db/test/change_migration_strategy/pact_broker_database.sqlite3
34
36
  coverage
@@ -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 => 'DEPRECATED - please use the pb:pacts relation',
39
+ :title => "DEPRECATED - please use the pb:pacts relation. #{pact.name}",
39
40
  :name => pact.consumer_name
40
41
  }
41
42
  end
@@ -11,7 +11,7 @@ module PactBroker
11
11
  class Verification < BaseResource
12
12
 
13
13
  def content_types_provided
14
- [["application/json", :to_json]]
14
+ [["application/hal+json", :to_json], ["application/json", :to_json]]
15
15
  end
16
16
 
17
17
  def allowed_methods
@@ -14,6 +14,10 @@ module PactBroker
14
14
  [["application/json", :from_json]]
15
15
  end
16
16
 
17
+ def content_types_provided
18
+ [["application/hal+json", :to_json]]
19
+ end
20
+
17
21
  def allowed_methods
18
22
  ["POST"]
19
23
  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
- "current-pact-version" => {
87
+ "pact-version" => {
88
88
  "title" => "Pact",
89
89
  "name" => pact.name,
90
90
  "href" => self_url
91
91
  },
92
- "previous-distinct-pact-version" => {
92
+ "comparison-pact-version" => {
93
93
  "title" => "Pact",
94
94
  "name" => comparison_pact.name,
95
95
  "href" => previous_distinct_url
@@ -1,3 +1,3 @@
1
1
  module PactBroker
2
- VERSION = '2.19.0'
2
+ VERSION = '2.19.1'
3
3
  end
@@ -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 }
@@ -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/${provider}/consumer/${consumer}/version/1.0.0
18
+ http://127.0.0.1:9292/pacts/provider/${escaped_provider}/consumer/${escaped_consumer}/version/1.0.0
15
19
  echo ""
@@ -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
@@ -1,7 +1,9 @@
1
1
  SCHEMA="pact_broker"
2
- set -e
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
+
@@ -59,6 +59,7 @@ TestDataBuilder.new
59
59
  .create_pact
60
60
  .use_consumer("A")
61
61
  .create_consumer_version("2")
62
+ .create_consumer_version_tag("master")
62
63
  .use_provider("B")
63
64
  .create_pact
64
65
  .create_verification(provider_version: '5')
@@ -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
- IENBMCAXDTE4MDEwODAwNTkyMloYDzIxMTcxMjE1MDA1OTIyWjBCMRMwEQYKCZIm
4
+ IENBMCAXDTE4MDUxNzA3NDQzNVoYDzIxMTgwNDIzMDc0NDM1WjBCMRMwEQYKCZIm
5
5
  iZPyLGQBGRYDb3JnMRkwFwYKCZImiZPyLGQBGRYJcnVieS1sYW5nMRAwDgYDVQQD
6
- DAdSdWJ5IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv5dZFUaE
7
- +bvxnOGSNEg0DmAMnEFBK5xNV4dDQwe3qNBzvZZxcZ+Y/AefR6mPKx7MMbXFjS4j
8
- BBGgs3fatBqGAbPlBnqUJqe+Oa/HRcrnM2SW6ipisX0PG1TjvJ1fTUXv8MAfBI5t
9
- bnKyErs0Mbe+HugZAiTJSdWfbyKbxca1hBltoRYZP/NrYyMWM5n8qhzGu7K6bTGI
10
- qtlnLJ5RD/BC7ze9SkWsPkWPP1WVGsuCqHkUfCBZkY+6qbWQHLBrFmIZYo6Ixk2y
11
- Pk5Py4wRUNGkRTXDRLRyQMTX6TUKNod7J2/tXkAMLxPVbd52C0XHfnzw1DZIkE7k
12
- DR7KxnL0tyBhkQIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE
13
- AwIBBjAdBgNVHQ4EFgQUMrYg0IBY8mSqxL8TIjQM9Eiuox0wHwYDVR0jBBgwFoAU
14
- MrYg0IBY8mSqxL8TIjQM9Eiuox0wDQYJKoZIhvcNAQELBQADggEBAHQIZ/nWUrf4
15
- p34ZbWs3H7THSF4m3RlYcl+vf9ngP3peDw/SCTpuR2xlextUhJnpJFBIOoZHA+14
16
- mxoPgufFhgdXdhsUvivoB7d6jlFz+mDZPVRrYEYfPGi+JeMukbfqIXC5rake4QCI
17
- ENoo7MPVS4RWibqeN2x5sFXARKepi/GFm8jg5IqRH6Ctu4BJ/NB7wXPZn/wtNISR
18
- 7m+hgN1u0+Wk4zLuUSsbHWkZeZKrvQuU8ZSInIiLFXnN4BgJ5QGnStTFdypxDtw7
19
- Kb97JG0MWy6BGrLKaqkNtsX4xezSg4NlPZNJ4mNYZMQs3fHI2RKIwM3+klMtm8GF
20
- qygx7MqK9bI=
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
- MIIDMjCCAhqgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBCMRMwEQYKCZImiZPyLGQB
2
+ MIIDNDCCAhygAwIBAgIBAjANBgkqhkiG9w0BAQsFADBCMRMwEQYKCZImiZPyLGQB
3
3
  GRYDb3JnMRkwFwYKCZImiZPyLGQBGRYJcnVieS1sYW5nMRAwDgYDVQQDDAdSdWJ5
4
- IENBMB4XDTE4MDEwODAwNTkyM1oXDTE5MDEwODAwNTkyM1owRDETMBEGCgmSJomT
5
- 8ixkARkWA29yZzEZMBcGCgmSJomT8ixkARkWCXJ1YnktbGFuZzESMBAGA1UEAwwJ
6
- bG9jYWxob3N0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtjNCx+If
7
- GDeaI1rxw6X09IxsaGg6TenO8FXo808yC+38VMePSHzrNlfGBh4GLRX9TV4dd9k2
8
- hAWf/UpdvcucYjlKBdTGisY4ADbqlXcwJRbOk/Ag0W3al4u7WJ4EMRVZDGgif59y
9
- Pz0b1jTcJFWmD98rZoRHzStDK+Ok+Ru1Rh7IIYSVsuhH+JivZxTrJDKZoAqMPgiO
10
- txnzJX2LsZiT0cdH9zsefmYttkmMHUydCdhiGuFSNDzGXQeUlncZYAcxp6FIIZVg
11
- Xs1ZY8Xwn3RsiNpkqAQrhXLX/NX+b5LnMerul9t2OE1thTyW6iz5X7P2RmtaGN5X
12
- Ej65mg73lhc4VwIDAQABozEwLzAOBgNVHQ8BAf8EBAMCB4AwHQYDVR0OBBYEFIsz
13
- dweRZTX0WpGJkWo5dG5GjUi5MA0GCSqGSIb3DQEBCwUAA4IBAQAt0WA5eWgCxRNs
14
- yk5m1lJEEvcxb1LRBXRIZQQooAel2cq546NfVwE7XCvQBmM5eXcY4pEUFOdpcJWA
15
- Wr2US7hiWDrN4XpZUtXAK5hBJXXzHaOmiAARZvfXMi0AwJqgtc7V/o+6j1VBMhMM
16
- r3YXmn84FeSnbT5umjjuZ6qbZnSRxXU+g2Db4LqInEfdg8BOKvyPz5oyiEKIeRsK
17
- FkdWx3f2Xn4As4DAR7sszdU0r0QiaAFpFoVbqV8glCqygcqv0UAmM1N2qUrf1u6x
18
- SPI3WTZiiwH4Bb6N28gC0v80PEQEQXfb/0kJqrapKJU1hCb/PkrrQOIq7QAVb+lK
19
- 6cnn0hrz
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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
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 }
@@ -40,7 +40,7 @@ module PactBroker
40
40
  :name => "Foo" }],
41
41
  :pacts => [{
42
42
  :href => "pact_url",
43
- :title => "DEPRECATED - please use the pb:pacts relation",
43
+ :title => "DEPRECATED - please use the pb:pacts relation. Pact name",
44
44
  :name => "Foo"
45
45
  }
46
46
  ]
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.0
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-09 00:00:00.000000000 Z
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
@@ -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