Sha256: cc898649aca40ca33377ce4b23a00d4bb7c885b0735b666947ea7731006bc406

Contents?: true

Size: 1.25 KB

Versions: 47

Compression:

Stored size: 1.25 KB

Contents

module Rack
  module PactBroker
    class SetBaseUrl
      X_FORWARDED_PATTERN = /_X_FORWARDED_/.freeze

      def initialize app, base_urls
        @app = app
        @base_urls = base_urls
      end

      def call(env)
        if env["pactbroker.base_url"]
          app.call(env)
        else
          app.call(env.merge("pactbroker.base_url" => select_matching_base_url(env)))
        end
      end

      private

      attr_reader :app, :base_urls

      def select_matching_base_url(env)
        if base_urls.size > 1
          return matching_base_url_considering_x_forwarded_headers(env) ||
            matching_base_url_not_considering_x_forwarded_headers(env) ||
            default_base_url
        end
        default_base_url
      end

      def default_base_url
        base_urls.first
      end

      def matching_base_url_considering_x_forwarded_headers(env)
        matching_base_url(env)
      end

      def matching_base_url_not_considering_x_forwarded_headers(env)
        matching_base_url(env.reject{ |k, _| k =~ X_FORWARDED_PATTERN} )
      end

      def matching_base_url(env)
        request_base_url = Rack::Request.new(env).base_url
        if base_urls.include?(request_base_url)
          request_base_url
        end
      end
    end
  end
end

Version data entries

47 entries across 47 versions & 1 rubygems

Version Path
pact_broker-2.97.0 lib/rack/pact_broker/set_base_url.rb
pact_broker-2.96.0 lib/rack/pact_broker/set_base_url.rb
pact_broker-2.95.1 lib/rack/pact_broker/set_base_url.rb
pact_broker-2.95.0 lib/rack/pact_broker/set_base_url.rb
pact_broker-2.94.0 lib/rack/pact_broker/set_base_url.rb
pact_broker-2.93.4 lib/rack/pact_broker/set_base_url.rb
pact_broker-2.93.3 lib/rack/pact_broker/set_base_url.rb
pact_broker-2.93.2 lib/rack/pact_broker/set_base_url.rb
pact_broker-2.93.1 lib/rack/pact_broker/set_base_url.rb
pact_broker-2.93.0 lib/rack/pact_broker/set_base_url.rb
pact_broker-2.92.0 lib/rack/pact_broker/set_base_url.rb
pact_broker-2.91.0 lib/rack/pact_broker/set_base_url.rb
pact_broker-2.90.0 lib/rack/pact_broker/set_base_url.rb
pact_broker-2.89.1 lib/rack/pact_broker/set_base_url.rb
pact_broker-2.89.0 lib/rack/pact_broker/set_base_url.rb
pact_broker-2.88.0 lib/rack/pact_broker/set_base_url.rb
pact_broker-2.87.0 lib/rack/pact_broker/set_base_url.rb
pact_broker-2.86.0 lib/rack/pact_broker/set_base_url.rb
pact_broker-2.85.1 lib/rack/pact_broker/set_base_url.rb
pact_broker-2.85.0 lib/rack/pact_broker/set_base_url.rb