Class: Riptables::RulePermutation

Inherits:
Object
  • Object
show all
Defined in:
lib/riptables/rule_permutation.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(rule, description, options = {}) ⇒ RulePermutation

Returns a new instance of RulePermutation.



7
8
9
10
11
12
# File 'lib/riptables/rule_permutation.rb', line 7

def initialize(rule, description, options = {})
  @rule = rule
  @description = description
  @options = options
  @conditions = Condition.conditions.dup - @rule.conditions
end

Instance Attribute Details

#conditionsObject (readonly)

Returns the value of attribute conditions.



17
18
19
# File 'lib/riptables/rule_permutation.rb', line 17

def conditions
  @conditions
end

#descriptionObject (readonly)

Returns the value of attribute description.



15
16
17
# File 'lib/riptables/rule_permutation.rb', line 15

def description
  @description
end

#optionsObject (readonly)

Returns the value of attribute options.



16
17
18
# File 'lib/riptables/rule_permutation.rb', line 16

def options
  @options
end

#ruleObject (readonly)

Returns the value of attribute rule.



14
15
16
# File 'lib/riptables/rule_permutation.rb', line 14

def rule
  @rule
end

Instance Method Details

#has_host_group?Boolean

 Does this permutation include a host group?

Returns:

  • (Boolean)


43
44
45
# File 'lib/riptables/rule_permutation.rb', line 43

def has_host_group?
  self.options[:ip].is_a?(Symbol)
end

#has_ipv4_ip_address?Boolean

Does this permutation include an IPv6 address option?

Returns:

  • (Boolean)


29
30
31
# File 'lib/riptables/rule_permutation.rb', line 29

def has_ipv4_ip_address?
  self.options[:ip].is_a?(String) && self.options[:ip] =~ /\A\d+\.\d+\.\d+\.\d+/
end

#has_ipv6_ip_address?Boolean

Does this permutation include an IPv6 address option?

Returns:

  • (Boolean)


36
37
38
# File 'lib/riptables/rule_permutation.rb', line 36

def has_ipv6_ip_address?
  self.options[:ip].is_a?(String) && self.options[:ip].include?(':')
end

#to_rulesObject

Convert this permutation into a full rule in its own right



50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
# File 'lib/riptables/rule_permutation.rb', line 50

def to_rules
  Array.new.tap do |rules|
    new_rule = Rule.new(rule.chain)
    new_rule.description = "#{rule.description} (#{self.description})"
    new_rule.rule = rule.rule.gsub(/\{\{(\w+)\}\}/) do
      if value = self.options[$1.to_sym]
        value
      else
        "{{#{$1}}}"
      end
    end
    new_rule.action = rule.action
    new_rule.conditions = rule.conditions | self.conditions
    if self.version
      new_rule.versions = [self.version]
    end

    if has_host_group?
      host_group = @rule.chain.table.base.host_groups[self.options[:ip]]
      host_group.hosts.each do |key, host|
        host.ips.each do |v, ip|
          hg_rule = new_rule.dup
          hg_rule.description += " (#{host.name} via #{host_group.name})"
          hg_rule.rule.gsub!(host_group.name.to_s, ip)
          hg_rule.versions = [v]
          rules << hg_rule
        end
      end
    else
      rules << new_rule
    end
  end
end

#versionObject



19
20
21
22
23
24
# File 'lib/riptables/rule_permutation.rb', line 19

def version
  self.options[:v] ||
  self.options[:version] ||
  (has_ipv4_ip_address? ? 4 : nil) ||
  (has_ipv6_ip_address? ? 6 : nil)
end