Clase: Mongo::Crypt::EncryptionIO Privado

Hereda:
Objeto
  • Objeto
Mostrar todo
Definido en:
lib/mongo/crypt/encryption_io.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.

Una clase que implementa métodos de E/S entre el controlador y el servidor MongoDB o mongocryptd.

Resumen de constantes colapsar

SOCKET_TIMEOUT =

Esta constante es parte de una API privada. Deberías evitar usar esta constante si es posible, ya que podría ser retirada o cambiada en el futuro.

Tiempo de espera utilizado para la conexión del socket TLS, lectura y escritura. No hay un tiempo de espera específico escrito en la especificación. Consulta SPEC-1394 para obtener una discusión y actualizaciones sobre cuál debería ser este tiempo de espera.

10

Resumen del método de instancia colapsar

Detalles del Constructor

#initialize(key_vault_namespace:, key_vault_client:, metadata_client:, client: nil, mongocryptd_client: nil, mongocryptd_options: {}) ⇒ EncryptionIO

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.

Nota:

Cuando se utiliza para el cifrado automático, se requieren todos los argumentos. Cuando se utiliza para cifrado explícito, solo se requieren los argumentos key_vault_namespace y key_vault_client.

Nota:

Esta clase espera que las opciones key_vault_client y key_vault_namespace no sean nil y estén en el formato correcto.

Crea un nuevo objeto EncryptionIO con información sobre cómo conectarse al key vault.

Parámetros:

  • Cliente (Mongo::cliente) (valor por defecto: nil)

    El cliente utilizado para conectarse a la colección que almacena los documentos cifrados, por defecto es nulo.

  • mongocryptd_client (Mongo::cliente) (valor por defecto: nil)

    El cliente se conectó a mongocryptd, por defecto es nil.

  • key_vault_client (Mongo::cliente)

    El cliente se conectó a la Colección de Bóvedas de Llaves.

  • metadata_client (Mongo::Client | nil)

    El cliente a utilizar para obtener metadatos de la colección.

  • key_vault_namespace (string)

    El espacio de nombres del Key Vault en el formato db_name.collection_name.

  • mongocryptd_options (encriptada) (por defecto: {})

    Opciones relacionadas con mongocryptd.

Hash de opciones (mongocryptd_options:):

  • :mongocryptd_bypass_spawn (booleano)
  • ruta_de_ejecucion_mongocryptd (string)
  • argumentos_mongocryptd_spawn (arreglo<String>)


54
55
56
57
58
59
60
61
62
63
64
65
66
# Archivo 'lib/mongo/crypt/encryption_io.rb', línea 54

def inicializar(
  key_vault_namespace:, key_vault_client:, metadata_client:, cliente: nulo, mongocryptd_client: nulo, mongocryptd_options: {}
)
  validate_key_vault_client!(key_vault_client)
  validate_key_vault_namespace!(key_vault_namespace)

  @client = Cliente
  @mongocryptd_client = mongocryptd_client
  @key_vault_db_name, @key_vault_collection_name = key_vault_namespace.división('.')
  @key_vault_client = key_vault_client
  @metadata_client = 
  @options = mongocryptd_options
end

Detalles del método de instancia

#add_key_alt_name(id, key_alt_name, timeout_ms: nil) ⇒ 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.

Agrega un key_alt_name al arreglo key_alt_names del documento clave en la Colección de Bóvedas de Llaves con el id proporcionado.



181
182
183
184
185
186
187
# Archivo 'lib/mongo/crypt/encryption_io.rb', línea 181

def add_key_alt_name(ID, key_alt_name, tiempo_de_espera_ms: nulo)
  key_vault_collection.find_one_and_update(
    { _id: ID },
    { '$addToSet' => { keyAltNames: key_alt_name } },
    tiempo_de_espera_ms: timeout_ms
  )
end

#collection_info(db_name, filtro, timeout_ms: nil) ⇒ Hash

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.

Obtén información de la colección para una colección que coincida con el filtro proporcionado

Parámetros:

  • filtro (encriptada)
  • :timeout_ms (Número entero)

    El tiempo de espera de la operación en milisegundos. Debe ser un número entero no negativo. Un valor explícito de 0 significa infinito. El valor predeterminado no está establecido, lo que significa que la funcionalidad no está activada.

Devuelve:

  • (encriptada)

    La información de la colección



101
102
103
104
105
106
107
108
109
110
111
112
# Archivo 'lib/mongo/crypt/encryption_io.rb', línea 101

def collection_info(db_name, filtro, tiempo_de_espera_ms: nulo)
  a menos que @metadata_client
    propagar ArgumentError,
          'collection_info requiere que metadata_client se haya pasado al constructor, pero no se hizo'
  end

  @metadata_client
    .Usar(db_name)
    .database
    .list_collections(filtro: filtro, deserializar_como_bson: true, tiempo_de_espera_ms: timeout_ms)
    .primero
end

#delete_key(id, timeout_ms: nil) ⇒ 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.

Elimina el documento clave con el ID dado de la Colección de Bóvedas de Llaves.



191
192
193
# Archivo 'lib/mongo/crypt/encryption_io.rb', línea 191

def delete_key(ID, tiempo_de_espera_ms: nulo)
  key_vault_collection.delete_one(_id: ID, tiempo_de_espera_ms: timeout_ms)
end

#feed_kms(kms_context, tls_options, timeout_ms: nil) ⇒ 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.

Obtenga información sobre la llave de cifrado remota de KMS y cárguela en el objeto KmsContext

Parámetros:

  • kms_context (Mongo::Crypt::KmsContext)

    Un objeto KmsContext correspondiente a una clave de datos KMS remota. Contiene información sobre el punto final en el que establecer una conexión TLS y el mensaje que se enviará en esa conexión.

  • tls_options. (encriptada)

    opciones TLS para conectarse al proveedor KMS. Las opciones son las mismas que para Mongo::Client.

  • :timeout_ms (Número entero)

    El tiempo de espera de la operación en milisegundos. Debe ser un número entero no negativo. Un valor explícito de 0 significa infinito. El valor predeterminado no está establecido, lo que significa que la funcionalidad no está activada.



159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
# Archivo 'lib/mongo/crypt/encryption_io.rb', línea 159

def alimentación_kms(kms_context, tls_options, tiempo_de_espera_ms: nulo)
  con_ssl_socket(kms_context.endpoint, tls_options) hacer |ssl_socket|
    Tiempo de espera.tiempo de espera(timeout_ms || SOCKET_TIMEOUT, Error::SocketTimeoutError,
                    'Tiempo de espera agotado para la operación de escritura en el Socket') hacer
      ssl_socket.syswrite(kms_context.mensaje)
    end

    bytes_needed = kms_context.bytes_needed
    mientras bytes_needed > 0
      bytes = Tiempo de espera.tiempo de espera(timeout_ms || SOCKET_TIMEOUT, Error::SocketTimeoutError,
                              'Tiempo de espera agotado para la operación de lectura de socket') hacer
        ssl_socket.lectura de sistema(bytes_needed)
      end

      kms_context.alimentación(bytes)
      bytes_needed = kms_context.bytes_needed
    end
  end
end

#find_keys(filtro, timeout_ms: nil) ⇒ Array<BSON::Document>

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.

query for keys in the Colección de Bóvedas de Llaves using the filtro proporcionado.

Parámetros:

  • filtro (encriptada)
  • :timeout_ms (Número entero)

    El tiempo de espera de la operación en milisegundos. Debe ser un número entero no negativo. Un valor explícito de 0 significa infinito. El valor predeterminado no está establecido, lo que significa que la funcionalidad no está activada.

Devuelve:

  • (arreglo<BSON::Document>)

    Los resultados de la query



77
78
79
# Archivo 'lib/mongo/crypt/encryption_io.rb', línea 77

def encontrar_claves(filtro, tiempo_de_espera_ms: nulo)
  key_vault_collection.buscar(filtro, tiempo_de_espera_ms: timeout_ms).to_a
end

#get_key(id, timeout_ms: nil) ⇒ 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.

Encuentra un único documento clave con el id proporcionado.



196
197
198
# Archivo 'lib/mongo/crypt/encryption_io.rb', línea 196

def obtener_clave(ID, tiempo_de_espera_ms: nulo)
  key_vault_collection.buscar(_id: ID, tiempo_de_espera_ms: timeout_ms).primero
end

#get_key_by_alt_name(key_alt_name, timeout_ms: nil) ⇒ 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.

Devuelve un documento clave en la Colección de Bóvedas de Llaves con el nombre alternativo de clave dado.



202
203
204
# Archivo 'lib/mongo/crypt/encryption_io.rb', línea 202

def get_key_by_alt_name(key_alt_name, tiempo_de_espera_ms: nulo)
  key_vault_collection.buscar(keyAltNames: key_alt_name, tiempo_de_espera_ms: timeout_ms).primero
end

#get_keys(timeout_ms: nil) ⇒ 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.

Encuentra todos los documentos en la Colección de Bóvedas de Llaves.



207
208
209
# Archivo 'lib/mongo/crypt/encryption_io.rb', línea 207

def get_keys(tiempo_de_espera_ms: nulo)
  key_vault_collection.buscar(nulo, tiempo_de_espera_ms: timeout_ms)
end

#insertar_dato_clave(documento, timeout_ms: nil) ⇒ Mongo::Operación::Insertar::Resultado

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.

Insertar un documento en la Colección de Bóvedas de Llaves

Parámetros:

  • Documento (encriptada)
  • :timeout_ms (Número entero)

    El tiempo de espera de la operación en milisegundos. Debe ser un número entero no negativo. Un valor explícito de 0 significa infinito. El valor predeterminado no está establecido, lo que significa que la funcionalidad no está activada.

Devuelve:



89
90
91
# Archivo 'lib/mongo/crypt/encryption_io.rb', línea 89

def insert_data_key(Documento, tiempo_de_espera_ms: nulo)
  key_vault_collection.insert_one(Documento, tiempo_de_espera_ms: timeout_ms)
end

#mark_command(cmd, timeout_ms: nil) ⇒ Hash

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.

Envía el comando a mongocryptd para que se marque con las marcas de intención de cifrado

Parámetros:

  • cmd (encriptada)
  • :timeout_ms (Número entero)

    El tiempo de espera de la operación en milisegundos. Debe ser un número entero no negativo. Un valor explícito de 0 significa infinito. El valor predeterminado no está establecido, lo que significa que la funcionalidad no está activada.

Devuelve:

  • (encriptada)

    El comando marcado



122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
# Archivo 'lib/mongo/crypt/encryption_io.rb', línea 122

def marcar_comando(cmd, tiempo_de_espera_ms: nulo)
  a menos que @mongocryptd_client
    propagar ArgumentError,
          'mark_command requiere que mongocryptd_client haya sido pasado al constructor, pero no lo fue'
  end

  # Asegúrese de que la respuesta de mongocryptd se deserialice con { mode: :bson }
  # para evitar perder información de tipo en los comandos
  opciones = {
    execution_options: { deserializar_como_bson: true },
    tiempo_de_espera_ms: timeout_ms
  }

  begin
    Respuesta = @mongocryptd_client.database.Comando(cmd, opciones)
  rescate Error::NoServerAvailable => e
    propagar e si @options[:mongocryptd_bypass_spawn]

    spawn_mongocryptd
    Respuesta = @mongocryptd_client.database.Comando(cmd, opciones)
  end

  Respuesta.primero
end

#remove_key_alt_name(id, key_alt_name, timeout_ms: nil) ⇒ Object

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.

Remueve un key_alt_name del arreglo key_alt_names del documento clave en la Colección de Bóvedas de Llaves con el ID dado.



213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
# Archivo 'lib/mongo/crypt/encryption_io.rb', línea 213

def eliminar_nombre_alternativo_de_clave(ID, key_alt_name, tiempo_de_espera_ms: nulo)
  key_vault_collection.find_one_and_update(
    { _id: ID },
    [
      {
        '$set' => {
          keyAltNames: {
            '$cond' => [
              { '$eq' => [ '$keyAltNames', [ key_alt_name ] ] },
              '$$REMOVE',
              {
                '$filter' => {
                  entrada: '$keyAltNames',
                  cond: { '$ne' => [ '$$esto', key_alt_name ] }
                }
              }
            ]
          }
        }
      }
    ],
    tiempo_de_espera_ms: timeout_ms
  )
end

#update_data_keys(updates, timeout_ms: nil) ⇒ BulkWrite::Result

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.

Aplicar las solicitudes dadas a la Colección de Bóvedas de Llaves utilizando escritura masiva.

Parámetros:

  • solicitud (arreglo<Hash>)

    Las solicitudes de escritura masiva.

Devuelve:



243
244
245
# Archivo 'lib/mongo/crypt/encryption_io.rb', línea 243

def update_data_keys(updates, tiempo_de_espera_ms: nulo)
  key_vault_collection.bulk_write(updates, tiempo_de_espera_ms: timeout_ms)
end