Clase: Mongo::Server::PendingConnection Privado
- Hereda:
-
ConnectionBase
- Objeto
- ConnectionCommon
- ConnectionBase
- Mongo::Servidor::PendingConnection
- Ampliado por:
- Reenviable
- Definido en:
- lib/mongo/server/pending_connection.rb
Overview
Esta clase forma parte de una API privada. Evita usar esta clase si es posible, ya que puede ser eliminada o modificada en el futuro.
Esta clase encapsula las conexiones durante el apretón de manos y la autenticación.
Resumen constante
Constantes heredadas de ConnectionBase
ConnectionBase::DEFAULT_MAX_BSON_OBJECT_SIZE, ConnectionBase::MAX_BSON_COMMAND_OVERHEAD, ConnectionBase::REDUCED_MAX_BSON_SIZE
Constantes incluidas desde Loggable
Resumen de atributos de la instancia colapsar
-
#id ⇒ Integer
Solo lectura
privado
El ID de la conexión.
Atributos heredados de ConnectionBase
#descripción, #opciones, #servidor
Atributos incluidos de supervisión::Publishable
Atributos heredados de ConnectionCommon
Resumen del método de instancia colapsar
- #handshake_and_authenticate! ⇒ Object privado
-
#initialize(socket, servidor, supervisión, options = {}) ⇒ PendingConnection
constructor
privado
Una nueva instancia de PendingConnection.
Métodos heredados de ConnectionBase
#app_metadata, #dispatch, #generation, #service_id
Métodos incluidos de Monitoring::Publishable
#publish_cmap_event, #publish_event, #publish_sdam_event
Métodos incluidos desde Registrable
#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
#initialize(socket, servidor, supervisión, opciones = {}) ⇒ PendingConnection
Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.
Devuelve una nueva instancia de PendingConnection.
25 26 27 28 29 30 31 |
# Archivo 'lib/mongo/server/pending_connection.rb', línea 25 def inicializar(enchufe, Server, Monitoring, = {}) @socket = enchufe @options = @server = Server @monitoring = Monitoring @id = [:id] end |
Detalles de atributo de instancias
#id ⇒ Integer (solo lectura)
Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.
Devuelve el ID de la conexión. Este es el mismo ID que el del objeto de conexión regular para el que se creó esta instancia de PendingConnection.
36 37 38 |
# Archivo 'lib/mongo/server/pending_connection.rb', línea 36 def ID @id end |
Detalles del método de instancia
#handshake_and_authenticate! ⇒ Objeto
Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.
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 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 110 111 112 113 |
# Archivo 'lib/mongo/server/pending_connection.rb', línea 38 def ¡apretón de manos y autenticación! speculative_auth_doc = nulo si [Usuario/a] || [auth_mech] # Para crear una instancia de Auth, necesitamos especificar el mecanismo, # pero en este punto no se conoce el mecanismo que finalmente # se utilizará (ya que esto depende de los datos devueltos por # el handshake, específicamente la versión del servidor). # # Sin embargo, sabemos que solo 4.4+ servidores admiten la especulación # autenticación, y esos servidores también suelen admitir # SCRAM-SHA-256. Esperamos que las cuentas de usuario creadas para 4.4+ # los servidores generalmente permitirían la autenticación SCRAM-SHA-256; #cuentas de usuario migradas desde servidores anteriores a4.4 pueden permitir sólo # SCRAM-SHA-1. El uso de SCRAM-SHA-256 por defecto es entonces # es razonable, y también lo exige la especificación de autenticación especulativa. # # Si no se especificó ningún mecanismo y estamos hablando a un 4.2 # servidor, enviaremos un documento de autenticación especulativo, el servidor lo hará # ignóralo y realizaremos la autenticación explícitamente # comando. # # Si no se especificó ningún mecanismo y estamos hablando con una 4.4+. # servidor y la cuenta de usuario no permiten SCRAM-SHA-256, podremos # autenticar en un comando separado con SCRAM-SHA-1 después # pasando por la negociación del mecanismo SCRAM. = opciones::Redactado.Nuevo(auth_mech: :scram256) speculative_auth_user = Autenticación::Usuario.Nuevo(.fusionar()) auth especulativo = Autenticación.Obtener(speculative_auth_user, sí mismo) speculative_auth_doc = auth especulativo.conversación.speculative_auth_document end Resultado = handshake!(speculative_auth_doc: speculative_auth_doc) si Descripción.¿desconocido? propagar Error::InternalDriverError, "La descripción de la conexión no puede ser desconocida después del handshake exitoso: #{descripción.inspect}" end begin si speculative_auth_doc && (speculative_auth_result = Resultado['speculativeAuthenticate']) caso speculative_auth_user.mecanismo cuando :mongodb_x509 # Hecho # Utilizamos por defecto el mecanismo de autenticación scram256, pero si el usuario lo especifica # scram explícitamente, es posible que podamos autenticarnos de manera especulativa # with scram. cuando Schram, :scram256 ¡Autenticar!( speculative_auth_client_nonce: auth especulativo.conversación.client_nonce, mechanism_auth_especulativo: speculative_auth_user.mecanismo, speculative_auth_result: speculative_auth_result ) else propagar Error::InternalDriverError, "La autenticación especulativa se realizó con éxito inesperadamente para el mecanismo #{usuario_autenticacion_especulativa.mecanismo.inspeccionar}" end elsif !Descripción.árbitro? ¡Autenticar! end rescate mongo::Error, mongo::Error::AuthError => e e.service_id = service_id propagar end si Descripción.¿desconocido? propagar Error::InternalDriverError, "No se puede tener una descripción de la conexión desconocida después de una autenticación exitosa: #{description.inspect}" end return a menos que Server.load_balancer? && !Descripción.mongos? propagar Error::BadLoadBalancerTarget, "La operación balanceada requiere estar conectado a un mongos, pero el servidor en #{address.seed} se reporta como #{description.server_type.to_s.tr( '_', ' ' )}" end |