Sha256: 90b0af925ef8da8819431e6d61f1c1538995ce70e19150d14bb48d04084371b0
Contents?: true
Size: 1.98 KB
Versions: 1
Compression:
Stored size: 1.98 KB
Contents
require 'pact_broker/configuration' module PactBroker class Configuration class ConfigurableBasicAuth def initialize(app) @app = app @predicates = [] end def protect credentials_list, &predicate basic_auth_proxy = ::Rack::Auth::Basic.new(app) do | username, password | credentials_list.any? do | credentials | username == credentials[:username] && password == credentials[:password] end end predicates << [predicate, basic_auth_proxy] end def call(env) predicates = matching_predicates(env) if predicates.any? cascade(predicates, env) else app.call(env) end end private attr_accessor :app, :predicates def matching_predicates env predicates.select do | predicate, basic_auth_proxy | predicate.call(env) end end def cascade predicates, env response = nil predicates.each do | predicate, basic_auth_proxy | response = basic_auth_proxy.call(env) return response if response.first != 401 end response end end class ConfigureBasicAuth def self.call app, configuration new(app, configuration).call end def initialize app, configuration @configuration = configuration @basic_auth_proxy = ConfigurableBasicAuth.new(app) end def call configuration.basic_auth_predicates.each do | scope, predicate | configure_basic_auth_for_scope scope, &predicate end basic_auth_proxy end private attr_accessor :basic_auth_proxy, :configuration def configure_basic_auth_for_scope scope, &predicate if configuration.protect_with_basic_auth?(scope) credentials = configuration.basic_auth_credentials_list_for(scope) basic_auth_proxy.protect(credentials, &predicate) end end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
pact_broker-1.18.0.beta.1 | lib/pact_broker/configuration/configure_basic_auth.rb |