From 1d46c042d57af394e2239817d7209638871d25ab Mon Sep 17 00:00:00 2001 From: "Terence D. Honles" Date: Mon, 16 Oct 2023 18:35:19 +0200 Subject: [PATCH] [s3] fix disabling cloudfront signing with cloudfront_signer=None This change fixes disabling cloudfront signing by specifying "None" (or another falsy value). This allows multiple storage configs that are all distributed via cloudfront, but only some of the configs need to be signed. --- storages/backends/s3.py | 7 +++++-- tests/test_s3.py | 4 ++++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/storages/backends/s3.py b/storages/backends/s3.py index 204a6ee3..466489c8 100644 --- a/storages/backends/s3.py +++ b/storages/backends/s3.py @@ -299,7 +299,8 @@ class S3Storage(CompressStorageMixin, BaseStorage): config = None def __init__(self, **settings): - self.cloudfront_signer = settings.pop("cloudfront_signer", None) + omitted = object() + self.cloudfront_signer = settings.pop("cloudfront_signer", omitted) super().__init__(**settings) @@ -333,7 +334,7 @@ def __init__(self, **settings): if self.transfer_config is None: self.transfer_config = TransferConfig(use_threads=self.use_threads) - if not self.cloudfront_signer: + if self.cloudfront_signer is omitted: if self.cloudfront_key_id and self.cloudfront_key: self.cloudfront_signer = self.get_cloudfront_signer( self.cloudfront_key_id, self.cloudfront_key @@ -343,6 +344,8 @@ def __init__(self, **settings): "Both AWS_CLOUDFRONT_KEY_ID/cloudfront_key_id and " "AWS_CLOUDFRONT_KEY/cloudfront_key must be provided together." ) + else: + self.cloudfront_signer = None def get_cloudfront_signer(self, key_id, key): return _cloud_front_signer_from_pem(key_id, key) diff --git a/tests/test_s3.py b/tests/test_s3.py index e2340f70..36f75b32 100644 --- a/tests/test_s3.py +++ b/tests/test_s3.py @@ -890,6 +890,10 @@ def test_cloudfront_config(self): storage = s3.S3Storage() self.assertIsNotNone(storage.cloudfront_signer) + # allow disabling cloudfront signing + storage = s3.S3Storage(cloudfront_signer=None) + self.assertIsNone(storage.cloudfront_signer) + storage = s3.S3Storage(cloudfront_key_id=key_id, cloudfront_key=pem) self.assertIsNotNone(storage.cloudfront_signer)