Class: Antispam::Blacklists::Httpbl

Inherits:
Object
  • Object
show all
Defined in:
lib/antispam/blacklists/httpbl.rb

Class Method Summary collapse

Class Method Details

.check(ip, key, verbose) ⇒ Object

Returns a threat-level number, or 0 if no threat / no result.



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/antispam/blacklists/httpbl.rb', line 6

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
    threat = threat.to_i
    # Create or update
    if (threat > 30)
      Rails.logger.info "Spamcheck: Very high, over 30!" if verbose
    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." if verbose
    when Interrupt #Something broke while trying to check blacklist.
      Rails.logger.info "Spamcheck: Interrupt when trying to resolve http blacklist. Possible timeout?" if verbose
    else # Time Out
      Rails.logger.info "Spamcheck: There was an error, possibly a time out, when checking this IP." if verbose
      Rails.logger.info e.to_s if verbose
    end
  end
  update_old_result(ip, threat)
  return threat
end

.get_old_result(ip) ⇒ Object



38
39
40
41
42
# File 'lib/antispam/blacklists/httpbl.rb', line 38

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

.update_old_result(ip, threat) ⇒ Object



43
44
45
46
# File 'lib/antispam/blacklists/httpbl.rb', line 43

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