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