prelude-sdk-beta 1427__tar.gz → 1430__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 prelude-sdk-beta might be problematic. Click here for more details.

Files changed (34) hide show
  1. {prelude_sdk_beta-1427 → prelude_sdk_beta-1430}/PKG-INFO +1 -1
  2. {prelude_sdk_beta-1427 → prelude_sdk_beta-1430}/prelude_sdk_beta/models/codes.py +42 -1
  3. {prelude_sdk_beta-1427 → prelude_sdk_beta-1430}/prelude_sdk_beta.egg-info/PKG-INFO +1 -1
  4. {prelude_sdk_beta-1427 → prelude_sdk_beta-1430}/setup.cfg +1 -1
  5. {prelude_sdk_beta-1427 → prelude_sdk_beta-1430}/tests/test_scm.py +16 -11
  6. {prelude_sdk_beta-1427 → prelude_sdk_beta-1430}/LICENSE +0 -0
  7. {prelude_sdk_beta-1427 → prelude_sdk_beta-1430}/README.md +0 -0
  8. {prelude_sdk_beta-1427 → prelude_sdk_beta-1430}/prelude_sdk_beta/__init__.py +0 -0
  9. {prelude_sdk_beta-1427 → prelude_sdk_beta-1430}/prelude_sdk_beta/controllers/__init__.py +0 -0
  10. {prelude_sdk_beta-1427 → prelude_sdk_beta-1430}/prelude_sdk_beta/controllers/build_controller.py +0 -0
  11. {prelude_sdk_beta-1427 → prelude_sdk_beta-1430}/prelude_sdk_beta/controllers/detect_controller.py +0 -0
  12. {prelude_sdk_beta-1427 → prelude_sdk_beta-1430}/prelude_sdk_beta/controllers/export_controller.py +0 -0
  13. {prelude_sdk_beta-1427 → prelude_sdk_beta-1430}/prelude_sdk_beta/controllers/generate_controller.py +0 -0
  14. {prelude_sdk_beta-1427 → prelude_sdk_beta-1430}/prelude_sdk_beta/controllers/http_controller.py +0 -0
  15. {prelude_sdk_beta-1427 → prelude_sdk_beta-1430}/prelude_sdk_beta/controllers/iam_controller.py +0 -0
  16. {prelude_sdk_beta-1427 → prelude_sdk_beta-1430}/prelude_sdk_beta/controllers/jobs_controller.py +0 -0
  17. {prelude_sdk_beta-1427 → prelude_sdk_beta-1430}/prelude_sdk_beta/controllers/partner_controller.py +0 -0
  18. {prelude_sdk_beta-1427 → prelude_sdk_beta-1430}/prelude_sdk_beta/controllers/probe_controller.py +0 -0
  19. {prelude_sdk_beta-1427 → prelude_sdk_beta-1430}/prelude_sdk_beta/controllers/scm_controller.py +0 -0
  20. {prelude_sdk_beta-1427 → prelude_sdk_beta-1430}/prelude_sdk_beta/models/__init__.py +0 -0
  21. {prelude_sdk_beta-1427 → prelude_sdk_beta-1430}/prelude_sdk_beta/models/account.py +0 -0
  22. {prelude_sdk_beta-1427 → prelude_sdk_beta-1430}/prelude_sdk_beta.egg-info/SOURCES.txt +0 -0
  23. {prelude_sdk_beta-1427 → prelude_sdk_beta-1430}/prelude_sdk_beta.egg-info/dependency_links.txt +0 -0
  24. {prelude_sdk_beta-1427 → prelude_sdk_beta-1430}/prelude_sdk_beta.egg-info/requires.txt +0 -0
  25. {prelude_sdk_beta-1427 → prelude_sdk_beta-1430}/prelude_sdk_beta.egg-info/top_level.txt +0 -0
  26. {prelude_sdk_beta-1427 → prelude_sdk_beta-1430}/pyproject.toml +0 -0
  27. {prelude_sdk_beta-1427 → prelude_sdk_beta-1430}/tests/test_build.py +0 -0
  28. {prelude_sdk_beta-1427 → prelude_sdk_beta-1430}/tests/test_detect.py +0 -0
  29. {prelude_sdk_beta-1427 → prelude_sdk_beta-1430}/tests/test_generate.py +0 -0
  30. {prelude_sdk_beta-1427 → prelude_sdk_beta-1430}/tests/test_iam.py +0 -0
  31. {prelude_sdk_beta-1427 → prelude_sdk_beta-1430}/tests/test_partner.py +0 -0
  32. {prelude_sdk_beta-1427 → prelude_sdk_beta-1430}/tests/test_probe.py +0 -0
  33. {prelude_sdk_beta-1427 → prelude_sdk_beta-1430}/tests/test_scm_build.py +0 -0
  34. {prelude_sdk_beta-1427 → prelude_sdk_beta-1430}/tests/testutils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: prelude-sdk-beta
3
- Version: 1427
3
+ Version: 1430
4
4
  Summary: For interacting with the Prelude API
5
5
  Home-page: https://github.com/preludeorg
6
6
  Author: Prelude Research
@@ -206,6 +206,10 @@ class Control(Enum, metaclass=MissingItem):
206
206
  return k
207
207
  return SCMCategory.NONE
208
208
 
209
+ @property
210
+ def policy_types(self):
211
+ return [k for k, v in PolicyType.control_mapping().items() if self in v]
212
+
209
213
  @property
210
214
  def parent(self):
211
215
  match self:
@@ -439,7 +443,9 @@ class PartnerEvents(Enum, metaclass=MissingItem):
439
443
  ],
440
444
  PartnerEvents.MISSING_ASR_POLICY: [ControlCategory.ASSET_MANAGER],
441
445
  PartnerEvents.MISSING_AV_POLICY: [ControlCategory.XDR],
442
- PartnerEvents.MISSING_DEVICE_COMPLIANCE_POLICY: [ControlCategory.ASSET_MANAGER],
446
+ PartnerEvents.MISSING_DEVICE_COMPLIANCE_POLICY: [
447
+ ControlCategory.ASSET_MANAGER
448
+ ],
443
449
  PartnerEvents.MISSING_DISK_ENCRYPTION: [ControlCategory.ASSET_MANAGER],
444
450
  PartnerEvents.MISSING_DISK_ENCRYPTION_POLICY: [
445
451
  ControlCategory.ASSET_MANAGER
@@ -521,6 +527,41 @@ class PolicyType(Enum, metaclass=MissingItem):
521
527
  def _missing_(cls, value):
522
528
  return PolicyType.INVALID
523
529
 
530
+ @classmethod
531
+ def control_mapping(cls):
532
+ return {
533
+ PolicyType.EDR: ControlCategory.mapping()[ControlCategory.XDR],
534
+ PolicyType.AV: [Control.DEFENDER],
535
+ PolicyType.IDENTITY_PASSWORD: ControlCategory.mapping()[
536
+ ControlCategory.IDENTITY
537
+ ],
538
+ PolicyType.EMAIL_ANTIPHISH: ControlCategory.mapping()[
539
+ ControlCategory.EMAIL
540
+ ],
541
+ PolicyType.EMAIL_OUTBOUND: ControlCategory.mapping()[ControlCategory.EMAIL],
542
+ PolicyType.EMAIL_CONTENT: ControlCategory.mapping()[ControlCategory.EMAIL],
543
+ PolicyType.EMAIL_MALWARE: ControlCategory.mapping()[ControlCategory.EMAIL],
544
+ PolicyType.EMAIL_ATTACHMENT: ControlCategory.mapping()[
545
+ ControlCategory.EMAIL
546
+ ],
547
+ PolicyType.EMAIL_LINKS: ControlCategory.mapping()[ControlCategory.EMAIL],
548
+ PolicyType.EMAIL_DKIM: ControlCategory.mapping()[ControlCategory.EMAIL],
549
+ PolicyType.DEVICE_COMPLIANCE: [Control.INTUNE],
550
+ PolicyType.IDENTITY_MFA: ControlCategory.mapping()[
551
+ ControlCategory.IDENTITY
552
+ ],
553
+ PolicyType.HOST_FIREWALL: [Control.INTUNE],
554
+ PolicyType.NETWORK_FIREWALL: ControlCategory.mapping()[
555
+ ControlCategory.NETWORK
556
+ ],
557
+ PolicyType.INTEL_BELOW_OS: [Control.INTEL_INTUNE],
558
+ PolicyType.INTEL_OS: [Control.INTEL_INTUNE],
559
+ PolicyType.INTEL_TDT: [Control.INTEL_INTUNE],
560
+ PolicyType.INTEL_CHIP: [Control.INTEL_INTUNE],
561
+ PolicyType.DISK_ENCRYPTION: [Control.INTUNE],
562
+ PolicyType.ASR: [Control.INTUNE],
563
+ }
564
+
524
565
 
525
566
  class Platform(Enum, metaclass=MissingItem):
526
567
  INVALID = 0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: prelude-sdk-beta
3
- Version: 1427
3
+ Version: 1430
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-beta
3
- version = 1427
3
+ version = 1430
4
4
  author = Prelude Research
5
5
  author_email = support@preludesecurity.com
6
6
  description = For interacting with the Prelude API
@@ -168,6 +168,16 @@ class TestScmPerControl:
168
168
  raise e
169
169
 
170
170
  def test_evaluation(self, unwrap, control):
171
+ def _wait_for_policies(control, instance_id, category):
172
+ timeout = time.time() + 300
173
+ while time.time() < timeout:
174
+ evaluation = unwrap(self.scm.evaluation)(self.scm, control, instance_id)
175
+ evaluation = evaluation[f"{category}_evaluation"]
176
+ if len(evaluation["policies"]) > 0:
177
+ return evaluation
178
+ time.sleep(5)
179
+ assert False, "Timed out waiting for policies to show up in evaluation"
180
+
171
181
  instance_id = pytest.controls.get(control.value)
172
182
  assert instance_id
173
183
  evaluation = unwrap(self.scm.evaluation)(self.scm, control, instance_id)
@@ -178,7 +188,7 @@ class TestScmPerControl:
178
188
  control.control_category == ControlCategory.XDR
179
189
  or control == Control.INTUNE
180
190
  ):
181
- assert len(evaluation["policies"]) > 0
191
+ evaluation = _wait_for_policies(control, instance_id, "endpoint")
182
192
  assert {
183
193
  "excepted",
184
194
  "id",
@@ -194,19 +204,14 @@ class TestScmPerControl:
194
204
  elif "user_evaluation" in evaluation:
195
205
  evaluation = evaluation["user_evaluation"]
196
206
  assert {"policies"} == evaluation.keys()
197
- assert len(evaluation["policies"]) > 0
198
- assert {
199
- "excepted",
200
- "id",
201
- "name",
202
- "noncompliant_hostnames",
203
- "settings",
204
- "user_count",
205
- } == evaluation["policies"][0].keys()
207
+ evaluation = _wait_for_policies(control, instance_id, "user")
208
+ assert {"excepted", "id", "name", "settings", "user_count"} == evaluation[
209
+ "policies"
210
+ ][0].keys()
206
211
  elif "inbox_evaluation" in evaluation:
207
212
  evaluation = evaluation["inbox_evaluation"]
208
213
  assert {"policies"} == evaluation.keys()
209
- assert len(evaluation["policies"]) > 0
214
+ evaluation = _wait_for_policies(control, instance_id, "inbox")
210
215
  assert {"excepted", "id", "name", "settings", "inbox_count"} == evaluation[
211
216
  "policies"
212
217
  ][0].keys()
File without changes