Sha256: fece4004d6cd67e299b648c1b4b5226700df0ba49793e6b6fd072c5e1a88ebe9
Contents?: true
Size: 1.17 KB
Versions: 74
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
74 entries across 74 versions & 1 rubygems