Class: RCS::Common::WinFirewall::Rule
- Inherits:
-
Object
- Object
- RCS::Common::WinFirewall::Rule
- Includes:
- Resolver
- Defined in:
- lib/rcs-common/winfirewall.rb
Overview
Represent a Windows Firewall rule.
Constant Summary collapse
- ATTRIBUTES =
%i[direction action local_ip remote_ip local_port remote_port name protocol profiles enabled grouping edge_traversal]
- RULE_GROUP =
'RCS Firewall Rules'
Instance Attribute Summary collapse
-
#attributes ⇒ Object
readonly
Returns the value of attribute attributes.
Instance Method Summary collapse
- #del ⇒ Object
-
#initialize(attributes = {}) ⇒ Rule
constructor
A new instance of Rule.
- #resolve_addresses(_raise = false) ⇒ Object
- #resolve_addresses! ⇒ Object
- #save ⇒ Object
Methods included from Resolver
#resolve_dns, #resolved_dns_cache
Constructor Details
#initialize(attributes = {}) ⇒ Rule
Returns a new instance of Rule.
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
# File 'lib/rcs-common/winfirewall.rb', line 21 def initialize(attributes = {}) # Default attribute values @attributes = { grouping: RULE_GROUP } # Merge default attributes with the given ones # and remove invalid attributes attributes.symbolize_keys! if attributes.respond_to?(:symbolize_keys!) attributes.reject! { |key| !ATTRIBUTES.include?(key) } @attributes.merge!(attributes) # Define getters and setters ATTRIBUTES.each do |name| define_singleton_method(name) { @attributes[name] } define_singleton_method("#{name}=") { |value| @attributes[name] = value } end end |
Instance Attribute Details
#attributes ⇒ Object (readonly)
Returns the value of attribute attributes.
19 20 21 |
# File 'lib/rcs-common/winfirewall.rb', line 19 def attributes @attributes end |
Instance Method Details
#del ⇒ Object
84 85 86 87 88 89 90 |
# File 'lib/rcs-common/winfirewall.rb', line 84 def del resolve_addresses only = %i[dir profile program service localip remoteip localport remoteport protocol name] Advfirewall.call("firewall delete rule #{stringify_attributes(only)}") end |
#resolve_addresses(_raise = false) ⇒ Object
44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
# File 'lib/rcs-common/winfirewall.rb', line 44 def resolve_addresses(_raise = false) return if @addresses_resolved %i[remote_ip local_ip].each do |name| next unless @attributes[name] addresses = [@attributes[name]].flatten addresses.each_with_index do |address, index| next if %w[any localsubnet dns dhcp wins defaultgateway].include?(address.to_s.downcase) next if address.to_s =~ Resolv::IPv4::Regex next if address.to_s =~ /(\d+)\.(\d+)\.(\d+)\.(\d+)\/(\d+)/ is_localhost = Socket.gethostname.casecmp(address).zero? addresses[index] = if is_localhost '127.0.0.1' elsif _raise resolve_dns(address) else resolve_dns(address) rescue address end end @attributes[name] = addresses.size == 1 ? addresses[0] : addresses end @addresses_resolved = true end |
#resolve_addresses! ⇒ Object
40 41 42 |
# File 'lib/rcs-common/winfirewall.rb', line 40 def resolve_addresses! resolve_addresses(true) end |
#save ⇒ Object
74 75 76 77 78 79 80 81 82 |
# File 'lib/rcs-common/winfirewall.rb', line 74 def save resolve_addresses! if Advfirewall.call("firewall add rule #{stringify_attributes}").ok? true else raise "Unable to save firewall rule #{@attributes[:name]}" end end |