Módulo: Mongo::Address::Validator Privado

Incluido en:
Srv::Resultado, URI
Definido en:
lib/mongo/address/validator.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

Resumen del método de instancia colapsar

Detalles del método de instancia

#validar_dirección_str!(dirección_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 string 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!(address_str)
  caso address_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 tiene ningún carácter sin escapar
    # barras oblicuas, pero si este fuera el caso, el análisis tendría
    # ya falló en otra parte porque el 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
    # host:port caso siguiente.
  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,
      "No se permiten múltiples delimitadores de puertos: #{address_str}"
  else
    # host:puerto o dirección ipv4 con número de puerto opcional
    host, Puerto = address_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