pact_broker 2.93.0 → 2.93.4

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.
Files changed (47) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +37 -0
  3. data/db/migrations/migration_helper.rb +1 -1
  4. data/lib/db.rb +1 -1
  5. data/lib/pact_broker/api/decorators/format_date_time.rb +9 -1
  6. data/lib/pact_broker/badges/service.rb +1 -1
  7. data/lib/pact_broker/build_http_options.rb +4 -12
  8. data/lib/pact_broker/certificates/service.rb +3 -3
  9. data/lib/pact_broker/config/runtime_configuration_database_methods.rb +1 -1
  10. data/lib/pact_broker/domain/webhook.rb +1 -1
  11. data/lib/pact_broker/domain/webhook_request.rb +2 -2
  12. data/lib/pact_broker/metrics/service.rb +1 -1
  13. data/lib/pact_broker/pacts/pact_publication_dataset_module.rb +7 -5
  14. data/lib/pact_broker/pacts/selector.rb +4 -4
  15. data/lib/pact_broker/pacts/service.rb +3 -3
  16. data/lib/pact_broker/pacts/sort_content.rb +1 -1
  17. data/lib/pact_broker/repositories/helpers.rb +1 -1
  18. data/lib/pact_broker/ui/controllers/matrix.rb +1 -1
  19. data/lib/pact_broker/version.rb +1 -1
  20. data/lib/pact_broker/webhooks/execution_configuration.rb +8 -0
  21. data/lib/pact_broker/webhooks/execution_configuration_creator.rb +5 -0
  22. data/lib/pact_broker/webhooks/webhook_request_template.rb +4 -2
  23. data/lib/sequel/plugins/upsert.rb +1 -1
  24. data/vendor/hal-browser/browser.html +107 -87
  25. data/vendor/hal-browser/js/hal/http/client.js +1 -1
  26. data/vendor/hal-browser/js/hal/views/browser.js +1 -1
  27. data/vendor/hal-browser/js/hal/views/embedded_resource.js +2 -2
  28. data/vendor/hal-browser/js/hal/views/explorer.js +1 -1
  29. data/vendor/hal-browser/js/hal/views/inspector.js +1 -1
  30. data/vendor/hal-browser/login.html +8 -9
  31. data/vendor/hal-browser/styles.css +6 -9
  32. data/vendor/hal-browser/vendor/bootstrap-icons-1.7.2/bootstrap-icons.css +1556 -0
  33. data/vendor/hal-browser/vendor/bootstrap-icons-1.7.2/bootstrap-icons.json +1537 -0
  34. data/vendor/hal-browser/vendor/bootstrap-icons-1.7.2/bootstrap-icons.scss +3097 -0
  35. data/vendor/hal-browser/vendor/bootstrap-icons-1.7.2/file-text-fill.svg +3 -0
  36. data/vendor/hal-browser/vendor/bootstrap-icons-1.7.2/fonts/bootstrap-icons.woff +0 -0
  37. data/vendor/hal-browser/vendor/bootstrap-icons-1.7.2/fonts/bootstrap-icons.woff2 +0 -0
  38. data/vendor/hal-browser/vendor/css/bootstrap.css +8530 -4374
  39. data/vendor/hal-browser/vendor/js/URI.min.js +92 -83
  40. data/vendor/hal-browser/vendor/js/bootstrap.js +3825 -1745
  41. data/vendor/hal-browser/vendor/js/jquery-3.6.0.min.js +2 -0
  42. data/vendor/hal-browser/vendor/js/underscore.js +6 -1227
  43. metadata +13 -10
  44. data/vendor/hal-browser/vendor/css/bootstrap-responsive.css +0 -1109
  45. data/vendor/hal-browser/vendor/js/jquery-1.10.2.js +0 -9789
  46. data/vendor/hal-browser/vendor/js/jquery-1.10.2.min.js +0 -6
  47. data/vendor/hal-browser/vendor/js/jquery-1.10.2.min.map +0 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c3be3c5c9c91694873befa3ac15ff196bbcf49b75f250fc22485079ee1630699
4
- data.tar.gz: 00aa9e23a79856cf4db4353191d1fd33ae3acf93a991f0074949ad1ccaefc4d3
3
+ metadata.gz: dd8313de32ee72fbd7202e9279130983eeccf2d5bc9c6ae589a5ed9700854cbd
4
+ data.tar.gz: 8f7d311c9cbec69ca70f4a2420409e6c4747fcb0d1ae0f9af4d04baaf10aa43a
5
5
  SHA512:
6
- metadata.gz: 568d1158ee7c4bf41731e26f849f30b5831ccf8d141399a549deabf679a32a1b7f0766bbe385fb604453b69476deff7788afdc5f276902fa09f065fcdb1e459f
7
- data.tar.gz: da3b98bed787330c0730b2cf5e270dbee54fcea4106b0866f2fff0b9a7c6b00e31a57a8f2264ac057e24f706a9a96591890b052979fa73f362a15f4ad6e8d5c9
6
+ metadata.gz: baaf854e49a5d623279b2481933fb9e033289efba9b4d9350703d9dc9737dac367b6076938f8f309426480f0745d9fe181c8f7f296f8727e17584de498ea631e
7
+ data.tar.gz: ea459192ee83bce3c4fe1c307ad8f2ab3c0ed2734f40162cef0ae95033b81d0e3e7bc12d2765af52ae4a06a95ddfed8dfdca7b0c421e923aaa2ba4a172552bcf
data/CHANGELOG.md CHANGED
@@ -1,3 +1,40 @@
1
+ <a name="v2.93.4"></a>
2
+ ### v2.93.4 (2022-02-21)
3
+
4
+ #### Bug Fixes
5
+
6
+ * **matrix page**
7
+ * set correct base URL for links when a path is specified in the base URL ([8305456b](/../../commit/8305456b))
8
+
9
+ * handle DateTimes that come back from Sqlite as Strings ([1312a049](/../../commit/1312a049))
10
+
11
+ <a name="v2.93.3"></a>
12
+ ### v2.93.3 (2022-02-02)
13
+
14
+ #### Bug Fixes
15
+
16
+ * ensure webhook_certificates setting is honoured in webhook ([7933a526](/../../commit/7933a526))
17
+ * ensure disable_ssl_verification setting is honoured in webhook ([08bc758c](/../../commit/08bc758c))
18
+ * ensure webhook_certificates setting is honoured in webhook ([8a720cdb](/../../commit/8a720cdb))
19
+ * ensure disable_ssl_verification setting is honoured in webhook ([0728b3d7](/../../commit/0728b3d7))
20
+
21
+ * **hal-browser**
22
+ * fixing vulnerability by upgrading HAL browser dependencies ([a6b06f66](/../../commit/a6b06f66))
23
+
24
+ <a name="v2.93.2"></a>
25
+ ### v2.93.2 (2021-12-23)
26
+
27
+ #### Bug Fixes
28
+
29
+ * Improve SortContent performance on large contracts (#538) ([1914c01f](/../../commit/1914c01f))
30
+
31
+ <a name="v2.93.1"></a>
32
+ ### v2.93.1 (2021-12-21)
33
+
34
+ #### Bug Fixes
35
+
36
+ * optimise query for calculating the latest overall pacts ([f44aaa70](/../../commit/f44aaa70))
37
+
1
38
  <a name="v2.93.0"></a>
2
39
  ### v2.93.0 (2021-12-07)
3
40
 
@@ -23,7 +23,7 @@ module PactBroker
23
23
  end
24
24
 
25
25
  def postgres?
26
- adapter == "postgres"
26
+ adapter =~ /postgres/
27
27
  end
28
28
 
29
29
  def adapter
data/lib/db.rb CHANGED
@@ -71,7 +71,7 @@ module DB
71
71
  end
72
72
 
73
73
  def self.postgres?
74
- !!(PACT_BROKER_DB.adapter_scheme.to_s == "postgres")
74
+ !!(PACT_BROKER_DB.adapter_scheme.to_s =~ /postgres/)
75
75
  end
76
76
 
77
77
  PACT_BROKER_DB ||= connection_for_env ENV.fetch("RACK_ENV")
@@ -2,8 +2,16 @@ module PactBroker
2
2
  module Api
3
3
  module Decorators
4
4
  module FormatDateTime
5
+ # Keep this in sync with Sequel.datetime_class.
6
+ # Needs to be upgraded from DateTime to Time as Time is deprecated
7
+ DATE_TIME_CLASS = DateTime
8
+
5
9
  def self.call(date_time)
6
- date_time.to_time.utc.to_datetime.xmlschema if date_time
10
+ if date_time.is_a?(String)
11
+ DATE_TIME_CLASS.strptime(date_time).to_time.utc.to_datetime.xmlschema
12
+ elsif date_time
13
+ date_time.to_time.utc.to_datetime.xmlschema if date_time
14
+ end
7
15
  end
8
16
 
9
17
  def format_date_time(date_time)
@@ -132,7 +132,7 @@ module PactBroker
132
132
  with_cache uri do
133
133
  request = Net::HTTP::Get.new(uri)
134
134
  options = {read_timeout: 3, open_timeout: 1, ssl_timeout: 1, continue_timeout: 1}
135
- options.merge! PactBroker::BuildHttpOptions.call(uri)
135
+ options.merge! PactBroker::BuildHttpOptions.call(uri, disable_ssl_verification: PactBroker.configuration.disable_ssl_verification)
136
136
 
137
137
  Net::HTTP.start(uri.hostname, uri.port, :ENV, options) do |http|
138
138
  http.request request
@@ -4,14 +4,14 @@ module PactBroker
4
4
  class BuildHttpOptions
5
5
  extend PactBroker::Services
6
6
 
7
- def self.call uri
7
+ def self.call uri, disable_ssl_verification: false, cert_store: nil
8
8
  uri = URI(uri)
9
9
  options = {}
10
-
10
+
11
11
  if uri.scheme == "https"
12
12
  options[:use_ssl] = true
13
- options[:cert_store] = cert_store
14
- if disable_ssl_verification?
13
+ options[:cert_store] = cert_store if cert_store
14
+ if disable_ssl_verification
15
15
  options[:verify_mode] = OpenSSL::SSL::VERIFY_NONE
16
16
  else
17
17
  options[:verify_mode] = OpenSSL::SSL::VERIFY_PEER
@@ -19,14 +19,6 @@ module PactBroker
19
19
  end
20
20
  options
21
21
  end
22
-
23
- def self.disable_ssl_verification?
24
- PactBroker.configuration.disable_ssl_verification
25
- end
26
-
27
- def self.cert_store
28
- certificate_service.cert_store
29
- end
30
22
  end
31
23
  end
32
24
 
@@ -15,7 +15,7 @@ module PactBroker
15
15
  cert_store.set_default_paths
16
16
  find_all_certificates.each do | certificate |
17
17
  begin
18
- logger.debug("Loading certificate #{certificate.subject} in to cert store")
18
+ logger.debug("Loading certificate for subject #{certificate.subject} and issuer #{certificate.issuer} in to cert store")
19
19
  cert_store.add_cert(certificate)
20
20
  rescue StandardError => e
21
21
  logger.warn("Error adding certificate object #{certificate} to store", e)
@@ -42,7 +42,7 @@ module PactBroker
42
42
  end
43
43
 
44
44
  def certificates_from_config
45
- PactBroker.configuration.webhook_certificates.select{| c| c[:content] || c[:path] }.collect do | certificate_config, i |
45
+ PactBroker.configuration.webhook_certificates.select{| c| c[:content] || c[:path] }.collect.with_index do | certificate_config, i |
46
46
  load_certificate_config(certificate_config, i)
47
47
  end.flatten.compact
48
48
  end
@@ -54,7 +54,7 @@ module PactBroker
54
54
  begin
55
55
  OpenSSL::X509::Certificate.new(c)
56
56
  rescue StandardError => e
57
- logger.warn("Error creating certificate object from webhook_certificate at index #{i} with description #{certificate_config[:description]}", e)
57
+ logger.warn("Error creating certificate object from webhook_certificates at index #{i} with description #{certificate_config[:description]}", e)
58
58
  nil
59
59
  end
60
60
  end
@@ -72,7 +72,7 @@ module PactBroker
72
72
  end
73
73
 
74
74
  def postgres?
75
- database_credentials[:adapter] == "postgres"
75
+ database_credentials[:adapter] =~ /postgres/
76
76
  end
77
77
  private :postgres?
78
78
 
@@ -50,7 +50,7 @@ module PactBroker
50
50
  def execute pact, verification, event_context, options
51
51
  logger.info "Executing #{self} event_context=#{event_context}"
52
52
  template_params = template_parameters(pact, verification, event_context, options)
53
- webhook_request = request.build(template_params, options.fetch(:user_agent))
53
+ webhook_request = request.build(template_params, options.slice(:user_agent, :disable_ssl_verification, :cert_store))
54
54
  http_response, error = execute_request(webhook_request)
55
55
  success = success?(http_response, options)
56
56
  http_request = webhook_request.http_request
@@ -18,7 +18,7 @@ module PactBroker
18
18
 
19
19
  HEADERS_TO_REDACT = [/authorization/i, /token/i]
20
20
 
21
- attr_accessor :method, :url, :headers, :body, :username, :password, :uuid, :user_agent
21
+ attr_accessor :method, :url, :headers, :body, :username, :password, :uuid, :user_agent, :disable_ssl_verification, :cert_store
22
22
 
23
23
  # Reform gets confused by the :method method, as :method is a standard
24
24
  # Ruby method.
@@ -47,7 +47,7 @@ module PactBroker
47
47
  end
48
48
 
49
49
  def execute
50
- options = PactBroker::BuildHttpOptions.call(uri).merge(read_timeout: 15, open_timeout: 15)
50
+ options = PactBroker::BuildHttpOptions.call(uri, disable_ssl_verification: disable_ssl_verification, cert_store: cert_store).merge(read_timeout: 15, open_timeout: 15)
51
51
  req = http_request
52
52
  Net::HTTP.start(uri.hostname, uri.port, :ENV, options) do |http|
53
53
  http.request req
@@ -18,7 +18,7 @@ module PactBroker
18
18
  withMainBranchSetCount: PactBroker::Domain::Pacticipant.with_main_branch_set.count
19
19
  },
20
20
  integrations: {
21
- count: PactBroker::Integrations::Integration.count
21
+ count: PactBroker::Pacts::PactPublication.select(:consumer_id, :provider_id).distinct.count
22
22
  },
23
23
  pactPublications: {
24
24
  count: PactBroker::Pacts::PactPublication.count,
@@ -90,16 +90,18 @@ module PactBroker
90
90
  def overall_latest
91
91
  self_join = {
92
92
  Sequel[:pact_publications][:consumer_id] => Sequel[:pp2][:consumer_id],
93
- Sequel[:pact_publications][:provider_id] => Sequel[:pp2][:provider_id]
93
+ Sequel[:pact_publications][:provider_id] => Sequel[:pp2][:provider_id],
94
+ Sequel[:pact_publications][:consumer_version_order] => Sequel[:pp2][:max_consumer_version_order]
94
95
  }
95
96
 
96
97
  base_query = self
97
98
  base_query = base_query.select_all_qualified if no_columns_selected?
98
99
 
99
- base_query.left_join(base_query.select(:consumer_id, :provider_id, :consumer_version_order), self_join, { table_alias: :pp2 } ) do
100
- Sequel[:pp2][:consumer_version_order] > Sequel[:pact_publications][:consumer_version_order]
101
- end
102
- .where(Sequel[:pp2][:consumer_version_order] => nil)
100
+ base_query.join(
101
+ base_query.select_group(:consumer_id, :provider_id).select_append{ max(:consumer_version_order).as(:max_consumer_version_order) },
102
+ self_join,
103
+ table_alias: :pp2
104
+ )
103
105
  .remove_overridden_revisions_from_complete_query
104
106
  end
105
107
 
@@ -283,8 +283,6 @@ module PactBroker
283
283
 
284
284
  # rubocop: disable Metrics/CyclomaticComplexity
285
285
  def <=> other
286
- # elsif consumer || other.consumer
287
- # consumer_comparison(other)
288
286
  if overall_latest? || other.overall_latest?
289
287
  overall_latest_comparison(other)
290
288
  elsif latest_for_branch? || other.latest_for_branch?
@@ -297,6 +295,8 @@ module PactBroker
297
295
  currently_deployed_comparison(other)
298
296
  elsif currently_supported? || other.currently_supported?
299
297
  currently_supported_comparison(other)
298
+ elsif consumer || other.consumer
299
+ consumer_comparison(other)
300
300
  else
301
301
  0
302
302
  end
@@ -358,8 +358,8 @@ module PactBroker
358
358
  end
359
359
 
360
360
  def consumer_comparison(other)
361
- if consumer == other.consumer
362
- 0
361
+ if consumer && other.consumer
362
+ consumer <=> other.consumer
363
363
  else
364
364
  consumer ? -1 : 1
365
365
  end
@@ -43,7 +43,7 @@ module PactBroker
43
43
  end
44
44
 
45
45
  def delete params
46
- logger.info "Deleting pact version with params #{params}"
46
+ logger.info "Deleting pact version", payload: params
47
47
  pacts = pact_repository.find_all_revisions(params[:consumer_name], params[:consumer_version_number], params[:provider_name])
48
48
  webhook_service.delete_all_webhook_related_objects_by_pact_publication_ids(pacts.collect(&:id))
49
49
  pact_repository.delete(params)
@@ -156,7 +156,7 @@ module PactBroker
156
156
 
157
157
  # Overwriting an existing pact with the same consumer/provider/consumer version number
158
158
  def create_pact_revision params, existing_pact
159
- logger.info "Updating existing pact publication", payload: params.reject{ |k, _v| k == :json_content }
159
+ logger.info "Updating existing pact publication", payload: params.without(:json_content)
160
160
  logger.debug "Content #{params[:json_content]}"
161
161
  pact_version_sha = generate_sha(params[:json_content])
162
162
  json_content = add_interaction_ids(params[:json_content])
@@ -185,7 +185,7 @@ module PactBroker
185
185
 
186
186
  # When no publication for the given consumer/provider/consumer version number exists
187
187
  def create_pact params, version, provider
188
- logger.info "Creating new pact publication with params #{params.reject{ |k, _v| k == :json_content}}"
188
+ logger.info "Creating new pact publication", payload: params.without(:json_content)
189
189
  logger.debug "Content #{params[:json_content]}"
190
190
  pact_version_sha = generate_sha(params[:json_content])
191
191
  json_content = add_interaction_ids(params[:json_content])
@@ -34,7 +34,7 @@ module PactBroker
34
34
  # You never can tell what people will do...
35
35
  if probably_array.is_a?(Array)
36
36
  array_with_ordered_hashes = order_hash_keys(probably_array)
37
- array_with_ordered_hashes.sort{ |a, b| a.to_json <=> b.to_json }
37
+ array_with_ordered_hashes.sort_by(&:to_json)
38
38
  else
39
39
  probably_array
40
40
  end
@@ -36,7 +36,7 @@ module PactBroker
36
36
  end
37
37
 
38
38
  def postgres?
39
- Sequel::Model.db.adapter_scheme.to_s == "postgres"
39
+ Sequel::Model.db.adapter_scheme.to_s =~ /postgres/
40
40
  end
41
41
 
42
42
  def select_all_qualified
@@ -32,7 +32,7 @@ module PactBroker
32
32
  errors = matrix_service.validate_selectors(selectors, options)
33
33
  if errors.empty?
34
34
  lines = matrix_service.find(selectors, options)
35
- locals[:lines] = PactBroker::UI::ViewDomain::MatrixLines.new(lines)
35
+ locals[:lines] = PactBroker::UI::ViewDomain::MatrixLines.new(lines, base_url: base_url)
36
36
  locals[:badge_url] = matrix_badge_url(selectors, lines, base_url)
37
37
  else
38
38
  locals[:errors] = errors
@@ -1,3 +1,3 @@
1
1
  module PactBroker
2
- VERSION = "2.93.0"
2
+ VERSION = "2.93.4"
3
3
  end
@@ -41,6 +41,14 @@ module PactBroker
41
41
  with_updated_attribute(user_agent: value)
42
42
  end
43
43
 
44
+ def with_disable_ssl_verification(value)
45
+ with_updated_attribute(disable_ssl_verification: value)
46
+ end
47
+
48
+ def with_cert_store(value)
49
+ with_updated_attribute(cert_store: value)
50
+ end
51
+
44
52
  def webhook_context
45
53
  self[:webhook_context]
46
54
  end
@@ -1,15 +1,20 @@
1
1
  require "pact_broker/configuration"
2
+ require "pact_broker/services"
2
3
  require "pact_broker/webhooks/execution_configuration"
3
4
 
4
5
  module PactBroker
5
6
  module Webhooks
6
7
  class ExecutionConfigurationCreator
8
+ extend PactBroker::Services
9
+
7
10
  def self.call(resource)
8
11
  PactBroker::Webhooks::ExecutionConfiguration.new
9
12
  .with_show_response(PactBroker.configuration.show_webhook_response?)
10
13
  .with_retry_schedule(PactBroker.configuration.webhook_retry_schedule)
11
14
  .with_http_success_codes(PactBroker.configuration.webhook_http_code_success)
12
15
  .with_user_agent(PactBroker.configuration.user_agent)
16
+ .with_disable_ssl_verification(PactBroker.configuration.disable_ssl_verification)
17
+ .with_cert_store(certificate_service.cert_store)
13
18
  .with_webhook_context(base_url: resource.base_url)
14
19
  end
15
20
  end
@@ -27,7 +27,7 @@ module PactBroker
27
27
  @headers = Rack::Utils::HeaderHash.new(attributes[:headers] || {})
28
28
  end
29
29
 
30
- def build(template_params, user_agent)
30
+ def build(template_params, user_agent: nil, disable_ssl_verification: false, cert_store: nil)
31
31
  attributes = {
32
32
  method: http_method,
33
33
  url: build_url(template_params),
@@ -36,7 +36,9 @@ module PactBroker
36
36
  password: build_string(password, template_params),
37
37
  uuid: uuid,
38
38
  body: build_body(template_params),
39
- user_agent: user_agent
39
+ user_agent: user_agent,
40
+ disable_ssl_verification: disable_ssl_verification,
41
+ cert_store: cert_store
40
42
  }
41
43
  PactBroker::Domain::WebhookRequest.new(attributes)
42
44
  end
@@ -101,7 +101,7 @@ module Sequel
101
101
  end
102
102
 
103
103
  def postgres?
104
- model.db.adapter_scheme.to_s == "postgres"
104
+ model.db.adapter_scheme.to_s =~ /postgres/
105
105
  end
106
106
 
107
107
  def values_to_update