public void Initialize()
        {
            ThrowIfDisposed();

            if (_state.TryChange(State.Initial, State.Open))
            {
                var stopwatch = Stopwatch.StartNew();
                _openingEventHandler?.Invoke(new ClusterOpeningEvent(ClusterId, Settings));

                if (_settings.KmsProviders != null || _settings.SchemaMap != null)
                {
                    _cryptClient = CryptClientCreator.CreateCryptClient(_settings.KmsProviders, _settings.SchemaMap);
                }

                var endPoint = _settings.EndPoints.Single();
                if (_settings.Scheme != ConnectionStringScheme.MongoDBPlusSrv)
                {
                    _server = _serverFactory.CreateServer(_clusterType, _clusterId, _clusterClock, endPoint);
                    InitializeServer(_server);
                }
                else
                {
                    // _server will be created after srv resolving
                    var dnsEndPoint      = (DnsEndPoint)endPoint;
                    var lookupDomainName = dnsEndPoint.Host;
                    var monitor          = _dnsMonitorFactory.CreateDnsMonitor(this, lookupDomainName, _dnsMonitorCancellationTokenSource.Token);
                    _dnsMonitorThread = monitor.Start();
                }

                _openedEventHandler?.Invoke(new ClusterOpenedEvent(ClusterId, Settings, stopwatch.Elapsed));
            }
        }
 // constructors
 public ExplicitEncryptionLibMongoCryptController(
     CryptClient cryptClient,
     ClientEncryptionOptions clientEncryptionOptions)
     : base(
         Ensure.IsNotNull(cryptClient, nameof(cryptClient)),
         Ensure.IsNotNull(Ensure.IsNotNull(clientEncryptionOptions, nameof(clientEncryptionOptions)).KeyVaultClient, nameof(clientEncryptionOptions.KeyVaultClient)),
         Ensure.IsNotNull(Ensure.IsNotNull(clientEncryptionOptions, nameof(clientEncryptionOptions)).KeyVaultNamespace, nameof(clientEncryptionOptions.KeyVaultNamespace)))
 {
 }
 // constructors
 /// <summary>
 /// [Beta] Initializes a new instance of the <see cref="ClientEncryption"/> class.
 /// </summary>
 /// <param name="clientEncryptionOptions">The client encryption options.</param>
 public ClientEncryption(ClientEncryptionOptions clientEncryptionOptions)
 {
     _cryptClient = CryptClientCreator.CreateCryptClient(
         kmsProviders: clientEncryptionOptions.KmsProviders,
         schemaMap: null);
     _libMongoCryptController = new ExplicitEncryptionLibMongoCryptController(
         _cryptClient,
         clientEncryptionOptions);
 }
 // constructors
 protected LibMongoCryptControllerBase(
     CryptClient cryptClient,
     IMongoClient keyVaultClient,
     CollectionNamespace keyVaultNamespace)
 {
     _cryptClient        = cryptClient;
     _keyVaultClient     = keyVaultClient;                                                     // _keyVaultClient might not be fully constructed at this point, don't call any instance methods on it yet
     _keyVaultNamespace  = keyVaultNamespace;
     _keyVaultCollection = new Lazy <IMongoCollection <BsonDocument> >(GetKeyVaultCollection); // delay use _keyVaultClient
 }
示例#5
0
 public virtual void Initialize()
 {
     ThrowIfDisposed();
     if (_state.TryChange(State.Initial, State.Open))
     {
         if (_settings.KmsProviders != null || _settings.SchemaMap != null)
         {
             _cryptClient = CryptClientCreator.CreateCryptClient(_settings.KmsProviders, _settings.SchemaMap);
         }
     }
 }
 // constructors
 public AutoEncryptionLibMongoCryptController(
     IMongoClient client,
     CryptClient cryptClient,
     AutoEncryptionOptions autoEncryptionOptions)
     : base(
         Ensure.IsNotNull(cryptClient, nameof(cryptClient)),
         Ensure.IsNotNull(autoEncryptionOptions, nameof(autoEncryptionOptions)).KeyVaultClient ?? client,
         Ensure.IsNotNull(Ensure.IsNotNull(autoEncryptionOptions, nameof(autoEncryptionOptions)).KeyVaultNamespace, nameof(autoEncryptionOptions.KeyVaultNamespace)))
 {
     _client             = Ensure.IsNotNull(client, nameof(client)); // _client might not be fully constructed at this point, don't call any instance methods on it yet
     _mongocryptdFactory = new MongocryptdFactory(autoEncryptionOptions.ExtraOptions);
     _mongocryptdClient  = _mongocryptdFactory.CreateMongocryptdClient();
 }
 // constructors
 protected LibMongoCryptControllerBase(
     CryptClient cryptClient,
     IMongoClient keyVaultClient,
     CollectionNamespace keyVaultNamespace,
     IReadOnlyDictionary <string, SslSettings> tlsOptions)
 {
     _cryptClient          = cryptClient;
     _keyVaultClient       = keyVaultClient;                                                     // _keyVaultClient might not be fully constructed at this point, don't call any instance methods on it yet
     _keyVaultNamespace    = keyVaultNamespace;
     _keyVaultCollection   = new Lazy <IMongoCollection <BsonDocument> >(GetKeyVaultCollection); // delay use _keyVaultClient
     _networkStreamFactory = new NetworkStreamFactory();
     _tlsOptions           = Ensure.IsNotNull(tlsOptions, nameof(tlsOptions));
 }
示例#8
0
 // constructors
 private AutoEncryptionLibMongoCryptController(
     IMongoClient internalClient,
     IMongoClient keyVaultClient,
     IMongoClient metadataClient,
     CryptClient cryptClient,
     AutoEncryptionOptions autoEncryptionOptions)
     : base(
         Ensure.IsNotNull(cryptClient, nameof(cryptClient)),
         Ensure.IsNotNull(keyVaultClient, nameof(keyVaultClient)),
         Ensure.IsNotNull(Ensure.IsNotNull(autoEncryptionOptions, nameof(autoEncryptionOptions)).KeyVaultNamespace, nameof(autoEncryptionOptions.KeyVaultNamespace)))
 {
     _internalClient     = internalClient; // can be null
     _metadataClient     = metadataClient; // can be null
     _mongocryptdFactory = new MongocryptdFactory(autoEncryptionOptions.ExtraOptions);
     _mongocryptdClient  = _mongocryptdFactory.CreateMongocryptdClient();
 }
示例#9
0
        public static AutoEncryptionLibMongoCryptController Create(IMongoClient client, CryptClient cryptClient, AutoEncryptionOptions autoEncryptionOptions)
        {
            var lazyInternalClient = new Lazy <IMongoClient>(() => CreateInternalClient());
            var keyVaultClient     = autoEncryptionOptions.KeyVaultClient ?? lazyInternalClient.Value;
            var metadataClient     = autoEncryptionOptions.BypassAutoEncryption ? null : lazyInternalClient.Value;
            var internalClient     = lazyInternalClient.IsValueCreated ? lazyInternalClient.Value : null;

            return(new AutoEncryptionLibMongoCryptController(
                       internalClient,
                       keyVaultClient,
                       metadataClient,
                       cryptClient,
                       autoEncryptionOptions));

            IMongoClient CreateInternalClient()
            {
                var internalClientSettings = client.Settings.Clone();

                internalClientSettings.AutoEncryptionOptions = null;
                internalClientSettings.MinConnectionPoolSize = 0;
                return(new MongoClient(internalClientSettings));
            }
        }