Sha256: 9c9181b65d8d2119f916fbbdb604cfa0dc6c73fcdaab54bac34c7acdb2fb6d6a

Contents?: true

Size: 1.03 KB

Versions: 15

Compression:

Stored size: 1.03 KB

Contents

require 'ipaddr'

# Validates that attribute is a valid address.
class AddressFormatValidator < ActiveModel::EachValidator
  # Validates that `attribute`'s `value` on `object` is a valid address.
  #
  # @param record [#errors, ApplicationRecord] ActiveModel or ActiveRecord
  # @param attribute [Symbol] name of address attribute.
  # @param value [String, nil] address.
  # @return [void]
  def validate_each(object, attribute, value)
    error_message_block = lambda{ object.errors.add attribute, "must be a valid (IP or hostname) address" }
    begin
      # Checks for valid IP addresses
      if value.is_a? IPAddr
        potential_ip = value.dup
      else
        potential_ip = IPAddr.new(value)
      end
      error_message_block.call unless potential_ip.ipv4? || potential_ip.ipv6?
    rescue IPAddr::InvalidAddressError, IPAddr::AddressFamilyError, ArgumentError
      # IP address resolution failed, checks for valid hostname
      error_message_block.call unless (value && value.match?(/\A#{URI::PATTERN::HOSTNAME}\z/))
    end
  end
end

Version data entries

15 entries across 15 versions & 1 rubygems

Version Path
metasploit-model-5.0.2 app/validators/address_format_validator.rb
metasploit-model-5.0.1 app/validators/address_format_validator.rb
metasploit-model-5.0.0 app/validators/address_format_validator.rb
metasploit-model-4.0.6 app/validators/address_format_validator.rb
metasploit-model-4.0.5 app/validators/address_format_validator.rb
metasploit-model-4.0.4 app/validators/address_format_validator.rb
metasploit-model-4.0.3 app/validators/address_format_validator.rb
metasploit-model-4.0.2 app/validators/address_format_validator.rb
metasploit-model-4.0.1 app/validators/address_format_validator.rb
metasploit-model-4.0.0 app/validators/address_format_validator.rb
metasploit-model-3.1.4 app/validators/address_format_validator.rb
metasploit-model-3.1.3 app/validators/address_format_validator.rb
metasploit-model-3.1.2 app/validators/address_format_validator.rb
metasploit-model-3.1.1 app/validators/address_format_validator.rb
metasploit-model-3.1.0 app/validators/address_format_validator.rb