def __init__(self, request=None, bucket=None, expire_after=None, bucket_prefix=None, prepend_hash=None, cloud_front_domain=None, cloud_front_key_file=None, cloud_front_key_string=None, cloud_front_key_id=None, **kwargs): super(CloudFrontS3Storage, self).__init__(request, bucket, expire_after, bucket_prefix, prepend_hash, **kwargs) self.cloud_front_domain = cloud_front_domain self.cloud_front_key_file = cloud_front_key_file self.cloud_front_key_id = cloud_front_key_id self.cloud_front_key_string = cloud_front_key_string self.distribution = Distribution()
class CloudFrontS3Storage(S3Storage): """ Storage backend that uses S3 and CloudFront """ def __init__(self, request=None, bucket=None, expire_after=None, bucket_prefix=None, prepend_hash=None, cloud_front_domain=None, cloud_front_key_file=None, cloud_front_key_string=None, cloud_front_key_id=None, **kwargs): super(CloudFrontS3Storage, self).__init__(request, bucket, expire_after, bucket_prefix, prepend_hash, **kwargs) self.cloud_front_domain = cloud_front_domain self.cloud_front_key_file = cloud_front_key_file self.cloud_front_key_id = cloud_front_key_id self.cloud_front_key_string = cloud_front_key_string self.distribution = Distribution() @classmethod def configure(cls, settings): kwargs = super(CloudFrontS3Storage, cls).configure(settings) kwargs['cloud_front_domain'] = getdefaults( settings, 'storage.cloud_front_domain', 'aws.cloud_front_domain', '') kwargs['cloud_front_key_file'] = getdefaults( settings, 'storage.cloud_front_key_file', 'aws.cloud_front_key_file', None) kwargs['cloud_front_key_string'] = getdefaults( settings, 'storage.cloud_front_key_string', 'aws.cloud_front_key_string', None) kwargs['cloud_front_key_id'] = getdefaults( settings, 'storage.cloud_front_key_id', 'aws.cloud_front_key_id', '') return kwargs def _generate_url(self, package): """ Get the fully-qualified CloudFront path for a package """ path = self.calculate_path(package) url = self.cloud_front_domain + '/' + quote(path) if self.cloud_front_key_file or self.cloud_front_key_string: expire_time = int(time.time() + self.expire_after) url = self.distribution.create_signed_url( url, self.cloud_front_key_id, expire_time, private_key_file=self.cloud_front_key_file, private_key_string=self.cloud_front_key_string) return url
class CloudFrontS3Storage(S3Storage): """ Storage backend that uses S3 and CloudFront """ def __init__(self, request=None, bucket=None, expire_after=None, bucket_prefix=None, prepend_hash=None, cloud_front_domain=None, cloud_front_key_file=None, cloud_front_key_string=None, cloud_front_key_id=None, **kwargs): super(CloudFrontS3Storage, self).__init__(request, bucket, expire_after, bucket_prefix, prepend_hash, **kwargs) self.cloud_front_domain = cloud_front_domain self.cloud_front_key_file = cloud_front_key_file self.cloud_front_key_id = cloud_front_key_id self.cloud_front_key_string = cloud_front_key_string self.distribution = Distribution() @classmethod def configure(cls, settings): kwargs = super(CloudFrontS3Storage, cls).configure(settings) kwargs['cloud_front_domain'] = getdefaults( settings, 'storage.cloud_front_domain', 'aws.cloud_front_domain', '') kwargs['cloud_front_key_file'] = getdefaults( settings, 'storage.cloud_front_key_file', 'aws.cloud_front_key_file', None) kwargs['cloud_front_key_string'] = getdefaults( settings, 'storage.cloud_front_key_string', 'aws.cloud_front_key_string', None) kwargs['cloud_front_key_id'] = getdefaults( settings, 'storage.cloud_front_key_id', 'aws.cloud_front_key_id', '') return kwargs def get_url(self, package): """ Get the fully-qualified CloudFront path for a package """ path = self.calculate_path(package) url = self.cloud_front_domain + '/' + quote(path) if self.cloud_front_key_file or self.cloud_front_key_string: expire_time = int(time.time() + self.expire_after) url = self.distribution.create_signed_url( url, self.cloud_front_key_id, expire_time, private_key_file=self.cloud_front_key_file, private_key_string=self.cloud_front_key_string) return url