Classe: Mongo::Crypt::Context Private

Herda:
Objeto
  • Objeto
mostrar tudo
Estendido por:
Encaminhável
Definido em:
build/ruby-driver-v2.19/lib/mongo/crypt/context.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.

Um wrapper em torno do mongocrypt_ctx_t, que gerencia a máquina de estados para criptografia e descriptografia.

Esta classe é uma superclasse que define métodos compartilhados entre contextos que são inicializados para diferentes fins (por exemplo criação de chave de dados, criptografia, criptografia criptografia explícita, etc.)

Recolhimento do Resumo do atributo de instância

Recolhimento do Resumo do método de instância

Detalhes do construtor

#initialize(mongocrypt_handle, io) ➤ Contexto

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.

Criar um novo objeto de contexto

Parâmetros:

  • mongocrypt_handle (Mongo::Crypt::Handle)

    Um identificador para libmongocrypt usado para criar um novo objeto de contexto.

  • io (ClientEncryption::IO)

    Uma instância da classe IO que implementa os métodos de E/S do driver necessários para executar a máquina de estado.



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'build/ruby-driver-v2.19/lib/mongo/crypt/context.rb', linha 41

def inicializar(mongocrypt_handle, io)
  @mongocrypt_handle = mongocrypt_handle
  # Idealmente, este nível da API não seria passar o ponteiro
  # referências entre objetos, portanto, esta assinatura de método está sujeita a alterações.

  # O FFI::AutoPointer usa uma estratégia de liberação personalizada para liberar automaticamente
  # o ponteiro quando esse objeto sair do escopo
  @ctx_p = FFI::AutoPointer.Novo(
    Vinculação.mongocrypt_ctx_new(@mongocrypt_handle.ref),
    Vinculação.Método(:mongocrypt_ctx_destroy)
  )

  @encryption_io = io
  @cached_azure_token = nada
end

Detalhes do atributo da instância

#ctx_p ➤ Object (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.



57
58
59
# File 'build/ruby-driver-v2.19/lib/mongo/crypt/context.rb', linha 57

def ctx_p
  @ctx_p
end

Detalhes do método de instância

#run_state_machine ➤ 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.

Executa a máquina de estado mongocrypt_ctx_t e lida com toda a E/S em nome da libmongocrypt

Este método não está atualmente testado na unidade. É uma integração testada em spec/integration/explicit_encryption_spec.rb

Retorna:

  • (BSON::Document)

    Um documento BSON representando o resultado da máquina de estados. O conteúdo pode ser diferente dependendo de como o contexto foi inicializado.

Aumenta:



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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
# File 'build/ruby-driver-v2.19/lib/mongo/crypt/context.rb', linha 78

def run_state_machine
  enquanto true
    caso state
    quando :error
      Vinculação.check_ctx_status(auto)
    quando :ready
      # Finalize a máquina de estados e retorne o resultado como BSON::Document
      Método Vinculação.ctx_finalize(auto)
    quando :done
      Método nada
    quando :need_mongo_keys
      filtro, filtro = Vinculação.ctx_mongo_op(auto)

      @encryption_io.find_keys(filtro, filtro).cada fazer |chave|
        mongocrypt_feed(chave) se chave
      end

      mongocrypt_done
    quando :need_mongo_collinfo
      filtro, filtro = Vinculação.ctx_mongo_op(auto)

      Resultado = @encryption_io.collection_info(@db_name, filtro, filtro)
      mongocrypt_feed(Resultado) se Resultado

      mongocrypt_done
    quando :need_mongo_markings
      cmd = Vinculação.ctx_mongo_op(auto)

      Resultado = @encryption_io.marque_command(cmd)
      mongocrypt_feed(Resultado)

      mongocrypt_done
    quando :need_kms
      enquanto kms_context = Vinculação.ctx_next_kms_ctx(auto) fazer
        fornecedor = Vinculação.kms_ctx_get_kms_provider(kms_context)
        tls_options = @mongocrypt_handle.kms_tls_options(fornecedor)
        @encryption_io.feed_kms(kms_context, tls_options)
      end

      Vinculação.ctx_kms_done(auto)
    quando :need_kms_credentials
      Vinculação.ctx_provide_kms_providers(
        auto,
        retrieve_kms_credentials.to_document
      )
    mais
      aumentar Erro::Criptografia de erro.Novo(
        "O estado #{state} não é suportado pelo Mongo::Crypt::Context"
      )
    end
  end
end

#estadoSímbolo

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 estado do mongocrypt_ctx_t

Retorna:



62
63
64
# File 'build/ruby-driver-v2.19/lib/mongo/crypt/context.rb', linha 62

def state
  Vinculação.mongocrypt_ctx_state(@ctx_p)
end