Commit 777b7d32 authored by Diederik van der Boor's avatar Diederik van der Boor
Browse files

Add new S3 storage class, PrivateS3BotoStorage and PrivateEncryptedS3BotoStorage

This class can now be selected with the new `PRIVATE_STORAGE_CLASS` setting.
parent 3f00da53
from storages.backends.s3boto3 import S3Boto3Storage
from storages.utils import setting
class PrivateS3BotoStorage(S3Boto3Storage):
"""
Private storage bucket for S3
"""
# Since this class inherits the default storage, it shares many parameters with the base class.
# Thus, redefine the setting name that is used to read these values, so almost all settings are not shared.
access_key = setting('AWS_PRIVATE_S3_ACCESS_KEY_ID', setting('AWS_PRIVATE_ACCESS_KEY_ID', S3Boto3Storage.access_key))
secret_key = setting('AWS_PRIVATE_S3_SECRET_ACCESS_KEY', setting('AWS_PRIVATE_SECRET_ACCESS_KEY', S3Boto3Storage.secret_key))
file_overwrite = setting('AWS_PRIVATE_S3_FILE_OVERWRITE', False) # false, differ from base class
object_parameters = setting('AWS_PRIVATE_S3_OBJECT_PARAMETERS', {})
bucket_name = setting('AWS_PRIVATE_STORAGE_BUCKET_NAME', strict=True)
auto_create_bucket = setting('AWS_PRIVATE_AUTO_CREATE_BUCKET', False)
default_acl = setting('AWS_PRIVATE_DEFAULT_ACL', 'private') # differ from base class
bucket_acl = setting('AWS_PRIVATE_BUCKET_ACL', default_acl)
querystring_auth = setting('AWS_PRIVATE_QUERYSTRING_AUTH', True)
querystring_expire = setting('AWS_PRIVATE_QUERYSTRING_EXPIRE', 3600)
signature_version = setting('AWS_PRIVATE_S3_SIGNATURE_VERSION')
reduced_redundancy = setting('AWS_PRIVATE_REDUCED_REDUNDANCY', False)
location = setting('AWS_PRIVATE_LOCATION', '')
encryption = setting('AWS_PRIVATE_S3_ENCRYPTION', False)
custom_domain = setting('AWS_PRIVATE_S3_CUSTOM_DOMAIN')
addressing_style = setting('AWS_PRIVATE_S3_ADDRESSING_STYLE')
secure_urls = setting('AWS_PRIVATE_S3_SECURE_URLS', True)
file_name_charset = setting('AWS_PRIVATE_S3_FILE_NAME_CHARSET', 'utf-8')
gzip = setting('AWS_PRIVATE_IS_GZIPPED', S3Boto3Storage.gzip) # fallback to default
preload_metadata = setting('AWS_PRIVATE_PRELOAD_METADATA', False)
url_protocol = setting('AWS_PRIVATE_S3_URL_PROTOCOL', S3Boto3Storage.url_protocol) # fallback to default
endpoint_url = setting('AWS_PRIVATE_S3_ENDPOINT_URL', None)
region_name = setting('AWS_PRIVATE_S3_REGION_NAME', S3Boto3Storage.region_name) # fallback to default
use_ssl = setting('AWS_PRIVATE_S3_USE_SSL', True)
class PrivateEncryptedS3BotoStorage(PrivateS3BotoStorage):
"""
Enforced encryption for private storage on S3.
This is a convience option, it can also be implemented
through :class:`PrivateS3BotoStorage` by using the proper settings.
"""
encryption = True
signature_version = PrivateS3BotoStorage.signature_version or 's3v4'
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment