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
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