assemblyline-core 4.5.1.dev157__tar.gz → 4.5.1.dev159__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of assemblyline-core might be problematic. Click here for more details.

Files changed (88) hide show
  1. {assemblyline-core-4.5.1.dev157 → assemblyline-core-4.5.1.dev159}/PKG-INFO +1 -1
  2. assemblyline-core-4.5.1.dev159/assemblyline_core/VERSION +1 -0
  3. {assemblyline-core-4.5.1.dev157 → assemblyline-core-4.5.1.dev159}/assemblyline_core/dispatching/client.py +11 -0
  4. {assemblyline-core-4.5.1.dev157 → assemblyline-core-4.5.1.dev159}/assemblyline_core.egg-info/PKG-INFO +1 -1
  5. {assemblyline-core-4.5.1.dev157 → assemblyline-core-4.5.1.dev159}/test/test_dispatcher.py +39 -5
  6. assemblyline-core-4.5.1.dev157/assemblyline_core/VERSION +0 -1
  7. {assemblyline-core-4.5.1.dev157 → assemblyline-core-4.5.1.dev159}/LICENCE.md +0 -0
  8. {assemblyline-core-4.5.1.dev157 → assemblyline-core-4.5.1.dev159}/README.md +0 -0
  9. {assemblyline-core-4.5.1.dev157 → assemblyline-core-4.5.1.dev159}/assemblyline_core/__init__.py +0 -0
  10. {assemblyline-core-4.5.1.dev157 → assemblyline-core-4.5.1.dev159}/assemblyline_core/alerter/__init__.py +0 -0
  11. {assemblyline-core-4.5.1.dev157 → assemblyline-core-4.5.1.dev159}/assemblyline_core/alerter/processing.py +0 -0
  12. {assemblyline-core-4.5.1.dev157 → assemblyline-core-4.5.1.dev159}/assemblyline_core/alerter/run_alerter.py +0 -0
  13. {assemblyline-core-4.5.1.dev157 → assemblyline-core-4.5.1.dev159}/assemblyline_core/archiver/__init__.py +0 -0
  14. {assemblyline-core-4.5.1.dev157 → assemblyline-core-4.5.1.dev159}/assemblyline_core/archiver/run_archiver.py +0 -0
  15. {assemblyline-core-4.5.1.dev157 → assemblyline-core-4.5.1.dev159}/assemblyline_core/badlist_client.py +0 -0
  16. {assemblyline-core-4.5.1.dev157 → assemblyline-core-4.5.1.dev159}/assemblyline_core/dispatching/__init__.py +0 -0
  17. {assemblyline-core-4.5.1.dev157 → assemblyline-core-4.5.1.dev159}/assemblyline_core/dispatching/__main__.py +0 -0
  18. {assemblyline-core-4.5.1.dev157 → assemblyline-core-4.5.1.dev159}/assemblyline_core/dispatching/dispatcher.py +0 -0
  19. {assemblyline-core-4.5.1.dev157 → assemblyline-core-4.5.1.dev159}/assemblyline_core/dispatching/schedules.py +0 -0
  20. {assemblyline-core-4.5.1.dev157 → assemblyline-core-4.5.1.dev159}/assemblyline_core/dispatching/timeout.py +0 -0
  21. {assemblyline-core-4.5.1.dev157 → assemblyline-core-4.5.1.dev159}/assemblyline_core/expiry/__init__.py +0 -0
  22. {assemblyline-core-4.5.1.dev157 → assemblyline-core-4.5.1.dev159}/assemblyline_core/expiry/run_expiry.py +0 -0
  23. {assemblyline-core-4.5.1.dev157 → assemblyline-core-4.5.1.dev159}/assemblyline_core/ingester/__init__.py +0 -0
  24. {assemblyline-core-4.5.1.dev157 → assemblyline-core-4.5.1.dev159}/assemblyline_core/ingester/__main__.py +0 -0
  25. {assemblyline-core-4.5.1.dev157 → assemblyline-core-4.5.1.dev159}/assemblyline_core/ingester/constants.py +0 -0
  26. {assemblyline-core-4.5.1.dev157 → assemblyline-core-4.5.1.dev159}/assemblyline_core/ingester/ingester.py +0 -0
  27. {assemblyline-core-4.5.1.dev157 → assemblyline-core-4.5.1.dev159}/assemblyline_core/metrics/__init__.py +0 -0
  28. {assemblyline-core-4.5.1.dev157 → assemblyline-core-4.5.1.dev159}/assemblyline_core/metrics/es_metrics.py +0 -0
  29. {assemblyline-core-4.5.1.dev157 → assemblyline-core-4.5.1.dev159}/assemblyline_core/metrics/heartbeat_formatter.py +0 -0
  30. {assemblyline-core-4.5.1.dev157 → assemblyline-core-4.5.1.dev159}/assemblyline_core/metrics/helper.py +0 -0
  31. {assemblyline-core-4.5.1.dev157 → assemblyline-core-4.5.1.dev159}/assemblyline_core/metrics/metrics_server.py +0 -0
  32. {assemblyline-core-4.5.1.dev157 → assemblyline-core-4.5.1.dev159}/assemblyline_core/metrics/run_heartbeat_manager.py +0 -0
  33. {assemblyline-core-4.5.1.dev157 → assemblyline-core-4.5.1.dev159}/assemblyline_core/metrics/run_metrics_aggregator.py +0 -0
  34. {assemblyline-core-4.5.1.dev157 → assemblyline-core-4.5.1.dev159}/assemblyline_core/metrics/run_statistics_aggregator.py +0 -0
  35. {assemblyline-core-4.5.1.dev157 → assemblyline-core-4.5.1.dev159}/assemblyline_core/plumber/__init__.py +0 -0
  36. {assemblyline-core-4.5.1.dev157 → assemblyline-core-4.5.1.dev159}/assemblyline_core/plumber/run_plumber.py +0 -0
  37. {assemblyline-core-4.5.1.dev157 → assemblyline-core-4.5.1.dev159}/assemblyline_core/replay/__init__.py +0 -0
  38. {assemblyline-core-4.5.1.dev157 → assemblyline-core-4.5.1.dev159}/assemblyline_core/replay/client.py +0 -0
  39. {assemblyline-core-4.5.1.dev157 → assemblyline-core-4.5.1.dev159}/assemblyline_core/replay/creator/__init__.py +0 -0
  40. {assemblyline-core-4.5.1.dev157 → assemblyline-core-4.5.1.dev159}/assemblyline_core/replay/creator/run.py +0 -0
  41. {assemblyline-core-4.5.1.dev157 → assemblyline-core-4.5.1.dev159}/assemblyline_core/replay/creator/run_worker.py +0 -0
  42. {assemblyline-core-4.5.1.dev157 → assemblyline-core-4.5.1.dev159}/assemblyline_core/replay/loader/__init__.py +0 -0
  43. {assemblyline-core-4.5.1.dev157 → assemblyline-core-4.5.1.dev159}/assemblyline_core/replay/loader/run.py +0 -0
  44. {assemblyline-core-4.5.1.dev157 → assemblyline-core-4.5.1.dev159}/assemblyline_core/replay/loader/run_worker.py +0 -0
  45. {assemblyline-core-4.5.1.dev157 → assemblyline-core-4.5.1.dev159}/assemblyline_core/replay/replay.py +0 -0
  46. {assemblyline-core-4.5.1.dev157 → assemblyline-core-4.5.1.dev159}/assemblyline_core/safelist_client.py +0 -0
  47. {assemblyline-core-4.5.1.dev157 → assemblyline-core-4.5.1.dev159}/assemblyline_core/scaler/__init__.py +0 -0
  48. {assemblyline-core-4.5.1.dev157 → assemblyline-core-4.5.1.dev159}/assemblyline_core/scaler/collection.py +0 -0
  49. {assemblyline-core-4.5.1.dev157 → assemblyline-core-4.5.1.dev159}/assemblyline_core/scaler/controllers/__init__.py +0 -0
  50. {assemblyline-core-4.5.1.dev157 → assemblyline-core-4.5.1.dev159}/assemblyline_core/scaler/controllers/docker_ctl.py +0 -0
  51. {assemblyline-core-4.5.1.dev157 → assemblyline-core-4.5.1.dev159}/assemblyline_core/scaler/controllers/interface.py +0 -0
  52. {assemblyline-core-4.5.1.dev157 → assemblyline-core-4.5.1.dev159}/assemblyline_core/scaler/controllers/kubernetes_ctl.py +0 -0
  53. {assemblyline-core-4.5.1.dev157 → assemblyline-core-4.5.1.dev159}/assemblyline_core/scaler/run_scaler.py +0 -0
  54. {assemblyline-core-4.5.1.dev157 → assemblyline-core-4.5.1.dev159}/assemblyline_core/scaler/scaler_server.py +0 -0
  55. {assemblyline-core-4.5.1.dev157 → assemblyline-core-4.5.1.dev159}/assemblyline_core/server_base.py +0 -0
  56. {assemblyline-core-4.5.1.dev157 → assemblyline-core-4.5.1.dev159}/assemblyline_core/signature_client.py +0 -0
  57. {assemblyline-core-4.5.1.dev157 → assemblyline-core-4.5.1.dev159}/assemblyline_core/submission_client.py +0 -0
  58. {assemblyline-core-4.5.1.dev157 → assemblyline-core-4.5.1.dev159}/assemblyline_core/tasking_client.py +0 -0
  59. {assemblyline-core-4.5.1.dev157 → assemblyline-core-4.5.1.dev159}/assemblyline_core/updater/__init__.py +0 -0
  60. {assemblyline-core-4.5.1.dev157 → assemblyline-core-4.5.1.dev159}/assemblyline_core/updater/helper.py +0 -0
  61. {assemblyline-core-4.5.1.dev157 → assemblyline-core-4.5.1.dev159}/assemblyline_core/updater/run_updater.py +0 -0
  62. {assemblyline-core-4.5.1.dev157 → assemblyline-core-4.5.1.dev159}/assemblyline_core/vacuum/__init__.py +0 -0
  63. {assemblyline-core-4.5.1.dev157 → assemblyline-core-4.5.1.dev159}/assemblyline_core/vacuum/crawler.py +0 -0
  64. {assemblyline-core-4.5.1.dev157 → assemblyline-core-4.5.1.dev159}/assemblyline_core/vacuum/department_map.py +0 -0
  65. {assemblyline-core-4.5.1.dev157 → assemblyline-core-4.5.1.dev159}/assemblyline_core/vacuum/safelist.py +0 -0
  66. {assemblyline-core-4.5.1.dev157 → assemblyline-core-4.5.1.dev159}/assemblyline_core/vacuum/stream_map.py +0 -0
  67. {assemblyline-core-4.5.1.dev157 → assemblyline-core-4.5.1.dev159}/assemblyline_core/vacuum/worker.py +0 -0
  68. {assemblyline-core-4.5.1.dev157 → assemblyline-core-4.5.1.dev159}/assemblyline_core/workflow/__init__.py +0 -0
  69. {assemblyline-core-4.5.1.dev157 → assemblyline-core-4.5.1.dev159}/assemblyline_core/workflow/run_workflow.py +0 -0
  70. {assemblyline-core-4.5.1.dev157 → assemblyline-core-4.5.1.dev159}/assemblyline_core.egg-info/SOURCES.txt +0 -0
  71. {assemblyline-core-4.5.1.dev157 → assemblyline-core-4.5.1.dev159}/assemblyline_core.egg-info/dependency_links.txt +0 -0
  72. {assemblyline-core-4.5.1.dev157 → assemblyline-core-4.5.1.dev159}/assemblyline_core.egg-info/requires.txt +0 -0
  73. {assemblyline-core-4.5.1.dev157 → assemblyline-core-4.5.1.dev159}/assemblyline_core.egg-info/top_level.txt +0 -0
  74. {assemblyline-core-4.5.1.dev157 → assemblyline-core-4.5.1.dev159}/setup.cfg +0 -0
  75. {assemblyline-core-4.5.1.dev157 → assemblyline-core-4.5.1.dev159}/setup.py +0 -0
  76. {assemblyline-core-4.5.1.dev157 → assemblyline-core-4.5.1.dev159}/test/test_alerter.py +0 -0
  77. {assemblyline-core-4.5.1.dev157 → assemblyline-core-4.5.1.dev159}/test/test_badlist_client.py +0 -0
  78. {assemblyline-core-4.5.1.dev157 → assemblyline-core-4.5.1.dev159}/test/test_expiry.py +0 -0
  79. {assemblyline-core-4.5.1.dev157 → assemblyline-core-4.5.1.dev159}/test/test_plumber.py +0 -0
  80. {assemblyline-core-4.5.1.dev157 → assemblyline-core-4.5.1.dev159}/test/test_replay.py +0 -0
  81. {assemblyline-core-4.5.1.dev157 → assemblyline-core-4.5.1.dev159}/test/test_safelist_client.py +0 -0
  82. {assemblyline-core-4.5.1.dev157 → assemblyline-core-4.5.1.dev159}/test/test_scaler.py +0 -0
  83. {assemblyline-core-4.5.1.dev157 → assemblyline-core-4.5.1.dev159}/test/test_scheduler.py +0 -0
  84. {assemblyline-core-4.5.1.dev157 → assemblyline-core-4.5.1.dev159}/test/test_signature_client.py +0 -0
  85. {assemblyline-core-4.5.1.dev157 → assemblyline-core-4.5.1.dev159}/test/test_simulation.py +0 -0
  86. {assemblyline-core-4.5.1.dev157 → assemblyline-core-4.5.1.dev159}/test/test_vacuum.py +0 -0
  87. {assemblyline-core-4.5.1.dev157 → assemblyline-core-4.5.1.dev159}/test/test_worker_ingest.py +0 -0
  88. {assemblyline-core-4.5.1.dev157 → assemblyline-core-4.5.1.dev159}/test/test_worker_submit.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: assemblyline-core
3
- Version: 4.5.1.dev157
3
+ Version: 4.5.1.dev159
4
4
  Summary: Assemblyline 4 - Core components
5
5
  Home-page: https://github.com/CybercentreCanada/assemblyline-core/
6
6
  Author: CCCS Assemblyline development team
@@ -0,0 +1 @@
1
+ 4.5.1.dev159
@@ -279,6 +279,17 @@ class DispatchClient:
279
279
  else:
280
280
  result.expiry_ts = None
281
281
  try:
282
+ if self.ds.result.exists(result_key):
283
+ # A result already exists for this key
284
+ # Regenerate entire result key based on result and modified task (ignore caching)
285
+ task.ignore_cache = True
286
+ result_key = Result.help_build_key(sha256=task.fileinfo.sha256,
287
+ service_name=result.response.service_name,
288
+ service_version=result.response.service_version,
289
+ service_tool_version=result.response.service_tool_version,
290
+ is_empty=False,
291
+ task=task)
292
+ version = "create"
282
293
  self.ds.result.save(result_key, result, version=version)
283
294
  break
284
295
  except VersionConflictException as vce:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: assemblyline-core
3
- Version: 4.5.1.dev157
3
+ Version: 4.5.1.dev159
4
4
  Summary: Assemblyline 4 - Core components
5
5
  Home-page: https://github.com/CybercentreCanada/assemblyline-core/
6
6
  Author: CCCS Assemblyline development team
@@ -14,8 +14,8 @@ from assemblyline.odm.randomizer import random_model_obj, random_minimal_obj, ge
14
14
  from assemblyline.odm import models
15
15
  from assemblyline.common.metrics import MetricsFactory
16
16
 
17
- from assemblyline_core.dispatching.client import DispatchClient
18
- from assemblyline_core.dispatching.dispatcher import Dispatcher, Submission
17
+ from assemblyline_core.dispatching.client import DispatchClient, DISPATCH_RESULT_QUEUE
18
+ from assemblyline_core.dispatching.dispatcher import Dispatcher, ServiceTask, Submission
19
19
  from assemblyline_core.dispatching.schedules import Scheduler as RealScheduler
20
20
 
21
21
  # noinspection PyUnresolvedReferences
@@ -123,7 +123,7 @@ def test_simple(clean_redis, clean_datastore):
123
123
  user: User = random_model_obj(User)
124
124
  ds.user.save(user.uname, user)
125
125
 
126
- sub: Submission = random_model_obj(models.submission.Submission)
126
+ sub: Submission = random_model_obj(Submission)
127
127
  sub.sid = sid = 'first-submission'
128
128
  sub.params.ignore_cache = False
129
129
  sub.params.max_extracted = 5
@@ -242,7 +242,7 @@ def test_dispatch_extracted(clean_redis, clean_datastore):
242
242
  ds.file.save(fh, obj)
243
243
 
244
244
  # Inject the fake submission
245
- submission = random_model_obj(models.submission.Submission)
245
+ submission = random_model_obj(Submission)
246
246
  submission.to_be_deleted = False
247
247
  submission.files = [dict(name='./file', sha256=file_hash)]
248
248
  submission.params.submitter = user.uname
@@ -308,7 +308,7 @@ def test_dispatch_extracted_bypass_drp(clean_redis, clean_datastore):
308
308
  ds.file.save(fh, obj)
309
309
 
310
310
  # Inject the fake submission
311
- submission = random_model_obj(models.submission.Submission)
311
+ submission = random_model_obj(Submission)
312
312
  submission.to_be_deleted = False
313
313
  submission.params.ignore_dynamic_recursion_prevention = False
314
314
  submission.params.services.selected = ['extract', 'sandbox']
@@ -417,3 +417,37 @@ def test_timeout():
417
417
 
418
418
  # Expire nothing
419
419
  assert len(table.timeouts()) == 0
420
+
421
+
422
+ def test_prevent_result_overwrite(clean_redis, clean_datastore):
423
+ client = DispatchClient(clean_datastore, clean_redis, clean_redis)
424
+ dispatcher_name = "test"
425
+ result_queue = client._get_queue_from_cache(DISPATCH_RESULT_QUEUE + dispatcher_name)
426
+
427
+ # Create a task and add it to set of running tasks
428
+ task = random_model_obj(ServiceTask)
429
+ task.metadata['dispatcher__'] = dispatcher_name
430
+
431
+ # Create a result that's not "empty"
432
+ result = random_model_obj(Result)
433
+ result.response.service_name = task.service_name
434
+ result.sha256 = task.fileinfo.sha256
435
+ result.result.score = 1
436
+ result_key = result.build_key()
437
+
438
+ # Submit result to be saved
439
+ client.running_tasks.add(task.key(), task.as_primitives())
440
+ client.service_finished(task.sid, result_key, result)
441
+
442
+ # Pop result from queue, we expect to get the same result key as earlier
443
+ message = result_queue.pop(blocking=False)
444
+ msg_result_key = message['result_summary']['key']
445
+ assert msg_result_key == result_key
446
+
447
+ # Save the same result again but we expect to be saved under another key
448
+ client.running_tasks.add(task.key(), task.as_primitives())
449
+ client.service_finished(task.sid, result_key, result)
450
+ message = result_queue.pop(blocking=False)
451
+ msg_result_key = message['result_summary']['key']
452
+
453
+ assert msg_result_key != result_key
@@ -1 +0,0 @@
1
- 4.5.1.dev157