Sha256: dca3e5c91fb99257b5a7893ace341aee899695ee2067b2a955b23ac89a9e3fa8

Contents?: true

Size: 1.82 KB

Versions: 28

Compression:

Stored size: 1.82 KB

Contents

require "rack"
require "pact_broker/hash_refinements"

module PactBroker
  module Api
    module Middleware
      class BasicAuth
        using PactBroker::HashRefinements

        def initialize(app, write_credentials, read_credentials, policy)
          @app = app
          @write_credentials = write_credentials
          @read_credentials = read_credentials
          @app_with_write_auth = build_app_with_write_auth
          @app_with_read_auth = build_app_with_read_auth
          @policy = policy
        end

        def call(env)
          if policy.public_access_allowed?(env)
            app.call(env)
          elsif policy.read_access_allowed?(env)
            app_with_read_auth.call(env)
          else
            app_with_write_auth.call(env)
          end
        end

        protected

        def write_credentials_match(*credentials)
          is_present?(write_credentials) && credentials == write_credentials
        end

        def read_credentials_match(*credentials)
          is_present?(read_credentials) && credentials == read_credentials
        end

        private

        attr_reader :app, :app_with_read_auth, :app_with_write_auth, :write_credentials, :read_credentials, :policy

        def build_app_with_write_auth
          this = self
          Rack::Auth::Basic.new(app, "Restricted area") do |username, password|
            this.write_credentials_match(username, password)
          end
        end

        def build_app_with_read_auth
          this = self
          Rack::Auth::Basic.new(app, "Restricted area") do |username, password|
            this.write_credentials_match(username, password) || this.read_credentials_match(username, password)
          end
        end

        def is_present?(credentials)
          !credentials.first.blank? && !credentials.last.blank?
        end
      end
    end
  end
end

Version data entries

28 entries across 28 versions & 1 rubygems

Version Path
pact_broker-2.102.0 lib/pact_broker/api/middleware/basic_auth.rb
pact_broker-2.101.0 lib/pact_broker/api/middleware/basic_auth.rb
pact_broker-2.100.0 lib/pact_broker/api/middleware/basic_auth.rb
pact_broker-2.99.0 lib/pact_broker/api/middleware/basic_auth.rb
pact_broker-2.98.0 lib/pact_broker/api/middleware/basic_auth.rb
pact_broker-2.97.0 lib/pact_broker/api/middleware/basic_auth.rb
pact_broker-2.96.0 lib/pact_broker/api/middleware/basic_auth.rb
pact_broker-2.95.1 lib/pact_broker/api/middleware/basic_auth.rb
pact_broker-2.95.0 lib/pact_broker/api/middleware/basic_auth.rb
pact_broker-2.94.0 lib/pact_broker/api/middleware/basic_auth.rb
pact_broker-2.93.4 lib/pact_broker/api/middleware/basic_auth.rb
pact_broker-2.93.3 lib/pact_broker/api/middleware/basic_auth.rb
pact_broker-2.93.2 lib/pact_broker/api/middleware/basic_auth.rb
pact_broker-2.93.1 lib/pact_broker/api/middleware/basic_auth.rb
pact_broker-2.93.0 lib/pact_broker/api/middleware/basic_auth.rb
pact_broker-2.92.0 lib/pact_broker/api/middleware/basic_auth.rb
pact_broker-2.91.0 lib/pact_broker/api/middleware/basic_auth.rb
pact_broker-2.90.0 lib/pact_broker/api/middleware/basic_auth.rb
pact_broker-2.89.1 lib/pact_broker/api/middleware/basic_auth.rb
pact_broker-2.89.0 lib/pact_broker/api/middleware/basic_auth.rb