8
8
9
9
from django_mongodb_backend .indexes import SearchIndex
10
10
11
- from .fields import EmbeddedModelArrayField , EmbeddedModelField
11
+ from .fields import EmbeddedModelField
12
12
from .gis .schema import GISSchemaEditor
13
13
from .query import wrap_database_errors
14
14
from .utils import OperationCollector , model_has_encrypted_fields
@@ -488,36 +488,6 @@ def _create_collection(self, model):
488
488
# Unencrypted path
489
489
db .create_collection (db_table )
490
490
491
- def _get_data_key (
492
- self ,
493
- client_encryption ,
494
- key_vault_collection ,
495
- create_data_keys ,
496
- kms_provider ,
497
- master_key ,
498
- key_alt_name ,
499
- ):
500
- """Return an existing or newly-created data key ID for a field."""
501
- if create_data_keys :
502
- if not client_encryption :
503
- raise ImproperlyConfigured ("client_encryption is not configured." )
504
- return client_encryption .create_data_key (
505
- kms_provider = kms_provider ,
506
- master_key = master_key ,
507
- key_alt_names = [key_alt_name ],
508
- )
509
- if key_vault_collection is None :
510
- raise ImproperlyConfigured (
511
- f"Encrypted field { key_alt_name } detected but no key vault configured"
512
- )
513
- key = key_vault_collection .find_one ({"keyAltNames" : key_alt_name })
514
- if not key :
515
- raise ValueError (
516
- f"No key found in keyvault for keyAltName={ key_alt_name } . "
517
- "Run with '--create-data-keys' to create missing keys."
518
- )
519
- return key ["_id" ]
520
-
521
491
def _get_encrypted_fields (
522
492
self , model , create_data_keys = False , key_alt_name = None , path_prefix = None
523
493
):
@@ -532,26 +502,22 @@ def _get_encrypted_fields(
532
502
path_prefix = path_prefix or ""
533
503
534
504
options = client ._options
535
- auto_encryption_opts = getattr ( options , " auto_encryption_opts" , None )
505
+ auto_encryption_opts = options . auto_encryption_opts
536
506
537
- key_vault_collection = None
538
- if auto_encryption_opts :
539
- key_vault_db , key_vault_coll = auto_encryption_opts ._key_vault_namespace .split ("." , 1 )
540
- key_vault_collection = client [key_vault_db ][key_vault_coll ]
507
+ key_vault_db , key_vault_coll = auto_encryption_opts ._key_vault_namespace .split ("." , 1 )
508
+ key_vault_collection = client [key_vault_db ][key_vault_coll ]
541
509
542
510
kms_provider = router .kms_provider (model )
543
511
master_key = connection .settings_dict .get ("KMS_CREDENTIALS" , {}).get (kms_provider )
544
- client_encryption = getattr ( self .connection , " client_encryption" , None )
512
+ client_encryption = self .connection . client_encryption
545
513
546
514
field_list = []
547
515
548
516
for field in fields :
549
517
new_key_alt_name = f"{ key_alt_name } .{ field .column } "
550
518
path = f"{ path_prefix } .{ field .column } " if path_prefix else field .column
551
519
552
- if isinstance (field , (EmbeddedModelField , EmbeddedModelArrayField )) and not getattr (
553
- field , "encrypted" , False
554
- ):
520
+ if isinstance (field , EmbeddedModelField ) and not getattr (field , "encrypted" , False ):
555
521
embedded_result = self ._get_encrypted_fields (
556
522
field .embedded_model ,
557
523
create_data_keys = create_data_keys ,
@@ -564,14 +530,15 @@ def _get_encrypted_fields(
564
530
565
531
if getattr (field , "encrypted" , False ):
566
532
bson_type = field .db_type (connection )
567
- data_key = self ._get_data_key (
568
- client_encryption ,
569
- key_vault_collection ,
570
- create_data_keys ,
571
- kms_provider ,
572
- master_key ,
573
- new_key_alt_name ,
574
- )
533
+ if create_data_keys :
534
+ data_key = client_encryption .create_data_key (
535
+ kms_provider = kms_provider ,
536
+ master_key = master_key ,
537
+ key_alt_names = [new_key_alt_name ],
538
+ )
539
+ else :
540
+ key = key_vault_collection .find_one ({"keyAltNames" : new_key_alt_name })
541
+ data_key = key ["_id" ]
575
542
field_dict = {
576
543
"bsonType" : bson_type ,
577
544
"path" : path ,
0 commit comments