Clase: Mongo::Server::PendingConnection Privada

Hereda:
Base de conexión Mostrar todo
Ampliado por:
Reenviable
Definido en:
lib/mongo/server/conexión_pendiente.rb

Overview

Esta clase forma parte de una API privada. Debe evitar usarla siempre que sea posible, ya que podría eliminarse o modificarse en el futuro.

Esta clase encapsula las conexiones durante el protocolo de enlace y la autenticación.

Desde:

  • 2.0.0

Resumen constante

Constantes heredadas de ConnectionBase

ConnectionBase::TAMAÑO MÁXIMO DE OBJETO BSON PREDETERMINADO, ConnectionBase::COBERTURA MÁXIMA DE COMANDOS BSON, ConnectionBase::TAMAÑO MÁXIMO DE BSON REDUCIDO

Constantes incluidas desde Loggable

Registrable::PREFIX

Colapso delresumen de atributos de instancia

Atributos heredados de ConnectionBase

#descripción, #opciones, #servidor

Atributos incluidos de Monitoring::Publishable

#monitoring

Atributos heredados de ConnectionCommon

#compressor, #pid

Colapso del resumen del método de instancia

Métodos heredados de ConnectionBase

#metadatos_de_la_aplicación, #envío, #generación, #id_del_servicio

Métodos incluidos en Monitoring::Publishable

#publicar_evento_cmap, #publicar_evento, #publicar_evento_sdam

Métodos incluidos en Loggable

#log_debug, #log_error, #log_fatal, #log_info, #log_warn, #logger

Métodos heredados de ConnectionCommon

#conectado?, #comando_de_apretón_de_manos, #documento_de_apretón_de_manos

Detalles del constructor

#inicializar(socket, servidor, monitoreo, opciones = {}) ⇒ Conexión pendiente

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

Devuelve una nueva instancia de PendingConnection.

Desde:

  • 2.0.0



27
28
29
30
31
32
33
# Archivo 'lib/mongo/server/pending_connection.rb', línea 27

def inicializar(Socket, Server, vigilancia, opciones = {})
  @socket = Socket
  @opciones = opciones
  @server = Server
  @monitoring = vigilancia
  @id = opciones[:id]
end

Detalles de los atributos de instancia

#idEntero (solo lectura)

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

Devuelve el ID de la conexión. Es el mismo ID que el del objeto Connection normal para el que se creó esta instancia de PendingConnection.

Devuelve:

  • (Entero)

    El ID de la conexión. Es el mismo que el del objeto Connection normal para el que se creó esta instancia de PendingConnection.

Desde:

  • 2.0.0



38
39
40
# Archivo 'lib/mongo/server/pending_connection.rb', línea 38

def ID.
  @id
end

Detalles del método de instancia

#¡apretón de manos y autenticación!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.

Desde:

  • 2.0.0



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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
# Archivo 'lib/mongo/server/pending_connection.rb', línea 40

def ¡apretón de manos y autenticación!
  documento de autorización especulativa = nulo
  Si opciones[:usuario] || opciones[:mecánica de autenticación]
    # Para crear una instancia de Auth, necesitamos especificar el mecanismo,
    # pero en este momento no conocemos el mecanismo que finalmente
    Se utilizará # (ya que esto depende de los datos devueltos por
    # el apretón de manos, específicamente la versión del servidor).
    # Sin embargo, sabemos que solo los servidores 4.4+ admiten especulaciones.
    # autenticación, y esos servidores generalmente también la admiten
    # SCRAM-SHA-256. Esperamos que las cuentas de usuario creadas para 4.4+
    # los servidores generalmente permitirían la autenticación SCRAM-SHA-256;
    # Las cuentas de usuario migradas desde servidores anteriores a4.4 solo pueden permitir
    # SCRAM-SHA-1. El uso de SCRAM-SHA-256 por defecto es por lo tanto
    # sensato y también lo exige la especificación de autenticación especulativa.
    # Si no se especificó ningún mecanismo y estamos hablando con un 3.0+
    # servidor, enviaremos un documento de autorización especulativa, el servidor
    # Ignórelo y realizaremos la autenticación mediante autenticación explícita
    # comando después de haber establecido el mecanismo por defecto posteriormente en CR.
    # Si no se especificó ningún mecanismo y estamos hablando con un 4.4+
    # el servidor y la cuenta de usuario no permiten SCRAM-SHA-256, lo haremos
    # autenticar en un comando separado con SCRAM-SHA-1 después
    # pasando por la negociación del mecanismo SCRAM.
    default_options = opciones::Redactado.Nuevo(:mecánica de autenticación => :scram256)
    usuario de autenticación especulativa = Auth::Usuario.Nuevo(default_options.unir(opciones))
    autenticación especulativa = Auth.Obtener(usuario de autenticación especulativa, yo)
    documento de autorización especulativa = autenticación especulativa.conversación.documento de autorización especulativa
  end

  resultado = handshake!(speculative_auth_doc: documento de autorización especulativa)

  Si Descripción.¿desconocido?
    propagar Error::InternalDriverError, "Ladescripción de la conexión no puede ser desconocida después de un protocolo de enlace exitoso: #{description.inspect}"
  end

  begin
    Si documento de autorización especulativa && (resultado de autenticación especulativa = resultado['Autenticación especulativa '])
      a no ser que Descripción.características.¿scram_sha_1_habilitado?
        propagar Error::Respuesta de autenticación de servidor no válida, "Laautenticación especulativa tuvo éxito en un3.0 servidor anterior a"
      end
      caso usuario de autenticación especulativa.mecanismo
      Cuando :mongodb_x509
        # Hecho
      # El mecanismo de autenticación predeterminado es scram256, pero si el usuario lo especifica
      # si nos escabullimos explícitamente, es posible que podamos autenticarnos especulativamente
      # con prisa.
      Cuando :largarse, :scram256
        ¡autenticar!(
          nonce de cliente de autenticación especulativa: autenticación especulativa.conversación.client_nonce,
          mechanism_auth_especulativo: usuario de autenticación especulativa.mecanismo,
          resultado de autenticación especulativa: resultado de autenticación especulativa,
        )
      else
        propagar Error::InternalDriverError, "Laautenticación especulativa tuvo éxito inesperadamente para el mecanismo n.° {speculative_auth_user.mechanism.inspect}"
      end
    elsif !Descripción.¿árbitro?
      ¡autenticar!
    end
  rescate Mongo::Error, Mongo::Error::AuthError => Excª
    Excª.id_de_servicio = id_de_servicio
    propagar
  end

  Si Descripción.¿desconocido?
    propagar Error::InternalDriverError, "Ladescripción de la conexión no puede ser desconocida después de una autenticación exitosa: #{description.inspect}"
  end

  Si Server.¿equilibrador de carga? && !Descripción.mongos?
    propagar Error::Objetivo del equilibrador de carga incorrecto, "Laoperación con equilibrio de carga requiere estar conectado a mongos, pero el servidor en #{address. seed} se informó a sí mismo como #{description.server_type.to_s.gsub( ' _  ',  ' ' ) }"
  end
end