コード例 #1
0
def s3_upload_tmp_file(s3_bucket, tmp_file, filename,
                       headers, directory='', file_type_check=True,
                       return_key_only=False, conn_name=DEFAULT_CONN,
                       with_encryption=False,
                       upload_root_dir=None):
    """
    Upload the content of a temporary file to s3 and delete the file
    """
    try:
        if file_type_check:
            check_type(tmp_file.name)
        content =  tmp_file.read()
        if with_encryption:
            secret = app.config.get('FILE_ENCRYPTION_KEY')
            cipher = AESWithGCM(secret)
            content = cipher.encrypt(content)
        fp = BytesIO(content)
        url = s3_upload_file(s3_bucket, fp, filename, headers, upload_root_dir,
                             directory, return_key_only, conn_name)
    finally:
        os.unlink(tmp_file.name)
    return url
コード例 #2
0
    def test_file_user(self, has_lock, create_connection):
        has_lock.return_value = True
        admin, owner, user = UserFactory.create_batch(3)
        project = ProjectFactory.create()
        url = '/fileproxy/encrypted/s3/test/%s/file.pdf' % project.id
        task = TaskFactory.create(project=project, info={'url': url})

        signature = signer.dumps({'task_id': task.id})
        req_url = '%s?api_key=%s&task-signature=%s' % (url, user.api_key,
                                                       signature)

        encryption_key = 'testkey'
        aes = AESWithGCM(encryption_key)
        key = self.get_key(create_connection)
        key.get_contents_as_string.return_value = aes.encrypt('the content')

        with patch.dict(self.flask_app.config, {
                'FILE_ENCRYPTION_KEY': encryption_key,
                'S3_REQUEST_BUCKET': 'test'
        }):
            res = self.app.get(req_url, follow_redirects=True)
            assert res.status_code == 200, res.status_code
            assert res.data == 'the content', res.data