class Poke::Checks::Blacklist::SpamhausBlacklistCheck

Public Class Methods

new(ip) click to toggle source
Calls superclass method
# File lib/poke/checks/blacklist/spamhaus_blacklist_check.rb, line 17
def initialize(ip)
  name = "Blacklist of #{ip} (Spamhaus)"
  @ip = ip
  super name
end

Public Instance Methods

run() click to toggle source

Run the check

# File lib/poke/checks/blacklist/spamhaus_blacklist_check.rb, line 24
def run
  html = URI.parse("http://www.spamhaus.org/query/ip/#{@ip}").read
  doc = Nokogiri::HTML(html)
  nodes = doc.search("//span[@class='body']//b/font")

  spamhaus_nodes = {
      0 => "SBL",
      1 => "PBL",
      2 => "XBL"
  }

  global_returncode = :ok
  global_message = ""

  spamhaus_nodes.each do |index, spamtype|
    returncode, message = test_node(nodes, index)
    global_returncode = :error if returncode == :error

    global_message += "[#{spamtype}] #{message} | "
  end

  # Find a better way to do this...
  global_message = global_message.chop.chop

  return global_returncode, global_message
end

Private Instance Methods

test_node(nodes, index) click to toggle source

Test a node

@param [Array] HTML nodes @param [Integer] Node index

# File lib/poke/checks/blacklist/spamhaus_blacklist_check.rb, line 57
def test_node(nodes, index)
  message = nodes.at(index).inner_text

  return :ok, message if message =~ /not listed/
  return :error, message
end