Clase: Mongo::Server::PendingConnection Privada
- Hereda:
-
Base de conexión
- Objeto
- Conexión común
- Base de conexión
- Mongo::Servidor::Conexión pendiente
- 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.
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
Colapso delresumen de atributos de instancia
-
#id ⇒ Integer
solo lectura
privada
El ID de la conexión.
Atributos heredados de ConnectionBase
#descripción, #opciones, #servidor
Atributos incluidos de Monitoring::Publishable
Atributos heredados de ConnectionCommon
Colapso del resumen del método de instancia
- #¡apretón de manos y autenticación! ⇒ Objeto privada
-
#inicializar(socket, servidor, monitoreo, opciones = {}) ⇒ Conexión pendiente
constructor
privada
Una nueva instancia de PendingConnection.
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.
27 28 29 30 31 32 33 |
# Archivo 'lib/mongo/server/pending_connection.rb', línea 27 def inicializar(Socket, Server, vigilancia, = {}) @socket = Socket @opciones = @server = Server @monitoring = vigilancia @id = [:id] end |
Detalles de los atributos de instancia
#id ⇒ Entero (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.
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.
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 [:usuario] || [: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. = opciones::Redactado.Nuevo(:mecánica de autenticación => :scram256) usuario de autenticación especulativa = Auth::Usuario.Nuevo(.unir()) 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 |