Class: Rack::Dedos::Filters::Base

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

Direct Known Subclasses

Country, UserAgent

Constant Summary collapse

DEFAULT_OPTIONS =
{
  logger: nil,
  only_paths: [],
  except_paths: [],
  status: 403,
  text: 'Forbidden (Temporarily Blocked by Rules)',
  headers: []
}.freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(app, options = {}) ⇒ Base

Returns a new instance of Base.

Parameters:

  • app (#call)
  • options (Hash{Symbol => Object}) (defaults to: {})


23
24
25
26
27
# File 'lib/rack/dedos/filters/base.rb', line 23

def initialize(app, options={})
  @app = app
  @options = DEFAULT_OPTIONS.merge(options)
  @details = {}
end

Instance Attribute Details

#appObject (readonly)

Returns the value of attribute app.



19
20
21
# File 'lib/rack/dedos/filters/base.rb', line 19

def app
  @app
end

#detailsObject (readonly)

Returns the value of attribute details.



19
20
21
# File 'lib/rack/dedos/filters/base.rb', line 19

def details
  @details
end

#optionsObject (readonly)

Returns the value of attribute options.



19
20
21
# File 'lib/rack/dedos/filters/base.rb', line 19

def options
  @options
end

Instance Method Details

#call(env) ⇒ Object



29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/rack/dedos/filters/base.rb', line 29

def call(env)
  request = Rack::Request.new(env)
  ip = real_ip(request)
  if !apply?(request) || allowed?(request, ip)
    app.call(env)
  else
    message = ["request #{request.path} from #{ip} blocked by #{name}"]
    message += details_list
    message += headers_list(request)
    logger.info(message.join(' '))
    [options[:status], { 'Content-Type' => 'text/plain' }, [options[:text]]]
  end
end