Module: Rack::Cloudflare::IPs
- Defined in:
- lib/rack/cloudflare/ips.rb
Constant Summary collapse
- V4_URL =
See: www.cloudflare.com/ips/
'https://www.cloudflare.com/ips-v4'
- V6_URL =
'https://www.cloudflare.com/ips-v6'
- V4 =
read("#{__dir__}/../../../data/ips_v4.txt")
- V6 =
read("#{__dir__}/../../../data/ips_v6.txt")
- PRIVATE =
parse('10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16')
- DEFAULTS =
V4 + V6
Class Attribute Summary collapse
-
.list ⇒ Object
List of IPs to reference.
Class Method Summary collapse
- .fetch(url) ⇒ Object
- .parse(string) ⇒ Object
- .private?(ip) ⇒ Boolean
- .read(filename) ⇒ Object
-
.update! ⇒ Object
Update list of IPs in-memory in case local copy is outdated.
Class Attribute Details
.list ⇒ Object
List of IPs to reference
15 16 17 |
# File 'lib/rack/cloudflare/ips.rb', line 15 def list @list end |
Class Method Details
.fetch(url) ⇒ Object
26 27 28 29 30 31 32 |
# File 'lib/rack/cloudflare/ips.rb', line 26 def fetch(url) Cloudflare.info "[#{name}] Updating Cloudflare IP list: #{url.inspect}" parse URI(url).read rescue OpenURI::HTTPError => ex Cloudflare.error "[#{name}] #{ex.class.name} fetching #{url.inspect}: #{ex.}" [] end |
.parse(string) ⇒ Object
38 39 40 41 42 |
# File 'lib/rack/cloudflare/ips.rb', line 38 def parse(string) return [] if string.to_s.strip.empty? string.strip.split(/[,\s]+/).map { |ip| ::IPAddr.new(ip.strip) } end |
.private?(ip) ⇒ Boolean
17 18 19 |
# File 'lib/rack/cloudflare/ips.rb', line 17 def private?(ip) PRIVATE.any? { |range| range.include? ip } end |
.read(filename) ⇒ Object
34 35 36 |
# File 'lib/rack/cloudflare/ips.rb', line 34 def read(filename) parse ::File.read(filename) end |