assemblyline-core 4.6.1.dev44__tar.gz → 4.6.1.dev49__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.
Files changed (90) hide show
  1. {assemblyline_core-4.6.1.dev44 → assemblyline_core-4.6.1.dev49}/PKG-INFO +1 -1
  2. assemblyline_core-4.6.1.dev49/assemblyline_core/VERSION +1 -0
  3. {assemblyline_core-4.6.1.dev44 → assemblyline_core-4.6.1.dev49}/assemblyline_core/plumber/run_plumber.py +30 -42
  4. {assemblyline_core-4.6.1.dev44 → assemblyline_core-4.6.1.dev49}/assemblyline_core.egg-info/PKG-INFO +1 -1
  5. {assemblyline_core-4.6.1.dev44 → assemblyline_core-4.6.1.dev49}/test/test_plumber.py +15 -3
  6. assemblyline_core-4.6.1.dev44/assemblyline_core/VERSION +0 -1
  7. {assemblyline_core-4.6.1.dev44 → assemblyline_core-4.6.1.dev49}/LICENCE.md +0 -0
  8. {assemblyline_core-4.6.1.dev44 → assemblyline_core-4.6.1.dev49}/README.md +0 -0
  9. {assemblyline_core-4.6.1.dev44 → assemblyline_core-4.6.1.dev49}/assemblyline_core/__init__.py +0 -0
  10. {assemblyline_core-4.6.1.dev44 → assemblyline_core-4.6.1.dev49}/assemblyline_core/alerter/__init__.py +0 -0
  11. {assemblyline_core-4.6.1.dev44 → assemblyline_core-4.6.1.dev49}/assemblyline_core/alerter/processing.py +0 -0
  12. {assemblyline_core-4.6.1.dev44 → assemblyline_core-4.6.1.dev49}/assemblyline_core/alerter/run_alerter.py +0 -0
  13. {assemblyline_core-4.6.1.dev44 → assemblyline_core-4.6.1.dev49}/assemblyline_core/archiver/__init__.py +0 -0
  14. {assemblyline_core-4.6.1.dev44 → assemblyline_core-4.6.1.dev49}/assemblyline_core/archiver/run_archiver.py +0 -0
  15. {assemblyline_core-4.6.1.dev44 → assemblyline_core-4.6.1.dev49}/assemblyline_core/badlist_client.py +0 -0
  16. {assemblyline_core-4.6.1.dev44 → assemblyline_core-4.6.1.dev49}/assemblyline_core/dispatching/__init__.py +0 -0
  17. {assemblyline_core-4.6.1.dev44 → assemblyline_core-4.6.1.dev49}/assemblyline_core/dispatching/__main__.py +0 -0
  18. {assemblyline_core-4.6.1.dev44 → assemblyline_core-4.6.1.dev49}/assemblyline_core/dispatching/client.py +0 -0
  19. {assemblyline_core-4.6.1.dev44 → assemblyline_core-4.6.1.dev49}/assemblyline_core/dispatching/dispatcher.py +0 -0
  20. {assemblyline_core-4.6.1.dev44 → assemblyline_core-4.6.1.dev49}/assemblyline_core/dispatching/schedules.py +0 -0
  21. {assemblyline_core-4.6.1.dev44 → assemblyline_core-4.6.1.dev49}/assemblyline_core/dispatching/timeout.py +0 -0
  22. {assemblyline_core-4.6.1.dev44 → assemblyline_core-4.6.1.dev49}/assemblyline_core/expiry/__init__.py +0 -0
  23. {assemblyline_core-4.6.1.dev44 → assemblyline_core-4.6.1.dev49}/assemblyline_core/expiry/run_expiry.py +0 -0
  24. {assemblyline_core-4.6.1.dev44 → assemblyline_core-4.6.1.dev49}/assemblyline_core/ingester/__init__.py +0 -0
  25. {assemblyline_core-4.6.1.dev44 → assemblyline_core-4.6.1.dev49}/assemblyline_core/ingester/__main__.py +0 -0
  26. {assemblyline_core-4.6.1.dev44 → assemblyline_core-4.6.1.dev49}/assemblyline_core/ingester/constants.py +0 -0
  27. {assemblyline_core-4.6.1.dev44 → assemblyline_core-4.6.1.dev49}/assemblyline_core/ingester/ingester.py +0 -0
  28. {assemblyline_core-4.6.1.dev44 → assemblyline_core-4.6.1.dev49}/assemblyline_core/metrics/__init__.py +0 -0
  29. {assemblyline_core-4.6.1.dev44 → assemblyline_core-4.6.1.dev49}/assemblyline_core/metrics/es_metrics.py +0 -0
  30. {assemblyline_core-4.6.1.dev44 → assemblyline_core-4.6.1.dev49}/assemblyline_core/metrics/heartbeat_formatter.py +0 -0
  31. {assemblyline_core-4.6.1.dev44 → assemblyline_core-4.6.1.dev49}/assemblyline_core/metrics/helper.py +0 -0
  32. {assemblyline_core-4.6.1.dev44 → assemblyline_core-4.6.1.dev49}/assemblyline_core/metrics/metrics_server.py +0 -0
  33. {assemblyline_core-4.6.1.dev44 → assemblyline_core-4.6.1.dev49}/assemblyline_core/metrics/run_heartbeat_manager.py +0 -0
  34. {assemblyline_core-4.6.1.dev44 → assemblyline_core-4.6.1.dev49}/assemblyline_core/metrics/run_metrics_aggregator.py +0 -0
  35. {assemblyline_core-4.6.1.dev44 → assemblyline_core-4.6.1.dev49}/assemblyline_core/metrics/run_statistics_aggregator.py +0 -0
  36. {assemblyline_core-4.6.1.dev44 → assemblyline_core-4.6.1.dev49}/assemblyline_core/plumber/__init__.py +0 -0
  37. {assemblyline_core-4.6.1.dev44 → assemblyline_core-4.6.1.dev49}/assemblyline_core/replay/__init__.py +0 -0
  38. {assemblyline_core-4.6.1.dev44 → assemblyline_core-4.6.1.dev49}/assemblyline_core/replay/client.py +0 -0
  39. {assemblyline_core-4.6.1.dev44 → assemblyline_core-4.6.1.dev49}/assemblyline_core/replay/creator/__init__.py +0 -0
  40. {assemblyline_core-4.6.1.dev44 → assemblyline_core-4.6.1.dev49}/assemblyline_core/replay/creator/run.py +0 -0
  41. {assemblyline_core-4.6.1.dev44 → assemblyline_core-4.6.1.dev49}/assemblyline_core/replay/creator/run_worker.py +0 -0
  42. {assemblyline_core-4.6.1.dev44 → assemblyline_core-4.6.1.dev49}/assemblyline_core/replay/loader/__init__.py +0 -0
  43. {assemblyline_core-4.6.1.dev44 → assemblyline_core-4.6.1.dev49}/assemblyline_core/replay/loader/run.py +0 -0
  44. {assemblyline_core-4.6.1.dev44 → assemblyline_core-4.6.1.dev49}/assemblyline_core/replay/loader/run_worker.py +0 -0
  45. {assemblyline_core-4.6.1.dev44 → assemblyline_core-4.6.1.dev49}/assemblyline_core/replay/replay.py +0 -0
  46. {assemblyline_core-4.6.1.dev44 → assemblyline_core-4.6.1.dev49}/assemblyline_core/safelist_client.py +0 -0
  47. {assemblyline_core-4.6.1.dev44 → assemblyline_core-4.6.1.dev49}/assemblyline_core/scaler/__init__.py +0 -0
  48. {assemblyline_core-4.6.1.dev44 → assemblyline_core-4.6.1.dev49}/assemblyline_core/scaler/collection.py +0 -0
  49. {assemblyline_core-4.6.1.dev44 → assemblyline_core-4.6.1.dev49}/assemblyline_core/scaler/controllers/__init__.py +0 -0
  50. {assemblyline_core-4.6.1.dev44 → assemblyline_core-4.6.1.dev49}/assemblyline_core/scaler/controllers/docker_ctl.py +0 -0
  51. {assemblyline_core-4.6.1.dev44 → assemblyline_core-4.6.1.dev49}/assemblyline_core/scaler/controllers/interface.py +0 -0
  52. {assemblyline_core-4.6.1.dev44 → assemblyline_core-4.6.1.dev49}/assemblyline_core/scaler/controllers/kubernetes_ctl.py +0 -0
  53. {assemblyline_core-4.6.1.dev44 → assemblyline_core-4.6.1.dev49}/assemblyline_core/scaler/run_scaler.py +0 -0
  54. {assemblyline_core-4.6.1.dev44 → assemblyline_core-4.6.1.dev49}/assemblyline_core/scaler/scaler_server.py +0 -0
  55. {assemblyline_core-4.6.1.dev44 → assemblyline_core-4.6.1.dev49}/assemblyline_core/server_base.py +0 -0
  56. {assemblyline_core-4.6.1.dev44 → assemblyline_core-4.6.1.dev49}/assemblyline_core/signature_client.py +0 -0
  57. {assemblyline_core-4.6.1.dev44 → assemblyline_core-4.6.1.dev49}/assemblyline_core/submission_client.py +0 -0
  58. {assemblyline_core-4.6.1.dev44 → assemblyline_core-4.6.1.dev49}/assemblyline_core/tasking_client.py +0 -0
  59. {assemblyline_core-4.6.1.dev44 → assemblyline_core-4.6.1.dev49}/assemblyline_core/updater/__init__.py +0 -0
  60. {assemblyline_core-4.6.1.dev44 → assemblyline_core-4.6.1.dev49}/assemblyline_core/updater/helper.py +0 -0
  61. {assemblyline_core-4.6.1.dev44 → assemblyline_core-4.6.1.dev49}/assemblyline_core/updater/run_updater.py +0 -0
  62. {assemblyline_core-4.6.1.dev44 → assemblyline_core-4.6.1.dev49}/assemblyline_core/vacuum/__init__.py +0 -0
  63. {assemblyline_core-4.6.1.dev44 → assemblyline_core-4.6.1.dev49}/assemblyline_core/vacuum/crawler.py +0 -0
  64. {assemblyline_core-4.6.1.dev44 → assemblyline_core-4.6.1.dev49}/assemblyline_core/vacuum/department_map.py +0 -0
  65. {assemblyline_core-4.6.1.dev44 → assemblyline_core-4.6.1.dev49}/assemblyline_core/vacuum/safelist.py +0 -0
  66. {assemblyline_core-4.6.1.dev44 → assemblyline_core-4.6.1.dev49}/assemblyline_core/vacuum/stream_map.py +0 -0
  67. {assemblyline_core-4.6.1.dev44 → assemblyline_core-4.6.1.dev49}/assemblyline_core/vacuum/worker.py +0 -0
  68. {assemblyline_core-4.6.1.dev44 → assemblyline_core-4.6.1.dev49}/assemblyline_core/workflow/__init__.py +0 -0
  69. {assemblyline_core-4.6.1.dev44 → assemblyline_core-4.6.1.dev49}/assemblyline_core/workflow/run_workflow.py +0 -0
  70. {assemblyline_core-4.6.1.dev44 → assemblyline_core-4.6.1.dev49}/assemblyline_core.egg-info/SOURCES.txt +0 -0
  71. {assemblyline_core-4.6.1.dev44 → assemblyline_core-4.6.1.dev49}/assemblyline_core.egg-info/dependency_links.txt +0 -0
  72. {assemblyline_core-4.6.1.dev44 → assemblyline_core-4.6.1.dev49}/assemblyline_core.egg-info/requires.txt +0 -0
  73. {assemblyline_core-4.6.1.dev44 → assemblyline_core-4.6.1.dev49}/assemblyline_core.egg-info/top_level.txt +0 -0
  74. {assemblyline_core-4.6.1.dev44 → assemblyline_core-4.6.1.dev49}/setup.cfg +0 -0
  75. {assemblyline_core-4.6.1.dev44 → assemblyline_core-4.6.1.dev49}/setup.py +0 -0
  76. {assemblyline_core-4.6.1.dev44 → assemblyline_core-4.6.1.dev49}/test/test_alerter.py +0 -0
  77. {assemblyline_core-4.6.1.dev44 → assemblyline_core-4.6.1.dev49}/test/test_badlist_client.py +0 -0
  78. {assemblyline_core-4.6.1.dev44 → assemblyline_core-4.6.1.dev49}/test/test_dispatcher.py +0 -0
  79. {assemblyline_core-4.6.1.dev44 → assemblyline_core-4.6.1.dev49}/test/test_expiry.py +0 -0
  80. {assemblyline_core-4.6.1.dev44 → assemblyline_core-4.6.1.dev49}/test/test_replay.py +0 -0
  81. {assemblyline_core-4.6.1.dev44 → assemblyline_core-4.6.1.dev49}/test/test_safelist_client.py +0 -0
  82. {assemblyline_core-4.6.1.dev44 → assemblyline_core-4.6.1.dev49}/test/test_scaler.py +0 -0
  83. {assemblyline_core-4.6.1.dev44 → assemblyline_core-4.6.1.dev49}/test/test_scheduler.py +0 -0
  84. {assemblyline_core-4.6.1.dev44 → assemblyline_core-4.6.1.dev49}/test/test_signature_client.py +0 -0
  85. {assemblyline_core-4.6.1.dev44 → assemblyline_core-4.6.1.dev49}/test/test_simulation.py +0 -0
  86. {assemblyline_core-4.6.1.dev44 → assemblyline_core-4.6.1.dev49}/test/test_tasking_client.py +0 -0
  87. {assemblyline_core-4.6.1.dev44 → assemblyline_core-4.6.1.dev49}/test/test_vacuum.py +0 -0
  88. {assemblyline_core-4.6.1.dev44 → assemblyline_core-4.6.1.dev49}/test/test_worker_ingest.py +0 -0
  89. {assemblyline_core-4.6.1.dev44 → assemblyline_core-4.6.1.dev49}/test/test_worker_submit.py +0 -0
  90. {assemblyline_core-4.6.1.dev44 → assemblyline_core-4.6.1.dev49}/test/test_workflow.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: assemblyline-core
3
- Version: 4.6.1.dev44
3
+ Version: 4.6.1.dev49
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.6.1.dev49
@@ -200,55 +200,43 @@ class Plumber(CoreBase):
200
200
  self.log.info(f"Done watching {service_name} service queue")
201
201
 
202
202
  def user_apikey_cleanup(self):
203
- query = "id:*"
204
- offset = 0
205
- rows = 100
206
- total = 1
207
- cur_total = 0
203
+ expiry_ts = None
204
+ if self.config.auth.apikey_max_dtl is not None:
205
+ expiry_ts = now_as_iso(self.config.auth.apikey_max_dtl * DAY_IN_SECONDS)
208
206
 
209
- config = get_config()
210
- apikey_max_dtl = config.auth.apikey_max_dtl
207
+ for user in self.datastore.user.stream_search(query="*", fl="*", as_obj=False):
208
+ uname = user['uname']
209
+ apikeys = user['apikeys']
211
210
 
212
- expiry_ts = now_as_iso(apikey_max_dtl * DAY_IN_SECONDS) if apikey_max_dtl is not None else None
211
+ for key in apikeys:
212
+ old_apikey = apikeys[key]
213
+ key_id = get_apikey_id(key, uname)
213
214
 
214
- while cur_total < total:
215
- result = self.datastore.user.search(query, offset=offset, rows=rows)
216
- total = result.get('total', 0)
217
- cur_total = cur_total + (result.get("count", total))
215
+ roles = None
216
+ if old_apikey['acl'] == ["C"]:
218
217
 
219
- # check for API keys in total
220
- users = result.get('items', [])
221
-
222
- for u in users:
223
- uname = u['uname']
224
- user = self.datastore.user.get(uname)
225
- apikeys = user.apikeys
226
-
227
- for key in apikeys:
228
- old_apikey = apikeys[key]
229
- key_id = get_apikey_id(key, uname)
230
-
231
- roles = None
232
- if old_apikey['acl'] == ["C"]:
218
+ roles = [r for r in old_apikey['roles']
219
+ if r in load_roles(user['type'], user['roles'])]
233
220
 
234
- roles = [r for r in old_apikey['roles']
235
- if r in load_roles(user['type'], user['roles'])]
221
+ else:
222
+ roles = [r for r in load_roles_form_acls(old_apikey['acl'], roles)
223
+ if r in load_roles(user['type'], user['roles'])]
224
+ new_apikey = {
225
+ "password": old_apikey['password'],
226
+ "acl": old_apikey['acl'],
227
+ "uname": uname,
228
+ "key_name": key,
229
+ "roles": roles,
230
+ "expiry_ts": expiry_ts
231
+ }
232
+ self.datastore.apikey.save(key_id, new_apikey)
236
233
 
237
- else:
238
- roles = [r for r in load_roles_form_acls(old_apikey['acl'], roles)
239
- if r in load_roles(user['type'], user['roles'])]
240
- new_apikey = {
241
- "password": old_apikey['password'],
242
- "acl": old_apikey['acl'],
243
- "uname": uname,
244
- "key_name": key,
245
- "roles": roles,
246
- "expiry_ts": expiry_ts
247
- }
248
- self.datastore.apikey.save(key_id, new_apikey)
234
+ user['apikeys'] = {}
235
+ self.datastore.user.save(uname, user)
249
236
 
250
- user['apikeys'] = {}
251
- self.datastore.user.save(uname, user)
237
+ # Commit changes made to indices
238
+ self.datastore.user.commit()
239
+ self.datastore.apikey.commit()
252
240
 
253
241
  def migrate_user_settings(self):
254
242
  service_list = self.datastore.list_all_services(as_obj=False)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: assemblyline-core
3
- Version: 4.6.1.dev44
3
+ Version: 4.6.1.dev49
4
4
  Summary: Assemblyline 4 - Core components
5
5
  Home-page: https://github.com/CybercentreCanada/assemblyline-core/
6
6
  Author: CCCS Assemblyline development team
@@ -8,6 +8,7 @@ from redis import Redis
8
8
 
9
9
  from assemblyline.odm.messages.task import Task
10
10
  from assemblyline.odm.models.service import Service
11
+ from assemblyline.odm.models.user import ApiKey, User
11
12
  from assemblyline.odm.random_data import random_model_obj
12
13
 
13
14
 
@@ -120,27 +121,38 @@ def test_user_setting_migrations(datastore_connection):
120
121
 
121
122
  # Create a user with old settings (format prior to 4.6)
122
123
  settings = {'classification': 'TLP:CLEAR', 'deep_scan': False, 'description': '', 'download_encoding': 'cart', 'default_external_sources': ['Malware Bazaar', 'VirusTotal'], 'default_zip_password': 'zippy', 'executive_summary': False, 'expand_min_score': 500, 'generate_alert': False, 'ignore_cache': False, 'ignore_dynamic_recursion_prevention': False, 'ignore_recursion_prevention': False, 'ignore_filtering': False, 'malicious': False, 'priority': 369, 'profile': False, 'service_spec': {'AVClass': {'include_malpedia_dataset': False}}, 'services': {'selected': ['Extraction', 'ConfigExtractor', 'YARA'], 'excluded': [], 'rescan': [], 'resubmit': [], 'runtime_excluded': []}, 'submission_view': 'report', 'ttl': 0}
124
+
125
+ user_account = random_model_obj(User, as_json=True)
126
+ user_account['uname'] = "admin"
127
+ user_account['apikeys'] = {'test': random_model_obj(ApiKey, as_json=True)}
123
128
  datastore_connection.ds.client.index(index="user_settings", id="admin", document=settings)
129
+ datastore_connection.ds.client.index(index="user", id="admin", document=user_account)
130
+
124
131
  datastore_connection.user_settings.commit()
132
+ datastore_connection.user.commit()
125
133
 
126
134
  # Initiate the migration
135
+ plumber.user_apikey_cleanup()
127
136
  plumber.migrate_user_settings()
128
137
 
129
138
  # Check that the settings have been migrated
130
139
  migrated_settings = datastore_connection.user_settings.get("admin", as_obj=False)
131
140
 
141
+ # Check to see if API keys for the user were transferred to the new index
142
+ assert datastore_connection.apikey.search('uname:admin', rows=0)['total'] > 0
143
+
132
144
  # Deprecated settings should be removed
133
145
  assert "ignore_dynamic_recursion_prevention" not in migrated_settings
134
146
 
135
147
  # All former submission settings at the root-level should be moved to submission profiles
136
148
  assert all([key not in migrated_settings for key in SubmissionProfileParams.fields().keys()] )
137
149
 
138
- for name, settings in migrated_settings['submission_profiles'].items():
150
+ for settings in migrated_settings['submission_profiles'].values():
139
151
  assert settings['classification'] == 'TLP:C'
140
152
  assert settings['deep_scan'] is False
141
153
  assert settings['generate_alert'] is False
142
154
  assert settings['ignore_cache'] is False
143
155
  assert settings['priority'] == 369
144
- # Full service spec should be preserved in default profile, but not in pre-defined ones
145
- assert settings['service_spec'] == {} if name != "default" else {'AVClass': {'include_malpedia_dataset': False}}
156
+ # Full service spec should be preserved in default profile (along with others by default if there's no restricted parameters)
157
+ assert settings['service_spec'] == {'AVClass': {'include_malpedia_dataset': False}}
146
158
  assert settings['ttl'] == 0
@@ -1 +0,0 @@
1
- 4.6.1.dev44