diff --git a/README.md b/README.md index 0b32068..6dafe52 100644 --- a/README.md +++ b/README.md @@ -110,6 +110,7 @@ The `file` parameter is the base64 encoded file which will be cleaned. **Example Response:** ```json { + "inactive_after_sec": 120, "output_filename": "fancy.cleaned.jpg", "mime": "image/jpg", "key": "81a541f9ebc0233d419d25ed39908b16f82be26a783f32d56c381559e84e6161", @@ -175,6 +176,7 @@ The `key` parameter is the key from a previously uploaded file. **Example Response:** ```json { + "inactive_after_sec": 120, "output_filename": "files.2cd225d5-2d75-44a2-9f26-e120a87e4279.cleaned.zip", "mime": "application/zip", "key": "5ee4cf8821226340d3d5ed16bd2e1b435234a9ad218f282b489a85d116e7a4c4", diff --git a/matweb/file_removal_scheduler.py b/matweb/file_removal_scheduler.py index 2ce7912..59bb9ca 100644 --- a/matweb/file_removal_scheduler.py +++ b/matweb/file_removal_scheduler.py @@ -4,6 +4,8 @@ import sys import os import random +from matweb import utils + def run_file_removal_job(upload_folder_path): if random.randint(0, 10) == 0: @@ -18,7 +20,7 @@ def delete_file_when_too_old(filepath): last_time = time.time() - file_mod_time # if file is older than our configured max timeframe, delete it - if last_time > int(os.environ.get('MAT2_MAX_FILE_AGE_FOR_REMOVAL', 15 * 60)): + if last_time > utils.get_file_removal_max_age_sec(): try: os.remove(filepath) except OSError: diff --git a/matweb/rest_api.py b/matweb/rest_api.py index a07d2d2..f893fca 100644 --- a/matweb/rest_api.py +++ b/matweb/rest_api.py @@ -48,6 +48,7 @@ class APIUpload(Resource): key, secret, meta_after, output_filename = utils.cleanup(parser, filepath, self.upload_folder) return utils.return_file_created_response( + utils.get_file_removal_max_age_sec(), output_filename, mime, key, @@ -133,6 +134,7 @@ class APIBulkDownloadCreator(Resource): abort(500, message='Unable to clean %s' % mime) key, secret, meta_after, output_filename = utils.cleanup(parser, zip_path, self.upload_folder) return { + 'inactive_after_sec': utils.get_file_removal_max_age_sec(), 'output_filename': output_filename, 'mime': mime, 'key': key, diff --git a/matweb/utils.py b/matweb/utils.py index 20c213d..915d735 100644 --- a/matweb/utils.py +++ b/matweb/utils.py @@ -35,6 +35,7 @@ def check_upload_folder(upload_folder): def return_file_created_response( + inactive_after_sec: int, output_filename: str, mime: str, key: str, @@ -44,6 +45,7 @@ def return_file_created_response( download_link: str ) -> dict: return { + 'inactive_after_sec': inactive_after_sec, 'output_filename': output_filename, 'mime': mime, 'key': key, @@ -106,3 +108,7 @@ def is_valid_api_download_file(filename: str, key: str, secret: str, upload_fold if hmac.compare_digest(hash_file(complete_path, secret), key) is False: abort(400, message='The file hash does not match') return complete_path, filepath + + +def get_file_removal_max_age_sec() -> int: + return int(os.environ.get('MAT2_MAX_FILE_AGE_FOR_REMOVAL', 15 * 60)) diff --git a/test/test.py b/test/test.py index 6734dcf..97e7567 100644 --- a/test/test.py +++ b/test/test.py @@ -170,7 +170,7 @@ class Mat2WebTestCase(TestCase): request = app.get(self.get_context_variable('download_uri')) self.assertEqual(302, request.status_code) - os.environ['MAT2_MAX_FILE_AGE_FOR_REMOVAL'] = '9999' + os.environ['MAT2_MAX_FILE_AGE_FOR_REMOVAL'] = str(15*60) def test_info_page(self): rv = self.client.get('/info') @@ -191,7 +191,6 @@ class Mat2WebTestCase(TestCase): self.assertIn(b'Invalid Filename', rv.data) - if __name__ == '__main__': unittest.main() diff --git a/test/test_api.py b/test/test_api.py index 63955d0..1a50aa6 100644 --- a/test/test_api.py +++ b/test/test_api.py @@ -42,7 +42,7 @@ class Mat2APITestCase(unittest.TestCase): self.assertEqual(request.status_code, 200) data = request.get_json() - self.assertEqual(data['output_filename'], 'test_name.cleaned.jpg') + self.assertEqual(data['inactive_after_sec'], 15 * 60) self.assertEqual(data['output_filename'], 'test_name.cleaned.jpg') self.assertEqual(data['mime'], 'image/jpeg') self.assertEqual(len(data['secret']), 64) @@ -237,6 +237,7 @@ class Mat2APITestCase(unittest.TestCase): self.assertIn('files.', response['output_filename']) self.assertIn('cleaned.zip', response['output_filename']) + self.assertEquals(15 * 60, response['inactive_after_sec']) self.assertIn(response['mime'], 'application/zip') self.assertEqual(response['meta_after'], {}) @@ -387,7 +388,7 @@ class Mat2APITestCase(unittest.TestCase): randint_mock.return_value = 0 self.upload_download_test_jpg_and_assert_response_code(app, 404) - os.environ['MAT2_MAX_FILE_AGE_FOR_REMOVAL'] = '9999' + os.environ['MAT2_MAX_FILE_AGE_FOR_REMOVAL'] = str(15 * 60) def upload_download_test_jpg_and_assert_response_code(self, app, code): request = app.post('/api/upload', diff --git a/test/test_file_removal_scheduler.py b/test/test_file_removal_scheduler.py index 1210cb2..563fc73 100644 --- a/test/test_file_removal_scheduler.py +++ b/test/test_file_removal_scheduler.py @@ -42,6 +42,7 @@ class Mat2WebTestCase(unittest.TestCase): randint_mock.return_value = 0 file_removal_scheduler.run_file_removal_job(self.app.config['UPLOAD_FOLDER']) self.assertTrue(path.exists(path.join(self.upload_folder, filename))) + environ['MAT2_MAX_FILE_AGE_FOR_REMOVAL'] = str(15 * 60) def tearDown(self): shutil.rmtree(self.upload_folder)