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.

Colapso delresumen constante

SOCKET_TIMEOUT =

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

Resumen del método de instancia colapsar

Detalles del constructor

#initialize(client: nil, mongocryptd_client: nil, key_vault_namespace:, key_vault_client:, metadata_client:, mongocryptd_options: {}) ⇒ 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:

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) (predeterminado: nulo)

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

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

    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 (Hash) (por defecto: {})

    Opciones relacionadas con mongocryptd.

Hash de opciones (mongocryptd_options:):

  • :mongocryptd_bypass_spawn (booleano)
  • ruta_de_ejecucion_mongocryptd (Cadena)
  • argumentos_mongocryptd_spawn (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:,
  key_vault_client:, metadata_client:, opciones de mongocryptd: {}
)
  validate_key_vault_client!(key_vault_client)
  validate_key_vault_namespace!(key_vault_namespace)

  @cliente = Cliente
  @mongocryptd_client = mongocryptd_client
  @key_vault_db_name, @nombre_de_colección_de_key_vault = 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 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 al arreglo key_alt_names del documento clave en la Colección de Bóvedas de Llaves con el id proporcionado.



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)
  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 forma parte de una API privada. Debe evitarlo 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 (Hash)
  • :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



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

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(filtrar: filtro, deserializar_como_bson: true, tiempo_de_espera_ms: timeout_ms)
    .primero
end

#delete_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.

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 delete_key(ID, tiempo_de_espera_ms: nulo)
  key_vault_collection.delete_one(_id: ID, tiempo_de_espera_ms: timeout_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 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.



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, tls_options, tiempo_de_espera_ms: nulo)
  con_ssl_socket(kms_context.endpoint, tls_options) hacer |ssl_socket|
    Se acabó el tiempo.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 hacer
      bytes = Se acabó el tiempo.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 del 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 forma parte de una API privada. Debe evitarlo 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 (Hash)
  • :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



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

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 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)
  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 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 Bóvedas de Llaves con el nombre alternativo de clave dado.



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)
  key_vault_collection.buscar(keyAltNames: key_alt_name, tiempo_de_espera_ms: timeout_ms).primero
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óvedas de Llaves.



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

def get_keys(tiempo_de_espera_ms: nulo)
  key_vault_collection.buscar(nulo, tiempo_de_espera_ms: timeout_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)
  • :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:



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

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 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)
  • :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



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 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::No hay servidor disponible => e
    propagar e si @options[:mongocryptd_bypass_spawn]

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

  return respuesta.primero
end

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

Este método forma parte de una API privada. Debe evitarlo 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.



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)
  key_vault_collection.find_one_and_update(
    { _id: ID },
    [
      {
        '$set' => {
          keyAltNames: {
            '$cond' => [
              { '$eq' => [ ' $keyAltNames ', [ key_alt_name ] ] },
              '$$REMOVE',
              {
                '$filter' => {
                  aporte: ' $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 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:

  • solicitud (arreglo<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)
  key_vault_collection.bulk_write(updates, tiempo_de_espera_ms: timeout_ms)
end