Skip to content

Commit f7846a6

Browse files
committed
Misc updates
- Remove extra check for auto_encryption_opts - Earlier check should suffice - Remove Encrypted* class name prefix - We know these are the QE tests - Move create data key back to _get_encrypted_fields - Remove getattr for client_encryption
1 parent a0cd197 commit f7846a6

File tree

2 files changed

+19
-50
lines changed

2 files changed

+19
-50
lines changed

django_mongodb_backend/schema.py

Lines changed: 13 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -488,36 +488,6 @@ def _create_collection(self, model):
488488
# Unencrypted path
489489
db.create_collection(db_table)
490490

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-
521491
def _get_encrypted_fields(
522492
self, model, create_data_keys=False, key_alt_name=None, path_prefix=None
523493
):
@@ -532,16 +502,14 @@ def _get_encrypted_fields(
532502
path_prefix = path_prefix or ""
533503

534504
options = client._options
535-
auto_encryption_opts = getattr(options, "auto_encryption_opts", None)
505+
auto_encryption_opts = options.auto_encryption_opts
536506

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]
541509

542510
kms_provider = router.kms_provider(model)
543511
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
545513

546514
field_list = []
547515

@@ -564,14 +532,15 @@ def _get_encrypted_fields(
564532

565533
if getattr(field, "encrypted", False):
566534
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-
)
535+
if create_data_keys:
536+
data_key = client_encryption.create_data_key(
537+
kms_provider=kms_provider,
538+
master_key=master_key,
539+
key_alt_names=[new_key_alt_name],
540+
)
541+
else:
542+
key = key_vault_collection.find_one({"keyAltNames": new_key_alt_name})
543+
data_key = key["_id"]
575544
field_dict = {
576545
"bsonType": bson_type,
577546
"path": path,

tests/encryption_/test_fields.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,22 +32,22 @@
3232
from .test_base import EncryptionTestCase
3333

3434

35-
class EncryptedEmbeddedModelTests(EncryptionTestCase):
35+
class EmbeddedModelTests(EncryptionTestCase):
3636
def setUp(self):
3737
self.billing = Billing(cc_type="Visa", cc_number="4111111111111111")
3838
self.patient_record = PatientRecord(ssn="123-45-6789", billing=self.billing)
3939
self.patient = Patient.objects.create(
4040
patient_name="John Doe", patient_id=123456789, patient_record=self.patient_record
4141
)
4242

43-
def test_patient(self):
43+
def test_object(self):
4444
patient = Patient.objects.get(id=self.patient.id)
4545
self.assertEqual(patient.patient_record.ssn, "123-45-6789")
4646
self.assertEqual(patient.patient_record.billing.cc_type, "Visa")
4747
self.assertEqual(patient.patient_record.billing.cc_number, "4111111111111111")
4848

4949

50-
class EncryptedEmbeddedModelArrayTests(EncryptionTestCase):
50+
class EmbeddedModelArrayTests(EncryptionTestCase):
5151
def setUp(self):
5252
self.actor1 = Actor(name="Actor One")
5353
self.actor2 = Actor(name="Actor Two")
@@ -56,13 +56,13 @@ def setUp(self):
5656
cast=[self.actor1, self.actor2],
5757
)
5858

59-
def test_movie_actors(self):
59+
def test_array(self):
6060
self.assertEqual(len(self.movie.cast), 2)
6161
self.assertEqual(self.movie.cast[0].name, "Actor One")
6262
self.assertEqual(self.movie.cast[1].name, "Actor Two")
6363

6464

65-
class EncryptedFieldTests(EncryptionTestCase):
65+
class FieldTests(EncryptionTestCase):
6666
def assertEquality(self, model_cls, val):
6767
model_cls.objects.create(value=val)
6868
fetched = model_cls.objects.get(value=val)
@@ -162,7 +162,7 @@ def test_time(self):
162162
)
163163

164164

165-
class EncryptedFieldMixinTests(EncryptionTestCase):
165+
class FieldMixinTests(EncryptionTestCase):
166166
def test_null_true_raises_error(self):
167167
with self.assertRaisesMessage(
168168
ValueError, "'null=True' is not supported for encrypted fields."

0 commit comments

Comments
 (0)