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
#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 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 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(enchufe, Server, Monitoring, = {}) @socket = enchufe @options = @server = Server @monitoring = Monitoring @id = [:id] end |
Detalles de los atributos de instancia
#id ⇒ Integer (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
#handshake_and_authenticate! ⇒ 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! speculative_auth_doc = nulo si [Usuario/a] || [: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 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; # 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 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 con una 3.0+. # servidor, enviaremos un documento de autorización especulativa, el servidor # ignóralo y realizaremos la autenticación explícitamente # comando después de haber establecido el mecanismo por defecto posteriormente en CR. # 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(:mecánica de autenticación => :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, "Ladescripción de la conexión no puede ser desconocida después de un protocolo de enlace exitoso: #{description.inspect}" end begin si speculative_auth_doc && (resultado de autenticación especulativa = Resultado['Autenticación especulativa ']) a menos que Descripción.Funcionalidades.scram_sha_1_enabled? propagar Error::RespuestaDeAutenticaciónDeServidorInválida, "Laautenticación especulativa tuvo éxito en un3.0 servidor anterior a" end 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 :largarse, :scram256 ¡Autenticar!( speculative_auth_client_nonce: auth especulativo.conversación.client_nonce, mechanism_auth_especulativo: speculative_auth_user.mecanismo, speculative_auth_result: resultado de autenticación especulativa, ) 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 => Excª Excª.service_id = service_id 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.load_balancer? && !Descripción.mongos? propagar Error::BadLoadBalancerTarget, "La operación equilibrada en carga requiere estar conectada a un mongos, pero el servidor en #{dirección.semilla} se reportó como #{descripción.tipo_servidor.to_s.gsub('_', ' ')}" end end |