accepts?(env)
click to toggle source
def accepts?(env)
raise NotImplementedError, "#{self.class} implementation pending"
end
call(env)
click to toggle source
def call(env)
unless accepts? env
warn env, "attack prevented by #{self.class}"
result = react env
end
result or app.call(env)
end
default_options()
click to toggle source
def default_options
DEFAULT_OPTIONS
end
deny(env)
click to toggle source
def deny(env)
[options[:status], {'Content-Type' => 'text/plain'}, [options[:message]]]
end
drop_session(env)
click to toggle source
def drop_session(env)
session(env).clear if session? env
end
encrypt(value)
click to toggle source
def encrypt(value)
options[:encryptor].hexdigest value.to_s
end
random_string(secure = defined? SecureRandom)
click to toggle source
def random_string(secure = defined? SecureRandom)
secure ? SecureRandom.hex(32) : "%032x" % rand(2**128-1)
rescue NotImplementedError
random_string false
end
react(env)
click to toggle source
def react(env)
result = send(options[:reaction], env)
result if Array === result and result.size == 3
end
referrer(env)
click to toggle source
def referrer(env)
ref = env['HTTP_REFERER'].to_s
return if !options[:allow_empty_referrer] and ref.empty?
URI.parse(ref).host || Request.new(env).host
end
safe?(env)
click to toggle source
def safe?(env)
%w[GET HEAD OPTIONS TRACE].include? env['REQUEST_METHOD']
end
session(env)
click to toggle source
def session(env)
return env[options[:session_key]] if session? env
fail "you need to set up a session middleware *before* #{self.class}"
end
session?(env)
click to toggle source
def session?(env)
env.include? options[:session_key]
end
warn(env, message)
click to toggle source
def warn(env, message)
return unless options[:logging]
l = options[:logger] || env['rack.logger'] || ::Logger.new(env['rack.errors'])
l.warn(message)
end