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. Debe evitar usarla siempre que sea posible, ya que podría eliminarse o modificarse en el futuro.

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

Colapso delresumen constante

TIEMPO DE ESPERA DEL SOCKET =

Esta constante forma parte de una API privada. Debe evitar usarla siempre que sea posible, ya que podría eliminarse o modificarse en el futuro.

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

10

Colapso del resumen del método de instancia

Detalles del constructor

#inicializar(cliente: nulo, cliente_mongocryptd: nulo, espacio_de_nombres_de_bóveda_de_claves:, cliente_de_bóveda_de_claves:, cliente_de_metadatos:, opciones_de_mongocryptd: {}) ⇒ EncryptionIO

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.

Nota:

Para el cifrado automático, se requieren todos los argumentos. Para el 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 nulas y estén en el formato correcto.

Crea un nuevo objeto EncryptionIO con información sobre cómo conectarse al almacén de claves.

Parámetros:

  • Cliente (Mongo::Cliente) (predeterminado: nulo)

    El cliente utilizado para conectarse a la colección que almacena los documentos cifrados tiene como valor predeterminado nulo.

  • mongocryptd_client (Mongo::Cliente) (predeterminado: nulo)

    El cliente conectado a mongocryptd tiene como valor predeterminado nulo.

  • cliente de bóveda de claves (Mongo::Cliente)

    El cliente se conectó a la colección de bóveda de claves.

  • metadata_client (Mongo::Cliente | nulo)

    El cliente que se utilizará para obtener los metadatos de la colección.

  • key_vault_namespace (Cadena) -

    El espacio de nombres del almacén de claves en el formato db_name.collection_name.

  • opciones de mongocryptd (Hash) (predeterminado: {})

    Opciones relacionadas con mongocryptd.

Opciones Hash(mongocryptd_options:):

  • :mongocryptd_bypass_spawn (Booleano)
  • :ruta_de_generación_de_mongocryptd (Cadena)
  • :argumentos de generación de mongocryptd (Matriz<String>)


57
58
59
60
61
62
63
64
65
66
67
68
69
70
# Archivo 'lib/mongo/crypt/encryption_io.rb', línea 57

def inicializar(
  cliente: nulo, mongocryptd_client: nulo, key_vault_namespace:,
  cliente de bóveda de claves:, metadata_client:, opciones de mongocryptd: {}
)
  validate_key_vault_client!(cliente de bóveda de claves)
  validate_key_vault_namespace!(key_vault_namespace)

  @cliente = Cliente
  @mongocryptd_client = mongocryptd_client
  @nombre_de_base_de_datos_de_key_vault, @nombre_de_colección_de_key_vault = key_vault_namespace.división('.')
  @key_vault_client = cliente de bóveda de claves
  @metadata_client = 
  @opciones = opciones de mongocryptd
end

Detalles del método de instancia

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

Agrega un key_alt_name a la matriz key_alt_names del documento clave en la colección de bóveda de claves con la identificación dada.



185
186
187
188
189
190
191
# Archivo 'lib/mongo/crypt/encryption_io.rb', línea 185

def add_key_alt_name(ID., key_alt_name, tiempo de espera_ms: nulo)
  colección de bóveda de claves.find_one_and_update(
    { _id: ID. },
    { '$addToSet' => { keyAltNames: key_alt_name } },
    tiempo de espera_ms: tiempo de espera_ms
  )
end

#collection_info(nombre_base_datos, filtro, tiempo_de_espera_ms: nulo) ⇒ Hash

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.

Obtener información de una colección que coincida con el filtro proporcionado

Parámetros:

  • filtro (Hash)
  • :tiempo de espera_ms (Entero)

    El tiempo de espera de la operación en milisegundos. Debe ser un entero positivo. Un valor explícito de 0 significa infinito. El valor predeterminado es "unset", lo que significa que la función no está habilitada.

Devuelve:

  • (Hash)

    La información de la colección



105
106
107
108
109
110
111
112
113
114
115
# Archivo 'lib/mongo/crypt/encryption_io.rb', línea 105

def información de la colección(nombre_base_datos, filtro, tiempo de espera_ms: nulo)
  a no ser que @metadata_client
    propagar ArgumentError, 'collection_info requiere que metadata_client se haya pasado al constructor, pero no fue así'
  end

  @metadata_client
    .uso(nombre_base_datos)
    .database
    .listas_colecciones(filtrar: filtro, deserializar_como_bson: true, tiempo de espera_ms: tiempo de espera_ms)
    .primera
end

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

Elimina el documento clave con la identificación dada de la colección de bóveda de claves.



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

def tecla_de_eliminar(ID., tiempo de espera_ms: nulo)
  colección de bóveda de claves.delete_one(_id: ID., tiempo de espera_ms: tiempo de espera_ms)
end

#feed_kms(contexto_kms, opciones_tls, tiempo_de_espera_ms: nulo) ⇒ 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.

Obtenga información sobre la clave de cifrado KMS remota y envíela al 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 donde se establecerá una conexión TLS y el mensaje que se enviará en esa conexión.

  • opciones_tls. (Hash)

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

  • :tiempo de espera_ms (Entero)

    El tiempo de espera de la operación en milisegundos. Debe ser un entero positivo. Un valor explícito de 0 significa infinito. El valor predeterminado es "unset", lo que significa que la función no está habilitada.



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

def feed_kms(kms_context, opciones_tls, tiempo de espera_ms: nulo)
  con_socket_ssl(kms_context.punto final, opciones_tls) hacer |ssl_socket|
    Se acabó el tiempo.tiempo de espera(tiempo de espera_ms || TIEMPO DE ESPERA DEL SOCKET, Error::Error de tiempo de espera del socket,
      'Seagotó el tiempo de operación de escritura del socket'
    ) hacer
      ssl_socket.escritura del sistema(kms_context.Mensaje)
    end

    bytes_necesarios = kms_context.bytes_necesarios
    mientras bytes_necesarios > 0 hacer
      bytes = Se acabó el tiempo.tiempo de espera(tiempo de espera_ms || TIEMPO DE ESPERA DEL SOCKET, Error::Error de tiempo de espera del socket,
        'Seagotó el tiempo de operación de lectura del socket'
      ) hacer
        ssl_socket.lectura del sistema(bytes_necesarios)
      end

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

#find_keys(filtro, tiempo de espera_ms: nulo) ⇒ Array<BSON::Document>

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.

Consulta de claves en la colección de almacén de claves utilizando el filtro proporcionado

Parámetros:

  • filtro (Hash)
  • :tiempo de espera_ms (Entero)

    El tiempo de espera de la operación en milisegundos. Debe ser un entero positivo. Un valor explícito de 0 significa infinito. El valor predeterminado es "unset", lo que significa que la función no está habilitada.

Devuelve:

  • (Matriz<BSON::Document>)

    Los resultados de la consulta



81
82
83
# Archivo 'lib/mongo/crypt/encryption_io.rb', línea 81

def buscar_claves(filtro, tiempo de espera_ms: nulo)
  colección de bóveda de claves.buscar(filtro, tiempo de espera_ms: tiempo de espera_ms).to_a
end

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

Encuentra un solo documento clave con la identificación dada.



200
201
202
# Archivo 'lib/mongo/crypt/encryption_io.rb', línea 200

def obtener_clave(ID., tiempo de espera_ms: nulo)
  colección de bóveda de claves.buscar(_id: ID., tiempo de espera_ms: tiempo de espera_ms).primera
end

#obtener_clave_por_nombre_alt(nombre_alt_clave, tiempo_de_espera_ms: nulo) ⇒ 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.

Devuelve un documento clave en la colección de almacén de claves con el key_alt_name indicado.



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

def obtener_clave_por_nombre_alt(key_alt_name, tiempo de espera_ms: nulo)
  colección de bóveda de claves.buscar(keyAltNames: key_alt_name, tiempo de espera_ms: tiempo de espera_ms).primera
end

#get_keys(tiempo de espera_ms: nulo) ⇒ 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.

Encuentra todos los documentos en la colección de bóveda de claves.



211
212
213
# Archivo 'lib/mongo/crypt/encryption_io.rb', línea 211

def get_keys(tiempo de espera_ms: nulo)
  colección de bóveda de claves.buscar(nulo, tiempo de espera_ms: tiempo de espera_ms)
end

#insert_data_key(documento, tiempo de espera_ms: nulo) ⇒ Mongo::Operación::Insertar::Resultado

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.

Insertar un documento en la colección de almacén de claves

Parámetros:

  • Documento (Hash)
  • :tiempo de espera_ms (Entero)

    El tiempo de espera de la operación en milisegundos. Debe ser un entero positivo. Un valor explícito de 0 significa infinito. El valor predeterminado es "unset", lo que significa que la función no está habilitada.

Devuelve:



93
94
95
# Archivo 'lib/mongo/crypt/encryption_io.rb', línea 93

def insert_data_key(Documento, tiempo de espera_ms: nulo)
  colección de bóveda de claves.insert_one(Documento, tiempo de espera_ms: tiempo de espera_ms)
end

#mark_command(cmd, tiempo de espera_ms: nulo) ⇒ Hash

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.

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

Parámetros:

  • cmd (Hash)
  • :tiempo de espera_ms (Entero)

    El tiempo de espera de la operación en milisegundos. Debe ser un entero positivo. Un valor explícito de 0 significa infinito. El valor predeterminado es "unset", lo que significa que la función no está habilitada.

Devuelve:

  • (Hash)

    El comando marcado



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

def comando_marcar(cmd, tiempo de espera_ms: nulo)
  a no ser que @mongocryptd_client
    propagar ArgumentError, 'mark_command requiere que mongocryptd_client se haya pasado al constructor, pero no fue así'
  end

  # Asegúrese de que la respuesta de mongocryptd esté deserializada con { mode: :bson }
  # para evitar perder información de tipo en los comandos
  opciones = {
    opciones_de_ejecución: { deserializar_como_bson: true },
    tiempo de espera_ms: tiempo de espera_ms
  }

  begin
    respuesta = @mongocryptd_client.database.Comando(cmd, opciones)
  rescate Error::No hay servidor disponible => e
    propagar e Si @opciones[:mongocryptd_bypass_spawn]

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

  return respuesta.primera
end

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

Elimina un key_alt_name de la matriz key_alt_names del documento clave en la colección de bóveda de claves con la identificación dada.



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

def eliminar_tecla_alt_nombre(ID., key_alt_name, tiempo de espera_ms: nulo)
  colección de bóveda de claves.find_one_and_update(
    { _id: ID. },
    [
      {
        '$set' => {
          keyAltNames: {
            ' $cond ' => [
              { '$eq' => [ ' $keyAltNames ', [ key_alt_name ] ] },
              '$$REMOVE',
              {
                ' $filtro ' => {
                  aporte: ' $keyAltNames ',
                  cond: { '$ne' =>  [ ' $$esto ', key_alt_name ] }
                }
              }
            ]
          }
        }
      }
    ],
    tiempo de espera_ms: tiempo de espera_ms
  )
end

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

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.

Aplicar las solicitudes dadas a la colección de almacén de claves mediante escritura masiva.

Parámetros:

  • solicitudes (Matriz<Hash>)

    Las solicitudes de escritura masiva.

Devuelve:



247
248
249
# Archivo 'lib/mongo/crypt/encryption_io.rb', línea 247

def update_data_keys(updates, tiempo de espera_ms: nulo)
  colección de bóveda de claves.escritura masiva(updates, tiempo de espera_ms: tiempo de espera_ms)
end