prelude-sdk 2.6.36__tar.gz → 2.6.38__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 (34) hide show
  1. {prelude_sdk-2.6.36 → prelude_sdk-2.6.38}/PKG-INFO +1 -1
  2. {prelude_sdk-2.6.36 → prelude_sdk-2.6.38}/prelude_sdk/controllers/iam_controller.py +9 -1
  3. {prelude_sdk-2.6.36 → prelude_sdk-2.6.38}/prelude_sdk/models/codes.py +22 -3
  4. {prelude_sdk-2.6.36 → prelude_sdk-2.6.38}/prelude_sdk.egg-info/PKG-INFO +1 -1
  5. {prelude_sdk-2.6.36 → prelude_sdk-2.6.38}/setup.cfg +1 -1
  6. {prelude_sdk-2.6.36 → prelude_sdk-2.6.38}/tests/test_partner.py +18 -0
  7. {prelude_sdk-2.6.36 → prelude_sdk-2.6.38}/tests/test_scm.py +11 -0
  8. {prelude_sdk-2.6.36 → prelude_sdk-2.6.38}/LICENSE +0 -0
  9. {prelude_sdk-2.6.36 → prelude_sdk-2.6.38}/README.md +0 -0
  10. {prelude_sdk-2.6.36 → prelude_sdk-2.6.38}/prelude_sdk/__init__.py +0 -0
  11. {prelude_sdk-2.6.36 → prelude_sdk-2.6.38}/prelude_sdk/controllers/__init__.py +0 -0
  12. {prelude_sdk-2.6.36 → prelude_sdk-2.6.38}/prelude_sdk/controllers/build_controller.py +0 -0
  13. {prelude_sdk-2.6.36 → prelude_sdk-2.6.38}/prelude_sdk/controllers/detect_controller.py +0 -0
  14. {prelude_sdk-2.6.36 → prelude_sdk-2.6.38}/prelude_sdk/controllers/export_controller.py +0 -0
  15. {prelude_sdk-2.6.36 → prelude_sdk-2.6.38}/prelude_sdk/controllers/generate_controller.py +0 -0
  16. {prelude_sdk-2.6.36 → prelude_sdk-2.6.38}/prelude_sdk/controllers/http_controller.py +0 -0
  17. {prelude_sdk-2.6.36 → prelude_sdk-2.6.38}/prelude_sdk/controllers/jobs_controller.py +0 -0
  18. {prelude_sdk-2.6.36 → prelude_sdk-2.6.38}/prelude_sdk/controllers/partner_controller.py +0 -0
  19. {prelude_sdk-2.6.36 → prelude_sdk-2.6.38}/prelude_sdk/controllers/probe_controller.py +0 -0
  20. {prelude_sdk-2.6.36 → prelude_sdk-2.6.38}/prelude_sdk/controllers/scm_controller.py +0 -0
  21. {prelude_sdk-2.6.36 → prelude_sdk-2.6.38}/prelude_sdk/models/__init__.py +0 -0
  22. {prelude_sdk-2.6.36 → prelude_sdk-2.6.38}/prelude_sdk/models/account.py +0 -0
  23. {prelude_sdk-2.6.36 → prelude_sdk-2.6.38}/prelude_sdk.egg-info/SOURCES.txt +0 -0
  24. {prelude_sdk-2.6.36 → prelude_sdk-2.6.38}/prelude_sdk.egg-info/dependency_links.txt +0 -0
  25. {prelude_sdk-2.6.36 → prelude_sdk-2.6.38}/prelude_sdk.egg-info/requires.txt +0 -0
  26. {prelude_sdk-2.6.36 → prelude_sdk-2.6.38}/prelude_sdk.egg-info/top_level.txt +0 -0
  27. {prelude_sdk-2.6.36 → prelude_sdk-2.6.38}/pyproject.toml +0 -0
  28. {prelude_sdk-2.6.36 → prelude_sdk-2.6.38}/tests/test_build.py +0 -0
  29. {prelude_sdk-2.6.36 → prelude_sdk-2.6.38}/tests/test_detect.py +0 -0
  30. {prelude_sdk-2.6.36 → prelude_sdk-2.6.38}/tests/test_generate.py +0 -0
  31. {prelude_sdk-2.6.36 → prelude_sdk-2.6.38}/tests/test_iam.py +0 -0
  32. {prelude_sdk-2.6.36 → prelude_sdk-2.6.38}/tests/test_probe.py +0 -0
  33. {prelude_sdk-2.6.36 → prelude_sdk-2.6.38}/tests/test_scm_build.py +0 -0
  34. {prelude_sdk-2.6.36 → prelude_sdk-2.6.38}/tests/testutils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: prelude-sdk
3
- Version: 2.6.36
3
+ Version: 2.6.38
4
4
  Summary: For interacting with the Prelude API
5
5
  Home-page: https://github.com/preludeorg
6
6
  Author: Prelude Research
@@ -30,13 +30,21 @@ class IAMAccountController(HttpController):
30
30
  return res.json()
31
31
 
32
32
  @verify_credentials
33
- def update_account(self, mode: Mode = None, company: str = None, slug: str = None):
33
+ def update_account(
34
+ self,
35
+ company: str = None,
36
+ inactivity_timeout: int = None,
37
+ mode: Mode = None,
38
+ slug: str = None,
39
+ ):
34
40
  """Update properties on an account"""
35
41
  body = dict()
36
42
  if mode is not None:
37
43
  body["mode"] = mode.name
38
44
  if company is not None:
39
45
  body["company"] = company
46
+ if inactivity_timeout is not None:
47
+ body["inactivity_timeout"] = inactivity_timeout
40
48
  if slug is not None:
41
49
  body["slug"] = slug
42
50
 
@@ -187,6 +187,8 @@ class Control(Enum, metaclass=MissingItem):
187
187
  INTEL_INTUNE = 28
188
188
  CISCO_MERAKI = 29
189
189
  CISCO_MERAKI_IDENTITY = 30
190
+ CROWDSTRIKE_VULN = 31
191
+ DEFENDER_VULN = 32
190
192
 
191
193
  @classmethod
192
194
  def _missing_(cls, value):
@@ -295,6 +297,10 @@ class Control(Enum, metaclass=MissingItem):
295
297
  return "Cisco Meraki"
296
298
  case Control.CISCO_MERAKI_IDENTITY:
297
299
  return "Cisco Meraki Identity"
300
+ case Control.CROWDSTRIKE_VULN:
301
+ return "CrowdStrike Vulnerability Management"
302
+ case Control.DEFENDER_VULN:
303
+ return "Microsoft Defender Vulnerability Management"
298
304
  case _:
299
305
  return "Unknown Control"
300
306
 
@@ -359,6 +365,8 @@ class ControlCategory(Enum, metaclass=MissingItem):
359
365
  Control.VECTR,
360
366
  ],
361
367
  ControlCategory.VULN_MANAGER: [
368
+ Control.CROWDSTRIKE_VULN,
369
+ Control.DEFENDER_VULN,
362
370
  Control.QUALYS,
363
371
  Control.RAPID7,
364
372
  Control.TENABLE,
@@ -418,8 +426,10 @@ class SCMCategory(Enum, metaclass=MissingItem):
418
426
  Control.AWS_SSM,
419
427
  Control.AZURE_VM,
420
428
  Control.CROWDSTRIKE,
429
+ Control.CROWDSTRIKE_VULN,
421
430
  Control.DEFENDER,
422
431
  Control.DEFENDER_DISCOVERY,
432
+ Control.DEFENDER_VULN,
423
433
  Control.EC2,
424
434
  Control.INTEL_INTUNE,
425
435
  Control.INTUNE,
@@ -533,13 +543,22 @@ class PartnerEvents(Enum, metaclass=MissingItem):
533
543
  PartnerEvents.MISSING_SERVER_MANAGER: [ControlCategory.ASSET_MANAGER],
534
544
  PartnerEvents.MISSING_VULN_MANAGER: [ControlCategory.VULN_MANAGER],
535
545
  PartnerEvents.MISSING_VULN_SCAN: [ControlCategory.VULN_MANAGER],
536
- PartnerEvents.NO_ASR_POLICY: [ControlCategory.ASSET_MANAGER],
537
- PartnerEvents.NO_AV_POLICY: [ControlCategory.XDR],
546
+ PartnerEvents.NO_ASR_POLICY: [
547
+ ControlCategory.ASSET_MANAGER,
548
+ ControlCategory.XDR,
549
+ ],
550
+ PartnerEvents.NO_AV_POLICY: [
551
+ ControlCategory.ASSET_MANAGER,
552
+ ControlCategory.XDR,
553
+ ],
538
554
  PartnerEvents.NO_DEVICE_COMPLIANCE_POLICY: [ControlCategory.ASSET_MANAGER],
539
555
  PartnerEvents.NO_DISK_ENCRYPTION: [ControlCategory.ASSET_MANAGER],
540
556
  PartnerEvents.NO_DISK_ENCRYPTION_POLICY: [ControlCategory.ASSET_MANAGER],
541
557
  PartnerEvents.NO_EDR_POLICY: [ControlCategory.XDR],
542
- PartnerEvents.NO_HOST_FIREWALL_POLICY: [ControlCategory.ASSET_MANAGER],
558
+ PartnerEvents.NO_HOST_FIREWALL_POLICY: [
559
+ ControlCategory.ASSET_MANAGER,
560
+ ControlCategory.XDR,
561
+ ],
543
562
  PartnerEvents.NO_REGISTERED_DEVICES: [ControlCategory.IDENTITY],
544
563
  PartnerEvents.NONCOMPLIANT: [ControlCategory.ASSET_MANAGER],
545
564
  PartnerEvents.OUT_OF_DATE_FIRMWARE: [ControlCategory.NETWORK],
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: prelude-sdk
3
- Version: 2.6.36
3
+ Version: 2.6.38
4
4
  Summary: For interacting with the Prelude API
5
5
  Home-page: https://github.com/preludeorg
6
6
  Author: Prelude Research
@@ -1,6 +1,6 @@
1
1
  [metadata]
2
2
  name = prelude-sdk
3
- version = 2.6.36
3
+ version = 2.6.38
4
4
  author = Prelude Research
5
5
  author_email = support@preludesecurity.com
6
6
  description = For interacting with the Prelude API
@@ -498,3 +498,21 @@ class TestPartner:
498
498
  assert res["pagination"]["offset"] == 0
499
499
  assert res["pagination"]["total"] > 0
500
500
  pytest.crowdstrike_advisory_id = res["advisories"][0]["id"]
501
+
502
+ def test_delete_endpoint(
503
+ self,
504
+ unwrap,
505
+ host,
506
+ edr_id,
507
+ control,
508
+ os,
509
+ platform,
510
+ policy,
511
+ policy_name,
512
+ webhook_keys,
513
+ group_id,
514
+ ):
515
+ unwrap(self.detect.delete_endpoint)(self.detect, pytest.endpoint["endpoint_id"])
516
+ res = unwrap(self.detect.list_endpoints)(self.detect)
517
+ sorted_res = {r["serial_num"]: r for r in res}
518
+ assert pytest.endpoint["serial_num"] not in sorted_res
@@ -200,6 +200,17 @@ class TestScmPerControl:
200
200
  "endpoint_count",
201
201
  "success_count",
202
202
  } == evaluation["policies"][0].keys()
203
+ elif control == Control.INTEL_INTUNE:
204
+ evaluation = _wait_for_policies(control, instance_id, "endpoint")
205
+ assert {
206
+ "active_count",
207
+ "excepted",
208
+ "id",
209
+ "name",
210
+ "not_supported_count",
211
+ "supported_count",
212
+ "techniques",
213
+ } == evaluation["policies"][0].keys()
203
214
  else:
204
215
  assert len(evaluation["policies"]) == 0
205
216
  elif "user_evaluation" in evaluation:
File without changes
File without changes