internal static IWriteOperation <BsonDocument> CreateEncryptedDropCollectionOperationIfConfigured( CollectionNamespace collectionNamespace, BsonDocument encryptedFields, MessageEncoderSettings messageEncoderSettings, Action <DropCollectionOperation> configureDropCollectionConfigurator) { var mainOperation = new DropCollectionOperation(collectionNamespace, messageEncoderSettings) { EncryptedFields = encryptedFields }; configureDropCollectionConfigurator?.Invoke(mainOperation); if (encryptedFields != null) { return(new CompositeWriteOperation <BsonDocument>( (CreateInnerDropOperation(EncryptedCollectionHelper.GetAdditionalCollectionName(encryptedFields, collectionNamespace, HelperCollectionForEncryption.Esc)), IsMainOperation: false), (CreateInnerDropOperation(EncryptedCollectionHelper.GetAdditionalCollectionName(encryptedFields, collectionNamespace, HelperCollectionForEncryption.Ecc)), IsMainOperation: false), (CreateInnerDropOperation(EncryptedCollectionHelper.GetAdditionalCollectionName(encryptedFields, collectionNamespace, HelperCollectionForEncryption.Ecos)), IsMainOperation: false), (mainOperation, IsMainOperation: true))); } else { return(mainOperation); } DropCollectionOperation CreateInnerDropOperation(string collectionName) => new DropCollectionOperation(new CollectionNamespace(collectionNamespace.DatabaseNamespace.DatabaseName, collectionName), messageEncoderSettings); }
internal static IWriteOperation <BsonDocument> CreateEncryptedCreateCollectionOperationIfConfigured( CollectionNamespace collectionNamespace, BsonDocument encryptedFields, MessageEncoderSettings messageEncoderSettings, Action <CreateCollectionOperation> createCollectionOperationConfigurator) { var mainOperation = new CreateCollectionOperation( collectionNamespace, messageEncoderSettings) { EncryptedFields = encryptedFields }; createCollectionOperationConfigurator?.Invoke(mainOperation); if (encryptedFields != null) { return(new CompositeWriteOperation <BsonDocument>( (CreateInnerCollectionOperation(EncryptedCollectionHelper.GetAdditionalCollectionName(encryptedFields, collectionNamespace, HelperCollectionForEncryption.Esc)), IsMainOperation: false), (CreateInnerCollectionOperation(EncryptedCollectionHelper.GetAdditionalCollectionName(encryptedFields, collectionNamespace, HelperCollectionForEncryption.Ecc)), IsMainOperation: false), (CreateInnerCollectionOperation(EncryptedCollectionHelper.GetAdditionalCollectionName(encryptedFields, collectionNamespace, HelperCollectionForEncryption.Ecos)), IsMainOperation: false), (mainOperation, IsMainOperation: true), (new CreateIndexesOperation(collectionNamespace, new[] { new CreateIndexRequest(EncryptedCollectionHelper.AdditionalCreateIndexDocument) }, messageEncoderSettings), IsMainOperation: false))); } else { return(mainOperation); } CreateCollectionOperation CreateInnerCollectionOperation(string collectionName) => new CreateCollectionOperation(new CollectionNamespace(collectionNamespace.DatabaseNamespace.DatabaseName, collectionName), messageEncoderSettings) { ClusteredIndex = new BsonDocument { { "key", new BsonDocument("_id", 1) }, { "unique", true } } }; }