assemblyline-core 4.5.1.dev182__tar.gz → 4.5.1.dev184__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.dev182 → assemblyline-core-4.5.1.dev184}/PKG-INFO +1 -1
  2. assemblyline-core-4.5.1.dev184/assemblyline_core/VERSION +1 -0
  3. {assemblyline-core-4.5.1.dev182 → assemblyline-core-4.5.1.dev184}/assemblyline_core/ingester/ingester.py +11 -1
  4. {assemblyline-core-4.5.1.dev182 → assemblyline-core-4.5.1.dev184}/assemblyline_core/updater/helper.py +18 -7
  5. {assemblyline-core-4.5.1.dev182 → assemblyline-core-4.5.1.dev184}/assemblyline_core.egg-info/PKG-INFO +1 -1
  6. assemblyline-core-4.5.1.dev182/assemblyline_core/VERSION +0 -1
  7. {assemblyline-core-4.5.1.dev182 → assemblyline-core-4.5.1.dev184}/LICENCE.md +0 -0
  8. {assemblyline-core-4.5.1.dev182 → assemblyline-core-4.5.1.dev184}/README.md +0 -0
  9. {assemblyline-core-4.5.1.dev182 → assemblyline-core-4.5.1.dev184}/assemblyline_core/__init__.py +0 -0
  10. {assemblyline-core-4.5.1.dev182 → assemblyline-core-4.5.1.dev184}/assemblyline_core/alerter/__init__.py +0 -0
  11. {assemblyline-core-4.5.1.dev182 → assemblyline-core-4.5.1.dev184}/assemblyline_core/alerter/processing.py +0 -0
  12. {assemblyline-core-4.5.1.dev182 → assemblyline-core-4.5.1.dev184}/assemblyline_core/alerter/run_alerter.py +0 -0
  13. {assemblyline-core-4.5.1.dev182 → assemblyline-core-4.5.1.dev184}/assemblyline_core/archiver/__init__.py +0 -0
  14. {assemblyline-core-4.5.1.dev182 → assemblyline-core-4.5.1.dev184}/assemblyline_core/archiver/run_archiver.py +0 -0
  15. {assemblyline-core-4.5.1.dev182 → assemblyline-core-4.5.1.dev184}/assemblyline_core/badlist_client.py +0 -0
  16. {assemblyline-core-4.5.1.dev182 → assemblyline-core-4.5.1.dev184}/assemblyline_core/dispatching/__init__.py +0 -0
  17. {assemblyline-core-4.5.1.dev182 → assemblyline-core-4.5.1.dev184}/assemblyline_core/dispatching/__main__.py +0 -0
  18. {assemblyline-core-4.5.1.dev182 → assemblyline-core-4.5.1.dev184}/assemblyline_core/dispatching/client.py +0 -0
  19. {assemblyline-core-4.5.1.dev182 → assemblyline-core-4.5.1.dev184}/assemblyline_core/dispatching/dispatcher.py +0 -0
  20. {assemblyline-core-4.5.1.dev182 → assemblyline-core-4.5.1.dev184}/assemblyline_core/dispatching/schedules.py +0 -0
  21. {assemblyline-core-4.5.1.dev182 → assemblyline-core-4.5.1.dev184}/assemblyline_core/dispatching/timeout.py +0 -0
  22. {assemblyline-core-4.5.1.dev182 → assemblyline-core-4.5.1.dev184}/assemblyline_core/expiry/__init__.py +0 -0
  23. {assemblyline-core-4.5.1.dev182 → assemblyline-core-4.5.1.dev184}/assemblyline_core/expiry/run_expiry.py +0 -0
  24. {assemblyline-core-4.5.1.dev182 → assemblyline-core-4.5.1.dev184}/assemblyline_core/ingester/__init__.py +0 -0
  25. {assemblyline-core-4.5.1.dev182 → assemblyline-core-4.5.1.dev184}/assemblyline_core/ingester/__main__.py +0 -0
  26. {assemblyline-core-4.5.1.dev182 → assemblyline-core-4.5.1.dev184}/assemblyline_core/ingester/constants.py +0 -0
  27. {assemblyline-core-4.5.1.dev182 → assemblyline-core-4.5.1.dev184}/assemblyline_core/metrics/__init__.py +0 -0
  28. {assemblyline-core-4.5.1.dev182 → assemblyline-core-4.5.1.dev184}/assemblyline_core/metrics/es_metrics.py +0 -0
  29. {assemblyline-core-4.5.1.dev182 → assemblyline-core-4.5.1.dev184}/assemblyline_core/metrics/heartbeat_formatter.py +0 -0
  30. {assemblyline-core-4.5.1.dev182 → assemblyline-core-4.5.1.dev184}/assemblyline_core/metrics/helper.py +0 -0
  31. {assemblyline-core-4.5.1.dev182 → assemblyline-core-4.5.1.dev184}/assemblyline_core/metrics/metrics_server.py +0 -0
  32. {assemblyline-core-4.5.1.dev182 → assemblyline-core-4.5.1.dev184}/assemblyline_core/metrics/run_heartbeat_manager.py +0 -0
  33. {assemblyline-core-4.5.1.dev182 → assemblyline-core-4.5.1.dev184}/assemblyline_core/metrics/run_metrics_aggregator.py +0 -0
  34. {assemblyline-core-4.5.1.dev182 → assemblyline-core-4.5.1.dev184}/assemblyline_core/metrics/run_statistics_aggregator.py +0 -0
  35. {assemblyline-core-4.5.1.dev182 → assemblyline-core-4.5.1.dev184}/assemblyline_core/plumber/__init__.py +0 -0
  36. {assemblyline-core-4.5.1.dev182 → assemblyline-core-4.5.1.dev184}/assemblyline_core/plumber/run_plumber.py +0 -0
  37. {assemblyline-core-4.5.1.dev182 → assemblyline-core-4.5.1.dev184}/assemblyline_core/replay/__init__.py +0 -0
  38. {assemblyline-core-4.5.1.dev182 → assemblyline-core-4.5.1.dev184}/assemblyline_core/replay/client.py +0 -0
  39. {assemblyline-core-4.5.1.dev182 → assemblyline-core-4.5.1.dev184}/assemblyline_core/replay/creator/__init__.py +0 -0
  40. {assemblyline-core-4.5.1.dev182 → assemblyline-core-4.5.1.dev184}/assemblyline_core/replay/creator/run.py +0 -0
  41. {assemblyline-core-4.5.1.dev182 → assemblyline-core-4.5.1.dev184}/assemblyline_core/replay/creator/run_worker.py +0 -0
  42. {assemblyline-core-4.5.1.dev182 → assemblyline-core-4.5.1.dev184}/assemblyline_core/replay/loader/__init__.py +0 -0
  43. {assemblyline-core-4.5.1.dev182 → assemblyline-core-4.5.1.dev184}/assemblyline_core/replay/loader/run.py +0 -0
  44. {assemblyline-core-4.5.1.dev182 → assemblyline-core-4.5.1.dev184}/assemblyline_core/replay/loader/run_worker.py +0 -0
  45. {assemblyline-core-4.5.1.dev182 → assemblyline-core-4.5.1.dev184}/assemblyline_core/replay/replay.py +0 -0
  46. {assemblyline-core-4.5.1.dev182 → assemblyline-core-4.5.1.dev184}/assemblyline_core/safelist_client.py +0 -0
  47. {assemblyline-core-4.5.1.dev182 → assemblyline-core-4.5.1.dev184}/assemblyline_core/scaler/__init__.py +0 -0
  48. {assemblyline-core-4.5.1.dev182 → assemblyline-core-4.5.1.dev184}/assemblyline_core/scaler/collection.py +0 -0
  49. {assemblyline-core-4.5.1.dev182 → assemblyline-core-4.5.1.dev184}/assemblyline_core/scaler/controllers/__init__.py +0 -0
  50. {assemblyline-core-4.5.1.dev182 → assemblyline-core-4.5.1.dev184}/assemblyline_core/scaler/controllers/docker_ctl.py +0 -0
  51. {assemblyline-core-4.5.1.dev182 → assemblyline-core-4.5.1.dev184}/assemblyline_core/scaler/controllers/interface.py +0 -0
  52. {assemblyline-core-4.5.1.dev182 → assemblyline-core-4.5.1.dev184}/assemblyline_core/scaler/controllers/kubernetes_ctl.py +0 -0
  53. {assemblyline-core-4.5.1.dev182 → assemblyline-core-4.5.1.dev184}/assemblyline_core/scaler/run_scaler.py +0 -0
  54. {assemblyline-core-4.5.1.dev182 → assemblyline-core-4.5.1.dev184}/assemblyline_core/scaler/scaler_server.py +0 -0
  55. {assemblyline-core-4.5.1.dev182 → assemblyline-core-4.5.1.dev184}/assemblyline_core/server_base.py +0 -0
  56. {assemblyline-core-4.5.1.dev182 → assemblyline-core-4.5.1.dev184}/assemblyline_core/signature_client.py +0 -0
  57. {assemblyline-core-4.5.1.dev182 → assemblyline-core-4.5.1.dev184}/assemblyline_core/submission_client.py +0 -0
  58. {assemblyline-core-4.5.1.dev182 → assemblyline-core-4.5.1.dev184}/assemblyline_core/tasking_client.py +0 -0
  59. {assemblyline-core-4.5.1.dev182 → assemblyline-core-4.5.1.dev184}/assemblyline_core/updater/__init__.py +0 -0
  60. {assemblyline-core-4.5.1.dev182 → assemblyline-core-4.5.1.dev184}/assemblyline_core/updater/run_updater.py +0 -0
  61. {assemblyline-core-4.5.1.dev182 → assemblyline-core-4.5.1.dev184}/assemblyline_core/vacuum/__init__.py +0 -0
  62. {assemblyline-core-4.5.1.dev182 → assemblyline-core-4.5.1.dev184}/assemblyline_core/vacuum/crawler.py +0 -0
  63. {assemblyline-core-4.5.1.dev182 → assemblyline-core-4.5.1.dev184}/assemblyline_core/vacuum/department_map.py +0 -0
  64. {assemblyline-core-4.5.1.dev182 → assemblyline-core-4.5.1.dev184}/assemblyline_core/vacuum/safelist.py +0 -0
  65. {assemblyline-core-4.5.1.dev182 → assemblyline-core-4.5.1.dev184}/assemblyline_core/vacuum/stream_map.py +0 -0
  66. {assemblyline-core-4.5.1.dev182 → assemblyline-core-4.5.1.dev184}/assemblyline_core/vacuum/worker.py +0 -0
  67. {assemblyline-core-4.5.1.dev182 → assemblyline-core-4.5.1.dev184}/assemblyline_core/workflow/__init__.py +0 -0
  68. {assemblyline-core-4.5.1.dev182 → assemblyline-core-4.5.1.dev184}/assemblyline_core/workflow/run_workflow.py +0 -0
  69. {assemblyline-core-4.5.1.dev182 → assemblyline-core-4.5.1.dev184}/assemblyline_core.egg-info/SOURCES.txt +0 -0
  70. {assemblyline-core-4.5.1.dev182 → assemblyline-core-4.5.1.dev184}/assemblyline_core.egg-info/dependency_links.txt +0 -0
  71. {assemblyline-core-4.5.1.dev182 → assemblyline-core-4.5.1.dev184}/assemblyline_core.egg-info/requires.txt +0 -0
  72. {assemblyline-core-4.5.1.dev182 → assemblyline-core-4.5.1.dev184}/assemblyline_core.egg-info/top_level.txt +0 -0
  73. {assemblyline-core-4.5.1.dev182 → assemblyline-core-4.5.1.dev184}/setup.cfg +0 -0
  74. {assemblyline-core-4.5.1.dev182 → assemblyline-core-4.5.1.dev184}/setup.py +0 -0
  75. {assemblyline-core-4.5.1.dev182 → assemblyline-core-4.5.1.dev184}/test/test_alerter.py +0 -0
  76. {assemblyline-core-4.5.1.dev182 → assemblyline-core-4.5.1.dev184}/test/test_badlist_client.py +0 -0
  77. {assemblyline-core-4.5.1.dev182 → assemblyline-core-4.5.1.dev184}/test/test_dispatcher.py +0 -0
  78. {assemblyline-core-4.5.1.dev182 → assemblyline-core-4.5.1.dev184}/test/test_expiry.py +0 -0
  79. {assemblyline-core-4.5.1.dev182 → assemblyline-core-4.5.1.dev184}/test/test_plumber.py +0 -0
  80. {assemblyline-core-4.5.1.dev182 → assemblyline-core-4.5.1.dev184}/test/test_replay.py +0 -0
  81. {assemblyline-core-4.5.1.dev182 → assemblyline-core-4.5.1.dev184}/test/test_safelist_client.py +0 -0
  82. {assemblyline-core-4.5.1.dev182 → assemblyline-core-4.5.1.dev184}/test/test_scaler.py +0 -0
  83. {assemblyline-core-4.5.1.dev182 → assemblyline-core-4.5.1.dev184}/test/test_scheduler.py +0 -0
  84. {assemblyline-core-4.5.1.dev182 → assemblyline-core-4.5.1.dev184}/test/test_signature_client.py +0 -0
  85. {assemblyline-core-4.5.1.dev182 → assemblyline-core-4.5.1.dev184}/test/test_simulation.py +0 -0
  86. {assemblyline-core-4.5.1.dev182 → assemblyline-core-4.5.1.dev184}/test/test_vacuum.py +0 -0
  87. {assemblyline-core-4.5.1.dev182 → assemblyline-core-4.5.1.dev184}/test/test_worker_ingest.py +0 -0
  88. {assemblyline-core-4.5.1.dev182 → assemblyline-core-4.5.1.dev184}/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.dev182
3
+ Version: 4.5.1.dev184
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.dev184
@@ -36,6 +36,7 @@ from assemblyline.remote.datatypes.queues.priority import PriorityQueue
36
36
  from assemblyline.remote.datatypes.queues.comms import CommsQueue
37
37
  from assemblyline.remote.datatypes.queues.multi import MultiQueue
38
38
  from assemblyline.remote.datatypes.hash import Hash
39
+ from assemblyline.remote.datatypes.user_quota_tracker import UserQuotaTracker
39
40
  from assemblyline import odm
40
41
  from assemblyline.odm.models.submission import SubmissionParams, Submission as DatabaseSubmission
41
42
  from assemblyline.odm.models.alert import EXTENDED_SCAN_VALUES
@@ -180,6 +181,9 @@ class Ingester(ThreadedCoreBase):
180
181
  # Utility object to handle post-processing actions
181
182
  self.postprocess_worker = ActionWorker(cache=True, config=self.config, datastore=self.datastore,
182
183
  redis_persist=self.redis_persist)
184
+ # Async Submission quota tracker
185
+ self.async_submission_tracker = UserQuotaTracker('async_submissions', timeout=24 * 60 * 60, # 1 day timeout
186
+ redis=self.redis_persist)
183
187
 
184
188
  if self.config.core.metrics.apm_server.server_url is not None:
185
189
  self.log.info(f"Exporting application metrics to: {self.config.core.metrics.apm_server.server_url}")
@@ -640,7 +644,7 @@ class Ingester(ThreadedCoreBase):
640
644
  'archived': False,
641
645
  'archive_ts': None,
642
646
  'classification': task.params.classification,
643
- 'expiry_ts':now_as_iso(task.params.ttl * 24 * 60 * 60),
647
+ 'expiry_ts': now_as_iso(task.params.ttl * 24 * 60 * 60),
644
648
  'from_archive': False,
645
649
  'metadata': task.submission.metadata,
646
650
  'params': task.params.as_primitives(),
@@ -863,6 +867,9 @@ class Ingester(ThreadedCoreBase):
863
867
  return True
864
868
 
865
869
  def _notify_drop(self, task: IngestTask):
870
+ if self.config.ui.enforce_quota:
871
+ self.async_submission_tracker.end(task.params.submitter)
872
+
866
873
  self.send_notification(task)
867
874
 
868
875
  c12n = task.params.classification
@@ -936,4 +943,7 @@ class Ingester(ThreadedCoreBase):
936
943
  task.extended_scan = 'submitted'
937
944
  task.params.psid = None
938
945
 
946
+ if self.config.ui.enforce_quota:
947
+ self.async_submission_tracker.end(task.params.submitter)
948
+
939
949
  self.send_notification(task)
@@ -87,9 +87,6 @@ class AzureContainerRegistry(ContainerRegistry):
87
87
  headers["Authorization"] = f"Bearer {token}"
88
88
 
89
89
  resp = self._perform_request(url, headers, verify, proxies)
90
- if not resp:
91
- # Fetching tag list failed
92
- return []
93
90
 
94
91
  # At this point, we should have a response from the API
95
92
  if resp and resp.ok:
@@ -218,7 +215,7 @@ def get_latest_tag_for_service(
218
215
 
219
216
  # Pre-filter tags to only consider 'compatible' tags relative to the running system
220
217
  tags = [t for t in tags
221
- if re.match(f"({FRAMEWORK_VERSION})[.]({SYSTEM_VERSION})[.]\\d+[.]({update_channel})\\d+", t)]
218
+ if re.match(f"({FRAMEWORK_VERSION})\.({SYSTEM_VERSION})\.\\d+\.({update_channel})\\d+", t)]
222
219
 
223
220
  if not tags:
224
221
  logger.warning(f"{prefix}Cannot fetch latest tag for service {service_name} - {image_name}"
@@ -253,14 +250,28 @@ def _get_dockerhub_tags(image_name, update_channel, proxies=None):
253
250
  # Find latest tag for each types
254
251
  rv = []
255
252
  namespace, repository = image_name.split('/', 1)
256
- url = f"https://{DEFAULT_DOCKER_REGISTRY}/v2/namespaces/{namespace}/repositories/{repository}/tags"
257
- f"?page_size=50&page=1&name={update_channel}"
253
+ url = f"https://{DEFAULT_DOCKER_REGISTRY}/v2/namespaces/{namespace}/repositories/{repository}/tags" \
254
+ f"?page_size=50&page=1&name={update_channel}&ordering=last_updated"
258
255
 
259
256
  while True:
260
257
  resp = requests.get(url, proxies=proxies)
261
258
  if resp.ok:
262
259
  resp_data = resp.json()
263
- rv.extend([x['name'] for x in resp_data['results']])
260
+ if namespace == "cccs":
261
+ # The tags are coming from a repository managed by the Assemblyline team
262
+ for x in resp_data['results']:
263
+ tag_name = x['name']
264
+ if tag_name == f"{FRAMEWORK_VERSION}.{SYSTEM_VERSION}.{update_channel}":
265
+ # Ignore tag aliases containing the update_channel
266
+ continue
267
+
268
+ if tag_name.startswith(f"{FRAMEWORK_VERSION}.{SYSTEM_VERSION}"):
269
+ # Because the order of paging is based on `last_updated`,
270
+ # we can return the first valid candidate
271
+ return [tag_name]
272
+ else:
273
+ # The tags are coming from another repository, so we're don't know the ordering of tags
274
+ rv.extend([x['name'] for x in resp_data['results']])
264
275
  # Page until there are no results left
265
276
  url = resp_data.get('next', None)
266
277
  if url is None:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: assemblyline-core
3
- Version: 4.5.1.dev182
3
+ Version: 4.5.1.dev184
4
4
  Summary: Assemblyline 4 - Core components
5
5
  Home-page: https://github.com/CybercentreCanada/assemblyline-core/
6
6
  Author: CCCS Assemblyline development team
@@ -1 +0,0 @@
1
- 4.5.1.dev182