Ejemplo n.º 1
0
    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()
Ejemplo n.º 2
0
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
Ejemplo n.º 3
0
    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()
Ejemplo n.º 4
0
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