Module: Mongo::Address::Validator Private
Do not use. This module is for internal use only.
Relationships & Source Files | |
Extension / Inclusion / Inheritance Descendants | |
Included In:
| |
Defined in: | lib/mongo/address/validator.rb |
Overview
Instance Method Summary
-
#validate_address_str!(address_str)
Internal use only
Takes an address string in ipv4/ipv6/hostname/socket path format and validates its format.
-
#validate_hostname!(host)
private
Internal use only
Validates format of the hostname, in particular for further use as the origin in same origin verification.
- #validate_port_str!(port) private Internal use only
Instance Method Details
#validate_address_str!(address_str)
Takes an address string in ipv4/ipv6/hostname/socket path format and validates its format.
# File 'lib/mongo/address/validator.rb', line 27
def validate_address_str!(address_str) case address_str when /\A\[[\d:]+\](?::(\d+))?\z/ # ipv6 with optional port if port_str = $1 validate_port_str!(port_str) end when /\A\//, /\.sock\z/ # Unix socket path. # Spec requires us to validate that the path has no unescaped # slashes, but if this were to be the case, parsing would have # already failed elsewhere because the URI would've been split in # a weird place. # The spec also allows relative socket paths and requires that # socket paths end in ".sock". We accept all paths but special case # the .sock extension to avoid relative paths falling into the # host:port case below. when /[\/\[\]]/ # Not a host:port nor an ipv4 address with optional port. # Possibly botched ipv6 address with e.g. port delimiter present and # port missing, or extra junk before or after. raise Error::InvalidAddress, "Invalid hostname: #{address_str}" when /:.*:/m raise Error::InvalidAddress, "Multiple port delimiters are not allowed: #{address_str}" else # host:port or ipv4 address with optional port number host, port = address_str.split(':') if host.empty? raise Error::InvalidAddress, "Host is empty: #{address_str}" end validate_hostname!(host) if port && port.empty? raise Error::InvalidAddress, "Port is empty: #{address_str}" end validate_port_str!(port) end end
#validate_hostname!(host) (private)
Validates format of the hostname, in particular for further use as the origin in same origin verification.
The hostname must have been normalized to remove the trailing dot if it was obtained from a DNS record. This method prohibits trailing dots.
# File 'lib/mongo/address/validator.rb', line 77
def validate_hostname!(host) # Since we are performing same origin verification during SRV # processing, prohibit leading dots in hostnames, trailing dots # and runs of multiple dots. DNS resolution of SRV records yields # hostnames with trailing dots, those trailing dots are removed # during normalization process prior to validation. if host.start_with?('.') raise Error::InvalidAddress, "Hostname cannot start with a dot: #{host}" end if host.end_with?('.') raise Error::InvalidAddress, "Hostname cannot end with a dot: #{host}" end if host.include?('..') raise Error::InvalidAddress, "Runs of multiple dots are not allowed in hostname: #{host}" end end