Exemplo n.º 1
0
    def test_get_presigned_url(self, get_client):
        client = Mock()
        get_client.return_value = client

        test_url = "http://s3/run_uid/file.txt"
        expected_key = "run_uid/file.txt"
        expected_bucket = 'test_bucket'
        with self.settings(AWS_BUCKET_NAME=expected_bucket):
            get_presigned_url(download_url=test_url)
        client.generate_presigned_url.assert_called_with('get_object',
                                                         Params={
                                                             'Bucket':
                                                             expected_bucket,
                                                             'Key':
                                                             expected_key
                                                         },
                                                         ExpiresIn=300)

        with self.settings(AWS_BUCKET_NAME=expected_bucket):
            get_presigned_url(download_url=test_url, client=client)
        client.generate_presigned_url.assert_called_with('get_object',
                                                         Params={
                                                             'Bucket':
                                                             expected_bucket,
                                                             'Key':
                                                             expected_key
                                                         },
                                                         ExpiresIn=300)
Exemplo n.º 2
0
def download(request):
    """
    Logs and redirects a dataset download request
    :return: A redirect to the direct download URL provided in the URL query string
    """

    current_user = request.user

    if current_user is None:
        return HttpResponse(status=401)

    download_uid = request.GET.get("uid")
    try:
        downloadable = FileProducingTaskResult.objects.select_related(
            "export_task__export_provider_task__provider", "export_task__export_provider_task__run"
        ).get(uid=download_uid)

        if not downloadable.user_can_download(current_user):
            return HttpResponse(
                status=401, content=f"The user: {current_user.username} does not have permission to download it."
            )
    except FileProducingTaskResult.DoesNotExist:
        return HttpResponse(status=400, content="Download not found for requested id value.")

    user_download = UserDownload.objects.create(user=current_user, downloadable=downloadable)
    user_download.save()

    if getattr(settings, "USE_S3", False):
        url = get_presigned_url(downloadable.download_url)
    else:
        url = request.build_absolute_uri(downloadable.download_url)
    logger.info("Redirecting to {0}".format(url))
    return redirect(url)
Exemplo n.º 3
0
def download(request):
    """
    Logs and redirects a dataset download request
    :return: A redirect to the direct download URL provided in the URL query string
    """
    download_uid = request.GET.get('uid')
    try:
        downloadable = FileProducingTaskResult.objects.get(uid=download_uid)
    except FileProducingTaskResult.DoesNotExist:
        return HttpResponse(status=400, content="Download not found for requested id value.")

    current_user = request.user
    if current_user is None:
        return HttpResponse(status=401)
    user = User.objects.get(username=current_user)

    user_download = UserDownload.objects.create(user=user, downloadable=downloadable)
    user_download.save()

    if getattr(settings, 'USE_S3', False):
        url = get_presigned_url(downloadable.download_url)
    else:
        url = request.build_absolute_uri(downloadable.download_url)
    logger.info("Redirecting to {0}".format(url))
    return redirect(url)
Exemplo n.º 4
0
def download(request):
    """
    Logs and redirects a dataset download request
    :return: A redirect to the direct download URL provided in the URL query string
    """
    download_uid = request.GET.get('uid')
    try:
        downloadable = FileProducingTaskResult.objects.get(uid=download_uid)
    except FileProducingTaskResult.DoesNotExist:
        return HttpResponse(
            status=400, content="Download not found for requested id value.")

    current_user = request.user
    if current_user is None:
        return HttpResponse(status=401)
    user = User.objects.get(username=current_user)

    user_download = UserDownload.objects.create(user=user,
                                                downloadable=downloadable)
    user_download.save()

    if getattr(settings, 'USE_S3', False):
        url = get_presigned_url(downloadable.download_url)
    else:
        url = request.build_absolute_uri(downloadable.download_url)
    logger.info("Redirecting to {0}".format(url))
    return redirect(url)
Exemplo n.º 5
0
    def test_get_presigned_url(self, get_client):
        client = Mock()
        get_client.return_value = client

        test_url = "http://s3/run_uid/file.txt"
        expected_key = "run_uid/file.txt"
        expected_bucket = 'test_bucket'
        with self.settings(AWS_BUCKET_NAME=expected_bucket):
            get_presigned_url(download_url=test_url)
        client.generate_presigned_url.assert_called_with('get_object',
                                                         Params={'Bucket': expected_bucket, 'Key': expected_key},
                                                         ExpiresIn=300)

        with self.settings(AWS_BUCKET_NAME=expected_bucket):
            get_presigned_url(download_url=test_url, client=client)
        client.generate_presigned_url.assert_called_with('get_object',
                                                         Params={'Bucket': expected_bucket, 'Key': expected_key},
                                                         ExpiresIn=300)
Exemplo n.º 6
0
    def get_zipfile_url(self, obj):
        request = self.context['request']
        if not obj.zipfile_url:
            return None

        if obj.zipfile_url.startswith('http'):
            if getattr(settings, 'USE_S3', False):
                return get_presigned_url(download_url=obj.zipfile_url)
            else:
                return obj.zipfile_url

        # get full URL path from current request
        uri = request.build_absolute_uri()
        uri = list(urlparse(uri))
        # modify path, query parmas, and fragment on the URI to match zipfile URL
        path = os.path.join(settings.EXPORT_MEDIA_ROOT, obj.zipfile_url)
        uri[2] = path  # path
        uri[4] = None  # fragment
        uri[5] = None  # query
        return urlunparse(uri)
Exemplo n.º 7
0
 def get_url(self, obj):
     request = self.context['request']
     if getattr(settings, 'USE_S3', False):
         return get_presigned_url(download_url=obj.download_url)
     else:
         return request.build_absolute_uri(obj.download_url)