class Cloudeffrontery
Attributes
awsurl[RW]
azureurl[RW]
cloud[RW]
debug[RW]
region[RW]
service[RW]
Public Class Methods
new()
click to toggle source
# File lib/cloudeffrontery.rb, line 15 def initialize @awsurl = "https://ip-ranges.amazonaws.com/ip-ranges.json" @azureurl = "https://www.cloudflare.com/ips-v4" @service = 'CLOUDFRONT' @region = '.*' @cloud = 'aws' @debug = false end
Public Instance Methods
apache()
click to toggle source
# File lib/cloudeffrontery.rb, line 105 def apache return_config = [] ranges = retrieve return_config.push "# Cloudfront public IPs for #{@region} and #{@service}" ranges.each do |r| return_config.push "#{r.strip}" end return_config.join("\n") end
filter(ranges)
click to toggle source
# File lib/cloudeffrontery.rb, line 116 def filter(ranges) unless ranges.is_a?(Hash) return nil end returnranges = ranges['prefixes'].select { |r| r['region'].match(/#{@region}/) && r['service'] == @service }.map { |r| r['ip_prefix'] }.select { |r| IPAddr.new(r) rescue nil } returnranges end
nginx()
click to toggle source
# File lib/cloudeffrontery.rb, line 95 def nginx return_config = [] ranges = retrieve debug("We got #{ranges.size} ranges") ranges.each do |r| return_config.push "set_real_ip_from #{r.strip};" end return_config.join("\n") end
print()
click to toggle source
# File lib/cloudeffrontery.rb, line 24 def print $stdout.puts retrieve.inspect end
retrieve()
click to toggle source
# File lib/cloudeffrontery.rb, line 44 def retrieve method="retrieve#{@cloud}".to_sym self.send(method) end
retrieveaws()
click to toggle source
# File lib/cloudeffrontery.rb, line 73 def retrieveaws theurl = url debug("Getting some Amazon ranges using #{theurl}") begin uri = URI.parse(theurl) http = Net::HTTP.new(uri.host, uri.port) http.use_ssl = uri.scheme == 'https' ? true : false request = Net::HTTP::Get.new(uri.request_uri) thejson = http.request(request) rescue => e debug("Failed to be getting some Amazon ranges - #{e.inspect}") return nil end if thejson.kind_of? Net::HTTPSuccess return filter(JSON::parse(thejson.body)) else return nil end end
retrieveazure()
click to toggle source
# File lib/cloudeffrontery.rb, line 49 def retrieveazure theurl = url begin uri = URI.parse(theurl) http = Net::HTTP.new(uri.host, uri.port) http.use_ssl = uri.scheme == 'https' ? true : false request = Net::HTTP::Get.new(uri.request_uri) thejson = http.request(request) rescue return nil end if thejson.kind_of? Net::HTTPSuccess return thejson.body.split("\n").select { |r| IPAddr.new(r) rescue nil } else return nil end end
url()
click to toggle source
# File lib/cloudeffrontery.rb, line 28 def url if @url debug("Returning custom URL #{@url}") returnurl = @url else debug("Returning URL for #{@cloud}") returnurl = @cloud == 'aws' ? @awsurl : @azureurl end return returnurl end
url=(value)
click to toggle source
# File lib/cloudeffrontery.rb, line 39 def url=(value) debug("Setting URL to #{value}") @url = value end