Módulo: Mongo::Address::Validator Private

Incluido en:
Srv::Resultado, URI
Definido en:
lib/mongo/dirección/validador.rb

Overview

Este módulo forma parte de una API privada. Debe evitar su uso siempre que sea posible, ya que podría eliminarse o modificarse en el futuro.

Desde:

  • 2.0.0

Colapso del resumen del método de instancia

Detalles del método de instancia

#validate_address_str!(address_str) ⇒ Objeto

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.

Toma una cadena de dirección en formato ipv4/ipv6/nombre de host/ruta de socket y valida su formato.

Desde:

  • 2.0.0



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
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
# Archivo 'lib/mongo/address/validator.rb', línea 27

def validate_address_str!(dirección_str)
  caso dirección_str
  Cuando /\A\[[\d:]+\](?::(\d+))?\z/
    # ipv6 con puerto opcional
    Si port_str = $1
      validate_port_str!(port_str)
    end
  Cuando /\A\//, /\.sock\z/
    # Ruta del socket Unix.
    # La especificación requiere que validemos que la ruta no tenga caracteres sin escapar.
    # barras, pero si este fuera el caso, el análisis tendría
    # ya falló en otro lugar porque la URI se habría dividido en
    # un lugar extraño.
    # La especificación también permite rutas de sockets relativas y requiere que
    # Las rutas de socket terminan en ".sock". Aceptamos todas las rutas, excepto casos especiales.
    # la extensión .sock para evitar que las rutas relativas caigan en el
    # caso host:puerto a continuación.
  Cuando /[\/\[\]]/
    # Ni un host:puerto ni una dirección ipv4 con puerto opcional.
    # Posiblemente una dirección ipv6 defectuosa con, por ejemplo, un delimitador de puerto presente y
    # puerto faltante, o basura extra antes o después.
    propagar Error::InvalidAddress,
      "Hostname inválido: #{address_str}"
  Cuando /:.*:/m
    propagar Error::InvalidAddress,
      "Nose permiten delimitadores de puertos múltiples: #{address_str}"
  else
    # host:puerto o dirección ipv4 con número de puerto opcional
    host, Puerto = dirección_str.división(':')
    Si host.¿vacío?
      propagar Error::InvalidAddress, "Elhost está vacío: #{address_str}"
    end

    validate_hostname!(host)

    Si Puerto && Puerto.¿vacío?
      propagar Error::InvalidAddress, "El puerto está vacío: #{address_str}"
    end

    validate_port_str!(Puerto)
  end
end