Sha256: f0dce9366012e7ea162c4e2f423dedfef112f78f0e62988bf39136b068565d88

Contents?: true

Size: 1.88 KB

Versions: 1

Compression:

Stored size: 1.88 KB

Contents

require 'resolv'
module Antispam
  module Blacklists
    class Httpbl
      def self.check(ip, key, verbose)
        threat = 0
        begin
          old_result = get_old_result(ip)
          if old_result
            Rails.logger.info "Returning old result for #{ip}." if verbose
            return get_old_result(ip)
          end
          check = ip.split('.').reverse.join('.')
          host = key + '.' + check + ".dnsbl.httpbl.org"
          address = Resolv::getaddress(host)
          z,days,threat,iptype = address.split('.')
          Rails.logger.info "Spam located: #{iptype} type at #{threat} threat. (#{ip} - #{address})" if verbose
          # Create or update
          if (threat.to_i > 30)
            Rails.logger.info "Spamcheck: Very high, over 30!"
          end
        rescue Exception => e
          case e
          when Resolv::ResolvError #Not spam! This blacklist gives an error when there's no spam threat.
            Rails.logger.info "Spamcheck: OK! Resolve error means the httpbl does not consider this spam."
          when Interrupt #Something broke while trying to check blacklist.
            Rails.logger.info "Spamcheck: Interrupt when trying to resolve http blacklist. Possible timeout?"
          else # Time Out
            Rails.logger.info "Spamcheck: There was an error, possibly a time out, when checking this IP."
            Rails.logger.info e.to_s
          end
        end
        update_old_result(ip, threat)
        return threat
      end
      def self.get_old_result(ip)
        result = Antispam::Ip.find_by(address: ip, provider: 'httpbl')
        return nil if (result.nil? || result.expired?)
        return result.threat
      end
      def self.update_old_result(ip, threat)
        result = Antispam::Ip.find_or_create_by(address: ip, provider: 'httpbl')
        result.update(threat: threat, expires_at: 24.hours.from_now)
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
antispam-0.1.5 lib/antispam/blacklists/httpbl.rb