Class: Rack::Dedos::Filters::Spamhaus

Inherits:
Base
  • Object
show all
Defined in:
lib/rack/dedos/filters/spamhaus.rb

Constant Summary collapse

QUERY_DOMAIN =
'zen.spamhaus.org'.freeze

Constants inherited from Base

Base::DEFAULT_OPTIONS

Instance Attribute Summary

Attributes inherited from Base

#app, #cache, #details, #logger, #options

Instance Method Summary collapse

Methods inherited from Base

#call

Constructor Details

#initializeSpamhaus

Returns a new instance of Spamhaus.



16
17
18
19
20
21
# File 'lib/rack/dedos/filters/spamhaus.rb', line 16

def initialize(...)
  super
  @resolver = ConnectionPool.new(size: 5, timeout: 1) do
    Resolv::DNS.new.tap { _1.timeouts = [1, 2] }
  end
end

Instance Method Details

#allowed?(request, ip) ⇒ Boolean

Returns:

  • (Boolean)


23
24
25
26
27
28
29
30
# File 'lib/rack/dedos/filters/spamhaus.rb', line 23

def allowed?(request, ip)
  @resolver.with do |resolver|
    resolver.getresources(domain_for(ip), Resolv::DNS::Resource::IN::A).empty?
  end
rescue => error
  logger.error("request from #{ip} allowed due to error: #{error.message}")
  true
end

#nameObject



12
13
14
# File 'lib/rack/dedos/filters/spamhaus.rb', line 12

def name
  :spamhaus
end