class PactBroker::Configuration

Attributes

api_error_reporters[RW]
content_security_policy[RW]
custom_logger[R]
database_connection[RW]
example_data_seeder[RW]
hal_browser_content_security_policy_overrides[RW]
html_pact_renderer[RW]
policy_builder[RW]
policy_finder=[RW]
policy_scope_builder[RW]
policy_scope_finder=[RW]
runtime_configuration[RW]
sha_generator[RW]
version_parser[RW]

Public Class Methods

default_configuration() click to toggle source
# File lib/pact_broker/configuration.rb, line 49
def self.default_configuration
  require "pact_broker/versions/parse_semantic_version"
  require "pact_broker/pacts/generate_sha"

  config = Configuration.new
  config.html_pact_renderer = default_html_pact_render
  config.version_parser = PactBroker::Versions::ParseSemanticVersion
  config.sha_generator = PactBroker::Pacts::GenerateSha
  config.example_data_seeder = lambda do
    # Do the require in the lambda, not at the top of the file, because we need
    # the database connection to be made before loading any Sequel::Model classes.
    require "pact_broker/db/seed_example_data"
    PactBroker::DB::SeedExampleData.call
  end

  # TODO get rid of unsafe-inline
  config.content_security_policy = {
    script_src: "'self' 'unsafe-inline'",
    style_src: "'self' 'unsafe-inline'",
    img_src: "'self' data: #{URI(config.shields_io_base_url).host}",
    font_src: "'self' data:",
    base_uri: "'self'",
    frame_src: "'self'",
    frame_ancestors: "'self'"
  }
  config.hal_browser_content_security_policy_overrides = {
    script_src: "'self' 'unsafe-inline' 'unsafe-eval'",
    frame_ancestors: "'self'"
  }
  config.policy_builder = -> (object) { DefaultPolicy.new(nil, object) }
  config.policy_scope_builder = -> (scope) { scope }
  config
end
default_html_pact_render() click to toggle source
# File lib/pact_broker/configuration.rb, line 131
def self.default_html_pact_render
  lambda { |pact, options|
    require "pact_broker/api/renderers/html_pact_renderer"
    PactBroker::Api::Renderers::HtmlPactRenderer.call pact, options
  }
end
new() click to toggle source
# File lib/pact_broker/configuration.rb, line 40
def initialize
  @runtime_configuration = PactBroker::Config::RuntimeConfiguration.new
  @before_resource_hook = ->(resource){}
  @after_resource_hook = ->(resource){}
  @authenticate_with_basic_auth = nil
  @authorize = nil
  @api_error_reporters = []
end

Public Instance Methods

add_api_error_reporter(&block) click to toggle source
# File lib/pact_broker/configuration.rb, line 190
def add_api_error_reporter &block
  if block_given?
    unless block.arity == 2
      raise ConfigurationError.new("api_error_notfifier block must accept two arguments, 'error' and 'options'")
    end
    @api_error_reporters << block
    nil
  end
end
after_resource(&block) click to toggle source
# File lib/pact_broker/configuration.rb, line 182
def after_resource &block
  if block_given?
    @after_resource_hook = block
  else
    @after_resource_hook
  end
end
authenticate(&block) click to toggle source
# File lib/pact_broker/configuration.rb, line 146
def authenticate &block
  if block_given?
    @authenticate = block
  else
    @authenticate
  end
end
authenticate_with_basic_auth(&block) click to toggle source
# File lib/pact_broker/configuration.rb, line 154
def authenticate_with_basic_auth &block
  if block_given?
    @authenticate_with_basic_auth = block
  else
    @authenticate_with_basic_auth
  end
end
authentication_configured?() click to toggle source
# File lib/pact_broker/configuration.rb, line 142
def authentication_configured?
  !!authenticate || !!authenticate_with_basic_auth
end
authorization_configured?() click to toggle source
# File lib/pact_broker/configuration.rb, line 162
def authorization_configured?
  !!authorize
end
authorize(&block) click to toggle source
# File lib/pact_broker/configuration.rb, line 166
def authorize &block
  if block_given?
    @authorize = block
  else
    @authorize
  end
end
before_resource(&block) click to toggle source
# File lib/pact_broker/configuration.rb, line 174
def before_resource &block
  if block_given?
    @before_resource_hook = block
  else
    @before_resource_hook
  end
end
enable_badge_resources=(enable_badge_resources) click to toggle source
# File lib/pact_broker/configuration.rb, line 204
def enable_badge_resources= enable_badge_resources
  puts "Pact Broker configuration property `enable_badge_resources` is deprecated. Please use `enable_public_badge_access`"
  self.enable_public_badge_access = enable_badge_resources
end
load_from_database!() click to toggle source
# File lib/pact_broker/configuration.rb, line 209
def load_from_database!
  # Can't require a Sequel::Model class before the connection has been set
  require "pact_broker/config/load"
  PactBroker::Config::Load.call(runtime_configuration)
end
log_configuration() click to toggle source
# File lib/pact_broker/configuration.rb, line 124
def log_configuration
  logger.info "------------------------------------------------------------------------"
  logger.info "PACT BROKER CONFIGURATION:"
  runtime_configuration.log_configuration(logger)
  logger.info "------------------------------------------------------------------------"
end
logger() click to toggle source
# File lib/pact_broker/configuration.rb, line 112
def logger
  custom_logger || logger_from_runtime_configuration
end
logger=(logger) click to toggle source
# File lib/pact_broker/configuration.rb, line 116
def logger= logger
  if @default_appender && SemanticLogger.appenders.include?(@default_appender)
    SemanticLogger.remove_appender(@default_appender)
    @default_appender = nil
  end
  @custom_logger = logger
end
logger_from_runtime_configuration() click to toggle source
# File lib/pact_broker/configuration.rb, line 98
def logger_from_runtime_configuration
  @logger_from_runtime_configuration ||= begin
    SemanticLogger.default_level = runtime_configuration.log_level
    if runtime_configuration.log_stream == :file
      path = runtime_configuration.log_dir + "/pact_broker.log"
      FileUtils.mkdir_p(runtime_configuration.log_dir)
      @default_appender = SemanticLogger.add_appender(file_name: path, formatter: runtime_configuration.log_format)
    else
      @default_appender = SemanticLogger.add_appender(io: $stdout, formatter: runtime_configuration.log_format)
    end
    @logger_from_runtime_configuration = SemanticLogger["pact-broker"]
  end
end
override_runtime_configuration!(overrides) click to toggle source
# File lib/pact_broker/configuration.rb, line 83
def override_runtime_configuration!(overrides)
  new_runtime_configuration = runtime_configuration.dup
  valid_overrides, invalid_overrides = identify_valid_and_invalid_configuration_overrides(new_runtime_configuration, overrides)

  if logger.debug?
    logger.debug("Overriding runtime configuration", overrides: valid_overrides, ignoring: invalid_overrides)
  end

  valid_overrides.each do | key, value |
    override_or_merge_value(new_runtime_configuration, key, value)
  end

  self.runtime_configuration = new_runtime_configuration
end
show_backtrace_in_error_response?() click to toggle source
# File lib/pact_broker/configuration.rb, line 138
def show_backtrace_in_error_response?
  !!(ENV["RACK_ENV"] && ENV["RACK_ENV"].downcase != "production")
end
show_webhook_response?() click to toggle source
# File lib/pact_broker/configuration.rb, line 200
def show_webhook_response?
  webhook_host_whitelist&.any?
end

Private Instance Methods

identify_valid_and_invalid_configuration_overrides(new_runtime_configuration, overrides) click to toggle source
# File lib/pact_broker/configuration.rb, line 217
def identify_valid_and_invalid_configuration_overrides(new_runtime_configuration, overrides)
  valid_overrides = {}
  invalid_overrides = {}

  overrides.each do | key, value |
    if new_runtime_configuration.respond_to?("#{key}=")
      valid_overrides[key] = Anyway::AutoCast.call(value)
    else
      invalid_overrides[key] = Anyway::AutoCast.call(value)
    end
  end

  return valid_overrides, invalid_overrides
end
override_or_merge_value(new_runtime_configuration, key, value) click to toggle source
# File lib/pact_broker/configuration.rb, line 232
def override_or_merge_value(new_runtime_configuration, key, value)
  # Do a merge if original value and new value are both hashes
  if value.is_a?(Hash) && new_runtime_configuration.public_send(key).is_a?(Hash)
    new_runtime_configuration.public_send("#{key}=", new_runtime_configuration.public_send(key).merge(value))
  else
    new_runtime_configuration.public_send("#{key}=", value)
  end
end