Classe: Mongo::Crypt::EncryptionIO Privado
- Herda:
-
Objeto
- Objeto
- Mongo::Crypt::EncryptionIO
- Definido em:
- lib/mongo/crypt/encryption_io.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.
Uma classe que implementa métodos de E/S entre o driver e o servidor MongoDB ou mongocryptd.
Colapsode resumo constante
- SOCKET_TIMEOUT =
Essa constante faz parte de uma API privada. Você deve evitar usar essa constante, se possível, pois ela pode ser removida ou alterada no futuro.
Tempo limite usado para conexão, leitura e gravação do soquete TLS. Não há um tempo limite específico escrito nas especificações. Consulte Especificação1394 para uma discussão e atualizações sobre qual deve ser esse tempo limite.
10
Recolhimento do Resumo do método de instância
-
#add_key_alt_name(ID, key_alt_name, timeout_ms: nil) ➤ Objeto
privado
Adiciona um key_alt_name à array key_alt_names do documento de chave na coleção de cofre de chave com o ID fornecido.
-
#collection_info(db_name, filter, timeout_ms: nil) ➤ Hash
privado
Obtenha informações de collection para uma collection que corresponda ao filtro fornecido.
-
#delete_key(ID, timeout_ms: nil) ➤ Object
privado
Remove o documento chave com o ID fornecido da collection do cofre de chaves.
-
#feed_kms(kms_context, tls_options, timeout_ms: nil) ➤ Object
privado
Obtenha informações sobre a chave de encriptação do KMS remoto e insira-as no objeto KmsContext.
-
#find_keys(filter, timeout_ms: nil) ➤ Array<BSON::Document>
privado
Faça query de chaves na coleção de cofre de chaves usando o filtro fornecido.
-
#get_key(ID, timeout_ms: nil) ➤ Objeto
privado
Encontra um único documento-chave com o ID fornecido.
-
#get_key_by_alt_name(key_alt_name, timeout_ms: nil) ➤ Objeto
privado
Retorna um documento de chave na coleção de cofre de chave com o key_alt_name fornecido.
-
#get_keys(timeout_ms: nil) ➤ Objeto
privado
Encontra todos os documentos na key vault collection.
-
#initialize(client: nil, mongocryptd_client: nil, key_vault_namespace:, key_vault_client:, metadata_client:, mongocryptd_options: {}) ➤ EncryptionIO
construtor
privado
Cria um novo objeto EncryptionIO com informações sobre como se conectar ao cofre de chaves.
-
#insert_data_key(documento, timeout_ms: nil) ➤ Mongo::Operation::Insert::Result
privado
Insira um documento na coleção do cofre de chaves.
-
#marque_command(cmd, timeout_ms: nil) ➤ Hash
privado
Envie o comando para mongocryptd para ser marcado com marcações de intenção de criptografia.
-
#remove_key_alt_name(ID, key_alt_name, timeout_ms: nil) ➤ Objeto
privado
Remove um key_alt_name da array key_alt_names do documento de chave na coleção de cofre de chaves com o ID fornecido.
-
#update_data_keys(updates, timeout_ms: nil) ⇒ BulkWrite::Result
privado
Aplique as solicitações fornecidas à coleção de cofre de chaves usando gravação em massa.
Detalhes do construtor
#initialize(client: nil, mongocryptd_client: nil, key_vault_namespace:, key_vault_client:, metadata_client:, mongocryptd_options: {}) ➤ EncryptionIO
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.
Ao ser usado para criptografia automática, todos os argumentos são necessários. Ao ser usado para criptografia explícita, somente os argumentos key_vault_namespace e key_vault_client são necessários.
Esta classe espera que as opções key_vault_client e key_vault_namespace não sejam nulas e estejam no formato correto.
Cria um novo objeto EncryptionIO com informações sobre como se conectar ao cofre de chaves.
57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
# Arquivo 'lib/mongo/crypt/encryption_io.rb', linha 57 def inicializar( cliente: nada, mongocryptd_client: nada, key_vault_namespace:, key_vault_client:, metadata_client:, mongocryptd_options: {} ) validate_key_vault_client!(key_vault_client) validate_key_vault_namespace!(key_vault_namespace) @cliente = Cliente @mongocryptd_client = mongocryptd_client @key_vault_db_name, @key_vault_collection_name = key_vault_namespace.dividir('.') @key_vault_client = key_vault_client @metadata_client = @opções = end |
Detalhes do método de instância
#add_key_alt_name(ID, key_alt_name, timeout_ms: nil) ➤ 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.
Adiciona um key_alt_name à array key_alt_names do documento de chave na coleção de cofre de chave com o ID fornecido.
185 186 187 188 189 190 191 |
# Arquivo 'lib/mongo/crypt/encryption_io.rb', linha 185 def add_key_alt_name(id, key_alt_name, timeout_ms: nada) key_vault_collection.find_one_and_update( { _id: id }, { '$addToSet' => { keyAltNames: key_alt_name } }, timeout_ms: timeout_ms ) end |
#collection_info(db_name, filter, timeout_ms: nil) ➤ Hash
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.
Obtenha informações da collection para uma collection que corresponda ao filtro fornecido
105 106 107 108 109 110 111 112 113 114 115 |
# Arquivo 'lib/mongo/crypt/encryption_io.rb', linha 105 def collection_info(db_name, filtro, filtro, timeout_ms: nada) a menos que @metadata_client aumentar ArgumentError, 'collection_info exige que metadata_client tenha sido passado para o construtor, mas não foi' end @metadata_client .Usar(db_name) .database .list_collections(filtro: filtro, filtro, deserialize_as_bson: true, timeout_ms: timeout_ms) .primeiro end |
#delete_key(ID, timeout_ms: nil) ➤ Object
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.
Remove o documento chave com o ID fornecido da collection do cofre de chaves.
195 196 197 |
# Arquivo 'lib/mongo/crypt/encryption_io.rb', linha 195 def delete_key(id, timeout_ms: nada) key_vault_collection.delete_one(_id: id, timeout_ms: timeout_ms) end |
#feed_kms(kms_context, tls_options, timeout_ms: nil) ➤ Object
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.
Obtenha informações sobre a chave de encriptação do KMS remoto e insira-as no objeto KmsContext
161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 |
# Arquivo 'lib/mongo/crypt/encryption_io.rb', linha 161 def feed_kms(kms_context, , timeout_ms: nada) with_ssl_socket(kms_context.endpoint, ) fazer |ssl_socket| Tempo-limite.timeout(timeout_ms || SOCKET_TIMEOUT, Erro::SocketTimeoutError, ' Aoperação de gravação do soquete atingiu o tempo limite' ) fazer ssl_socket.escrita do sistema(kms_context.) end bytes_needed = kms_context.bytes_needed enquanto bytes_needed > 0 fazer bytes = Tempo-limite.timeout(timeout_ms || SOCKET_TIMEOUT, Erro::SocketTimeoutError, ' Aoperação de leitura do soquete atingiu o tempo limite' ) fazer ssl_socket.sysread(bytes_needed) end kms_context.feed(bytes) bytes_needed = kms_context.bytes_needed end end end |
#find_keys(filter, timeout_ms: nil) ➤ Array<BSON::Document>
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.
Faça query de chaves na coleção de cofre de chaves usando o filtro fornecido
81 82 83 |
# Arquivo 'lib/mongo/crypt/encryption_io.rb', linha 81 def find_keys(filtro, filtro, timeout_ms: nada) key_vault_collection.find(filtro, filtro, timeout_ms: timeout_ms).to_a end |
#get_key(ID, timeout_ms: nil) ➤ 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.
Encontra um único documento-chave com o ID fornecido.
200 201 202 |
# Arquivo 'lib/mongo/crypt/encryption_io.rb', linha 200 def get_key(id, timeout_ms: nada) key_vault_collection.find(_id: id, timeout_ms: timeout_ms).primeiro end |
#get_key_by_alt_name(key_alt_name, timeout_ms: nil) ➤ 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.
Retorna um documento de chave na coleção de cofre de chave com o key_alt_name fornecido.
206 207 208 |
# Arquivo 'lib/mongo/crypt/encryption_io.rb', linha 206 def get_key_by_alt_name(key_alt_name, timeout_ms: nada) key_vault_collection.find(keyAltNames: key_alt_name, timeout_ms: timeout_ms).primeiro end |
#get_keys(timeout_ms: nil) ➤ 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.
Encontra todos os documentos na key vault collection.
211 212 213 |
# Arquivo 'lib/mongo/crypt/encryption_io.rb', linha 211 def get_keys(timeout_ms: nada) key_vault_collection.find(nada, timeout_ms: timeout_ms) end |
#insert_data_key(documento, timeout_ms: nil) ➤ Mongo::Operation::Insert::Result
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.
Inserir um documento na key vault collection
93 94 95 |
# Arquivo 'lib/mongo/crypt/encryption_io.rb', linha 93 def insert_data_key(documento, timeout_ms: nada) key_vault_collection.insert_one(documento, timeout_ms: timeout_ms) end |
#marque_command(cmd, timeout_ms: nil) ➤ Hash
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.
Envie o comando para mongocryptd para ser marcado com marcações de intenção de criptografia
125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 |
# Arquivo 'lib/mongo/crypt/encryption_io.rb', linha 125 def marque_command(cmd, timeout_ms: nada) a menos que @mongocryptd_client aumentar ArgumentError, 'marque_command exige que mongocryptd_client tenha sido passado para o construtor, mas não foi' end # Certifique-se de que a resposta do mongocryptd seja desserializada com { mode: :bson } # para evitar a perda de informações de tipo em comandos = { execution_options: { deserialize_as_bson: true }, timeout_ms: timeout_ms } começar Resposta = @mongocryptd_client.database.comando(cmd, ) salvar Erro::NoServerAvailable => e aumentar e se @opções[:mongocryptd_bypass_spawn] spawn_mongocryptd Resposta = @mongocryptd_client.database.comando(cmd, ) end Método Resposta.primeiro end |
#remove_key_alt_name(ID, key_alt_name, timeout_ms: nil) ➤ 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.
Remove um key_alt_name da array key_alt_names do documento de chave na coleção de cofre de chaves com o ID fornecido.
217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 |
# Arquivo 'lib/mongo/crypt/encryption_io.rb', linha 217 def remove_key_alt_name(id, key_alt_name, timeout_ms: nada) key_vault_collection.find_one_and_update( { _id: id }, [ { '$set' => { keyAltNames: { '$cond' => [ { '$eq' => [ '$keyAltNames', [ key_alt_name ] ] }, '$$REMOVE', { '$filter' => { entrada: '$keyAltNames', cond: { '$ne' => [ '$$This', key_alt_name ] } } } ] } } } ], timeout_ms: timeout_ms ) end |
#update_data_keys(updates, timeout_ms: nil) ⇒ BulkWrite::Result
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.
Aplique as solicitações fornecidas à coleção de cofre de chaves usando gravação em massa.
247 248 249 |
# Arquivo 'lib/mongo/crypt/encryption_io.rb', linha 247 def update_data_keys(Atualizações, timeout_ms: nada) key_vault_collection.bulk_write(Atualizações, timeout_ms: timeout_ms) end |