Class: Aikido::Zen::RuntimeSettings::IPList

Inherits:
Object
  • Object
show all
Defined in:
lib/aikido/zen/runtime_settings/ip_list.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(key:, source:, description:, ips:) ⇒ IPList

Returns a new instance of IPList.



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/aikido/zen/runtime_settings/ip_list.rb', line 22

def initialize(key:, source:, description:, ips:)
  @key = key
  @source = source
  @description = description
  @ips = ips

  @ipv4_ranges = []
  @ipv6_ranges = []

  ips.each do |ip|
    if ip.ipv4?
      @ipv4_ranges << ip.to_range
    elsif ip.ipv6?
      @ipv6_ranges << ip.to_range
    else
      raise ArgumentError, "Unsupported IP address family: #{ip.inspect}"
    end
  end

  @ipv4_ranges.sort_by!(&:begin)
  @ipv6_ranges.sort_by!(&:begin)
end

Instance Attribute Details

#descriptionObject (readonly)

Returns the value of attribute description.



7
8
9
# File 'lib/aikido/zen/runtime_settings/ip_list.rb', line 7

def description
  @description
end

#ipsObject (readonly)

Returns the value of attribute ips.



8
9
10
# File 'lib/aikido/zen/runtime_settings/ip_list.rb', line 8

def ips
  @ips
end

#ipv4_rangesObject (readonly)

Returns the value of attribute ipv4_ranges.



10
11
12
# File 'lib/aikido/zen/runtime_settings/ip_list.rb', line 10

def ipv4_ranges
  @ipv4_ranges
end

#ipv6_rangesObject (readonly)

Returns the value of attribute ipv6_ranges.



11
12
13
# File 'lib/aikido/zen/runtime_settings/ip_list.rb', line 11

def ipv6_ranges
  @ipv6_ranges
end

#keyObject (readonly)

Returns the value of attribute key.



5
6
7
# File 'lib/aikido/zen/runtime_settings/ip_list.rb', line 5

def key
  @key
end

#sourceObject (readonly)

Returns the value of attribute source.



6
7
8
# File 'lib/aikido/zen/runtime_settings/ip_list.rb', line 6

def source
  @source
end

Class Method Details

.from_json(data) ⇒ Object



13
14
15
16
17
18
19
20
# File 'lib/aikido/zen/runtime_settings/ip_list.rb', line 13

def self.from_json(data)
  new(
    key: data["key"],
    source: data["source"],
    description: data["description"],
    ips: Array(data["ips"]).map { |ip| IPAddr.new(ip) }
  )
end

Instance Method Details

#include?(ip) ⇒ Boolean

Returns:

  • (Boolean)


49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/aikido/zen/runtime_settings/ip_list.rb', line 49

def include?(ip)
  native_ip = nativize_ip(ip)
  return false if native_ip.nil?

  if native_ip.ipv4?
    ranges_cover?(@ipv4_ranges, native_ip)
  elsif native_ip.ipv6?
    ranges_cover?(@ipv6_ranges, native_ip)
  else
    raise ArgumentError, "Unsupported IP address family: #{ip.inspect}"
  end
end

#inspectObject



45
46
47
# File 'lib/aikido/zen/runtime_settings/ip_list.rb', line 45

def inspect
  "#<#{self.class} #{@key}>"
end