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
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