Sha256: a1054e4d104263ad117c4b0989a5a36e6b6c90060aa8b102e1093f0578eec764

Contents?: true

Size: 1.17 KB

Versions: 44

Compression:

Stored size: 1.17 KB

Contents

require "openssl"

module PactBroker
  module Webhooks
    class CheckHostWhitelist

      def self.call(host, whitelist = PactBroker.configuration.webhook_host_whitelist)
        whitelist.select{ | whitelist_host | match?(host, whitelist_host) }
      end

      def self.match?(host, whitelist_host)
        if parse_ip_address(host)
          ip_address_matches_range(host, whitelist_host)
        elsif whitelist_host.is_a?(Regexp)
          host_matches_regexp(host, whitelist_host)
        elsif whitelist_host.start_with?("*")
          OpenSSL::SSL.verify_hostname(host, whitelist_host)
        else
          host == whitelist_host
        end
      end

      def self.parse_ip_address(addr)
        IPAddr.new(addr)
      rescue IPAddr::Error
        nil
      end

      def self.ip_address_matches_range(host, maybe_whitelist_range)
        parse_ip_address(maybe_whitelist_range) === parse_ip_address(host)
      end

      def self.host_matches_regexp(host, whitelist_regexp)
        host =~ whitelist_regexp
      end

      def self.host_matches_domain_with_wildcard(host, whitelist_domain)
        OpenSSL::SSL.verify_hostname(host, whitelist_domain)
      end
    end
  end
end

Version data entries

44 entries across 44 versions & 1 rubygems

Version Path
pact_broker-2.83.0 lib/pact_broker/webhooks/check_host_whitelist.rb
pact_broker-2.82.0 lib/pact_broker/webhooks/check_host_whitelist.rb
pact_broker-2.81.0 lib/pact_broker/webhooks/check_host_whitelist.rb
pact_broker-2.80.0 lib/pact_broker/webhooks/check_host_whitelist.rb