diff --git a/opentech/storage_backends.py b/opentech/storage_backends.py index ead02356692bd395760de4ffc9a9190d80b347eb..2acf70c958d34c4c682f33f0e22b363f285ff525 100644 --- a/opentech/storage_backends.py +++ b/opentech/storage_backends.py @@ -1,4 +1,7 @@ +from urllib import parse + from django.conf import settings +from django.utils.encoding import filepath_to_uri from storages.backends.s3boto3 import S3Boto3Storage @@ -25,3 +28,15 @@ class PrivateMediaStorage(S3Boto3Storage): file_overwrite = False querystring_auth = True url_protocol = 'https:' + + def url(self, name, parameters=None, expire=None): + url = super().url(name, parameters, expire) + + if hasattr(settings, 'AWS_PRIVATE_CUSTOM_DOMAIN'): + # Django storage doesn't handle custom domains with auth strings + custom_domain = settings.AWS_PRIVATE_CUSTOM_DOMAIN + parts = list(url.split(url)) + parts[0:3] = self.url_protocol, custom_domain, filepath_to_uri(name) + return parse.urlunsplit(parts) + + return url