Sha256: 1077652c04f4b38fe230b8e6c4fc1ca95a83a1d6889a646b38d7a33152f379b6

Contents?: true

Size: 1.26 KB

Versions: 52

Compression:

Stored size: 1.26 KB

Contents

require 'ipaddr'

# Validates that value is an IPv4 or IPv6 address.
class IpFormatValidator < ActiveModel::EachValidator
  # Validates that `value` is an IPv4 or IPv4 address.  Ranges in CIDR or netmask notation are not allowed.
  #
  # @param record [#errors, ActiveRecord::Base] ActiveModel or ActiveRecord
  # @param attribute [Symbol] name of IP address attribute.
  # @param value [String, nil] IP address.
  # @return [void]
  # @see IPAddr#ipv4?
  # @see IPAddr#ipv6?
  def validate_each(record, attribute, value)
    begin
      potential_ip = IPAddr.new(value)
    rescue ArgumentError
      record.errors[attribute] << 'must be a valid IPv4 or IPv6 address'
    else
      # if it includes a netmask, then it's not an IP address, but an IP range.
      if potential_ip.ipv4?
        if potential_ip.instance_variable_get(:@mask_addr) != IPAddr::IN4MASK
          record.errors[attribute] << 'must be a valid IPv4 or IPv6 address and not an IPv4 address range in CIDR or netmask notation'
        end
      elsif potential_ip.ipv6?
        if potential_ip.instance_variable_get(:@mask_addr) != IPAddr::IN6MASK
          record.errors[attribute] << 'must be a valid IPv4 or IPv6 address and not an IPv6 address range in CIDR or netmask notation'
        end
      end
    end
  end
end

Version data entries

52 entries across 52 versions & 1 rubygems

Version Path
metasploit-model-2.0.4 app/validators/ip_format_validator.rb
metasploit-model-2.0.3 app/validators/ip_format_validator.rb
metasploit-model-2.0.2 app/validators/ip_format_validator.rb
metasploit-model-2.0.1 app/validators/ip_format_validator.rb
metasploit-model-2.0.0 app/validators/ip_format_validator.rb
metasploit-model-1.1.0 app/validators/ip_format_validator.rb
metasploit-model-1.0.2 app/validators/ip_format_validator.rb
metasploit-model-1.0.1 app/validators/ip_format_validator.rb
metasploit-model-1.0.0 app/validators/ip_format_validator.rb
metasploit-model-0.30.2 app/validators/ip_format_validator.rb
metasploit-model-0.30.2-java app/validators/ip_format_validator.rb
metasploit-model-0.30.1 app/validators/ip_format_validator.rb
metasploit-model-0.30.1-java app/validators/ip_format_validator.rb
metasploit-model-0.30.1.pre.rspec.pre.3.pre.1 app/validators/ip_format_validator.rb
metasploit-model-1.0.0.pre.rails.pre.4.0 app/validators/ip_format_validator.rb
metasploit-model-0.30.0 app/validators/ip_format_validator.rb
metasploit-model-0.30.0-java app/validators/ip_format_validator.rb
metasploit-model-0.29.2 app/validators/ip_format_validator.rb
metasploit-model-0.29.2-java app/validators/ip_format_validator.rb
metasploit-model-0.29.0 app/validators/ip_format_validator.rb