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 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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
- suhH+JivZxTrJDKZoAqMPgiOtxnzJX2LsZiT0cdH9zsefmYttkmMHUydCdhiGuFS
6
- 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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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
- T4RgxDZOC/kMe29BNRLMykRKeD+JpIgFfydDAx1ykdyUcOWhAUmaS5cSeHH25Sng
15
- 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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