Class: Aikido::Zen::Middleware::IPListChecker

Inherits:
Object
  • Object
show all
Defined in:
lib/aikido/zen/middleware/ip_list_checker.rb

Instance Method Summary collapse

Constructor Details

#initialize(app, zen: Aikido::Zen, config: zen.config, settings: zen.runtime_settings) ⇒ IPListChecker

Returns a new instance of IPListChecker.



6
7
8
9
10
11
# File 'lib/aikido/zen/middleware/ip_list_checker.rb', line 6

def initialize(app, zen: Aikido::Zen, config: zen.config, settings: zen.runtime_settings)
  @app = app
  @zen = zen
  @config = config
  @settings = settings
end

Instance Method Details

#bypassed_ip?(client_ip) ⇒ Boolean

Returns:

  • (Boolean)


42
43
44
# File 'lib/aikido/zen/middleware/ip_list_checker.rb', line 42

def bypassed_ip?(client_ip)
  @settings.bypassed_ips.include?(client_ip)
end

#call(env) ⇒ Object



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
38
39
40
# File 'lib/aikido/zen/middleware/ip_list_checker.rb', line 13

def call(env)
  request = Aikido::Zen::Middleware.request_from(env)

  client_ip = request.client_ip

  return @app.call(env) if bypassed_ip?(client_ip)

  if !@settings.allowed_ip?(client_ip)
    return @config.blocked_responder.call(request, :ip_allowed_list)
  end

  monitored_ip_list_keys = @settings.monitored_ip_list_keys(client_ip)
  @zen.track_ip_list(monitored_ip_list_keys)

  blocked_ip_lists = @settings.blocked_ip_lists.filter { |ip_list| ip_list.include?(client_ip) }

  if !blocked_ip_lists.empty?
    @zen.track_ip_list(blocked_ip_lists.map(&:key))

    return @config.blocked_responder.call(
      request,
      :ip_blocked_list,
      blocked_ip_lists.first.description
    )
  end

  @app.call(env)
end