Classe: Mongo::Server::PpendingConnection Private
- Herda:
-
ConnectionBase
- Objeto
- ConnectionCommon
- ConnectionBase
- Mongo::Servidor::PpendingConnection
- Estendido por:
- Encaminhável
- Definido em:
- build/ruby-driver-v2.19/lib/mongo/server/pending_connection.rb
Visão geral
Esta classe faz parte de uma API privada. Evite usar essa classe, se possível, pois ela pode ser removida ou alterada no futuro.
Esta classe encapsula conexões durante a negociação e a autenticação.
Resumo constante
Constantes herdadas de ConnectionBase
ConnectionBase::DEFAULT_MAX_BSON_OBJECT_SIZE, ConnectionBase::MAX_BSON_COMMAND_OVERHEAD, ConnectionBase::REDUCED_MAX_BSON_SIZE
Constantes incluídas do Loggable
Recolhimento do Resumo do atributo de instância
-
#ID ➤ Inteiro
Somente leitura
privado
A ID da conexão.
Atributos herdados de ConnectionBase
#description, #options, #server
Atributos incluídos no Monitoramento::publicável
Atributos herdados de ConnectionCommon
Recolhimento do Resumo do método de instância
- #handshake_and_authenticate! ➤ Objeto privado
-
#inicializar(soquete, servidor, monitoramento, opções = {}) ➤ PpendingConnection
construtor
privado
Uma nova instância de PingConnection.
Métodos herdados de ConnectionBase
#app_metadata, #dispatch, # generação, #service_id
Métodos incluídos do monitoramento::publicável
#publish_cmap_event, #publish_event, #publish_sdam_event
Métodos incluídos no Loggable
#log_debug, #log_error, #log_fatal, #log_info, #log_WARN, #logger
Métodos herdados de ConnectionCommon
#connected?, #handshake_command, #handshake_document
Detalhes do construtor
#inicializar(soquete, servidor, monitoramento, opções = {}) ➤ PpendingConnection
Este método faz parte de uma API privada. Evite usar esse método, se possível, pois ele pode ser removido ou alterado no futuro.
Retorna uma nova instância de PingConnection.
27 28 29 30 31 32 33 |
# File 'build/ruby-driver-v2.19/lib/mongo/server/pending_connection.rb', linha 27 def inicializar(soquete, Servidor, Monitoramento, = {}) @socket = soquete @opções = @server = Servidor @monitoring = Monitoramento @id = [:id] end |
Detalhes do atributo da instância
#ID ➤ Inteiro (somente leitura)
Este método faz parte de uma API privada. Evite usar esse método, se possível, pois ele pode ser removido ou alterado no futuro.
Retorna O ID da conexão. Este é o mesmo ID que o do objeto de Conexão regular para o qual esta instância de PingConnection foi criada.
38 39 40 |
# File 'build/ruby-driver-v2.19/lib/mongo/server/pending_connection.rb', linha 38 def id @id end |
Detalhes do método de instância
#handshake_and_authenticate! ➤ Objeto
Este método faz parte de uma API privada. Evite usar esse método, se possível, pois ele pode ser removido ou alterado no 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 |
# File 'build/ruby-driver-v2.19/lib/mongo/server/pending_connection.rb', linha 40 def handshake_and_authenticate! speculative_auth_doc = nada se [: user] || [:auth_mech] # Para criar uma instância de autenticação, precisamos especificar o mecanismo, # mas, neste ponto, não sabemos o mecanismo que, em última análise, # será utilizado (já que depende dos dados retornados por # a negociação, especificamente a versão do servidor). # No entanto, sabemos que apenas 4.4+ servidores suportam especulativo # autenticação, e esses servidores também geralmente suportam # SCRAM-SHA-256. Esperemos que as contas de usuário criadas para 4.4+ # servidores geralmente permitiriam a autenticação SCRAM-SHA-256 ; # contas de usuário migradas dos servidores anteriores à4.4 só podem permitir # SCRAM-SHA-1. O uso de SCRAM-SHA-256 por padrão é, portanto, # sensível e também é exigida pela especificação de autenticação especulativa. # Se nenhum mecanismo foi especificado e estamos falando com um 3.0+ servidor, enviaremos documento de autenticação especulativo , o servidor irá # ignore e realizaremos a autenticação usando explícito # comando depois de ter padronizado o mecanismo mais tarde para CR. # Se nenhum mecanismo foi especificado e estamos falando com um 4.4+ # servidor e a conta de usuário não permite SCRAM-SHA-256, vamos # autenticar em um comando separado com SCRAM-SHA-1 após # passando pela negociação do mecanismo SCRAM. = Opções::Editado.Novo(:auth_mech => :scram256) speculative_auth_user = auth::Usuário.Novo(.mesclar()) especative_auth = auth.obter(speculative_auth_user, auto) speculative_auth_doc = especative_auth.conversa.speculative_auth_document end Resultado = aperto de mão!(speculative_auth_doc: speculative_auth_doc) se Descrição.desconhecido? aumentar Erro::InternalDriverError, "A descrição da conexão não pode ser desconhecida após a negociação bem-sucedida: #{descrição.inspecionar}" end começar se speculative_auth_doc && (speculative_auth_result = Resultado['speculativeAuthenticate']) a menos que Descrição.características.scram_sha_1_enabled? aumentar Erro::InvalidServerAuthResponse, "Autenticação especulativa bem-sucedida em um servidor pré-3.0 " end caso speculative_auth_user.Mecanismo quando :mongodb_x509 # Concluído # Padronizamos o mecanismo de autenticação para SCRAM256, mas se o usuário especificar # SCRAM explicitamente, podemos autenticar especulativamente # com SCRAM. quando :scram, :scram256 autenticar!( speculative_auth_client_nonce: especative_auth.conversa.client_nonce, speculative_auth_mech: speculative_auth_user.Mecanismo, speculative_auth_result: speculative_auth_result, ) mais aumentar Erro::InternalDriverError, "Autenticação especulativa inesperadamente bem-sucedida para o mecanismo # {speculative_auth_user.engine.inspect}" end elsif !Descrição.árbitro? autenticar! end salvar mongo::Erro, mongo::Erro::AuthError => exc exc.service_id = service_id aumentar end se Descrição.desconhecido? aumentar Erro::InternalDriverError, "A descrição da conexão não pode ser desconhecida após a autenticação bem-sucedida: #{descrição.inspect}" end se Servidor.load_balancer? && !Descrição.mongos? aumentar Erro::RuimBalancerTarget, "A operação de balanceamento de carga requer conexão a mongos, mas o servidor em #{endereço.seed} se reportou como #{descrição.server_type.to_s.gsub('_', ' ')}" end end |