class WebShield::Config

Attributes

blocked_response[RW]
logger[RW]
shields[R]
store[RW]
user_parser[RW]

Public Class Methods

new() click to toggle source
# File lib/web_shield/config.rb, line 8
def initialize
  @shields = []
  @shield_counter = 0
  @id_prefix = Time.now.to_f.to_s

  @user_parser = Proc.new {|req| req.ip }
  @blocked_response = Proc.new {|req| [429, {}, ['Too Many Requests']] }
  @logger = Logger.new($stdout)
end

Public Instance Methods

build_shield(path_matcher, options, shield_class = ThrottleShield) click to toggle source

return shield

# File lib/web_shield/config.rb, line 35
def build_shield(path_matcher, options, shield_class = ThrottleShield)
  shield_class.new(generate_id, path_matcher, options, self).tap do |shield|
    shields << shield
    logger.info("Build #{shield.shield_name} #{path_matcher} #{options}")
  end
end
store=(store) click to toggle source
# File lib/web_shield/config.rb, line 18
def store=(store)
  if store.respond_to?(:incr)
    @store = store
  else
    raise Error, 'Invalid store, interface :incr is need'
  end
end
user_parser=(parser) click to toggle source
# File lib/web_shield/config.rb, line 26
def user_parser=(parser)
  if parser.respond_to?(:call)
    @user_parser = parser
  else
    raise Error, 'Invalid parser, interface :cal is need'
  end
end

Private Instance Methods

generate_id() click to toggle source
# File lib/web_shield/config.rb, line 45
def generate_id
  "#{@id_prefix}-#{@shield_counter += 1}"
end