contentctl 5.5.5__tar.gz → 5.5.7__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 (171) hide show
  1. {contentctl-5.5.5 → contentctl-5.5.7}/PKG-INFO +2 -2
  2. contentctl-5.5.7/contentctl/objects/playbook_tags.py +294 -0
  3. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/output/attack_nav_output.py +1 -1
  4. {contentctl-5.5.5 → contentctl-5.5.7}/pyproject.toml +6 -2
  5. contentctl-5.5.5/contentctl/objects/playbook_tags.py +0 -60
  6. {contentctl-5.5.5 → contentctl-5.5.7}/LICENSE.md +0 -0
  7. {contentctl-5.5.5 → contentctl-5.5.7}/README.md +0 -0
  8. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/__init__.py +0 -0
  9. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/actions/build.py +0 -0
  10. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/actions/deploy_acs.py +0 -0
  11. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/actions/detection_testing/DetectionTestingManager.py +0 -0
  12. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/actions/detection_testing/GitService.py +0 -0
  13. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/actions/detection_testing/generate_detection_coverage_badge.py +0 -0
  14. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/actions/detection_testing/infrastructures/DetectionTestingInfrastructure.py +0 -0
  15. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/actions/detection_testing/infrastructures/DetectionTestingInfrastructureContainer.py +0 -0
  16. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/actions/detection_testing/infrastructures/DetectionTestingInfrastructureServer.py +0 -0
  17. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/actions/detection_testing/progress_bar.py +0 -0
  18. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/actions/detection_testing/views/DetectionTestingView.py +0 -0
  19. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/actions/detection_testing/views/DetectionTestingViewCLI.py +0 -0
  20. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/actions/detection_testing/views/DetectionTestingViewFile.py +0 -0
  21. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/actions/detection_testing/views/DetectionTestingViewWeb.py +0 -0
  22. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/actions/doc_gen.py +0 -0
  23. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/actions/initialize.py +0 -0
  24. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/actions/inspect.py +0 -0
  25. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/actions/new_content.py +0 -0
  26. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/actions/release_notes.py +0 -0
  27. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/actions/reporting.py +0 -0
  28. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/actions/test.py +0 -0
  29. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/actions/validate.py +0 -0
  30. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/api.py +0 -0
  31. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/contentctl.py +0 -0
  32. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/enrichments/attack_enrichment.py +0 -0
  33. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/enrichments/cve_enrichment.py +0 -0
  34. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/enrichments/splunk_app_enrichment.py +0 -0
  35. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/helper/link_validator.py +0 -0
  36. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/helper/logger.py +0 -0
  37. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/helper/splunk_app.py +0 -0
  38. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/helper/utils.py +0 -0
  39. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/input/director.py +0 -0
  40. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/input/new_content_questions.py +0 -0
  41. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/input/yml_reader.py +0 -0
  42. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/objects/abstract_security_content_objects/detection_abstract.py +0 -0
  43. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/objects/abstract_security_content_objects/security_content_object_abstract.py +0 -0
  44. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/objects/alert_action.py +0 -0
  45. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/objects/annotated_types.py +0 -0
  46. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/objects/atomic.py +0 -0
  47. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/objects/base_security_event.py +0 -0
  48. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/objects/base_test.py +0 -0
  49. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/objects/base_test_result.py +0 -0
  50. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/objects/baseline.py +0 -0
  51. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/objects/baseline_tags.py +0 -0
  52. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/objects/config.py +0 -0
  53. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/objects/constants.py +0 -0
  54. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/objects/content_versioning_service.py +0 -0
  55. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/objects/correlation_search.py +0 -0
  56. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/objects/dashboard.py +0 -0
  57. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/objects/data_source.py +0 -0
  58. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/objects/deployment.py +0 -0
  59. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/objects/deployment_email.py +0 -0
  60. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/objects/deployment_notable.py +0 -0
  61. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/objects/deployment_phantom.py +0 -0
  62. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/objects/deployment_rba.py +0 -0
  63. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/objects/deployment_scheduling.py +0 -0
  64. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/objects/deployment_slack.py +0 -0
  65. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/objects/detection.py +0 -0
  66. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/objects/detection_metadata.py +0 -0
  67. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/objects/detection_stanza.py +0 -0
  68. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/objects/detection_tags.py +0 -0
  69. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/objects/drilldown.py +0 -0
  70. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/objects/enums.py +0 -0
  71. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/objects/errors.py +0 -0
  72. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/objects/integration_test.py +0 -0
  73. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/objects/integration_test_result.py +0 -0
  74. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/objects/investigation.py +0 -0
  75. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/objects/investigation_tags.py +0 -0
  76. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/objects/lookup.py +0 -0
  77. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/objects/macro.py +0 -0
  78. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/objects/manual_test.py +0 -0
  79. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/objects/manual_test_result.py +0 -0
  80. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/objects/mitre_attack_enrichment.py +0 -0
  81. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/objects/notable_action.py +0 -0
  82. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/objects/notable_event.py +0 -0
  83. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/objects/playbook.py +0 -0
  84. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/objects/rba.py +0 -0
  85. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/objects/removed_security_content_object.py +0 -0
  86. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/objects/risk_analysis_action.py +0 -0
  87. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/objects/risk_event.py +0 -0
  88. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/objects/risk_object.py +0 -0
  89. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/objects/savedsearches_conf.py +0 -0
  90. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/objects/security_content_object.py +0 -0
  91. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/objects/story.py +0 -0
  92. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/objects/story_tags.py +0 -0
  93. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/objects/test_attack_data.py +0 -0
  94. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/objects/test_group.py +0 -0
  95. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/objects/threat_object.py +0 -0
  96. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/objects/throttling.py +0 -0
  97. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/objects/unit_test.py +0 -0
  98. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/objects/unit_test_baseline.py +0 -0
  99. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/objects/unit_test_result.py +0 -0
  100. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/output/api_json_output.py +0 -0
  101. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/output/attack_nav_writer.py +0 -0
  102. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/output/conf_output.py +0 -0
  103. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/output/conf_writer.py +0 -0
  104. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/output/doc_md_output.py +0 -0
  105. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/output/jinja_writer.py +0 -0
  106. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/output/json_writer.py +0 -0
  107. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/output/runtime_csv_writer.py +0 -0
  108. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/output/svg_output.py +0 -0
  109. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/output/templates/analyticstories_detections.j2 +0 -0
  110. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/output/templates/analyticstories_investigations.j2 +0 -0
  111. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/output/templates/analyticstories_stories.j2 +0 -0
  112. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/output/templates/app.conf.j2 +0 -0
  113. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/output/templates/app.manifest.j2 +0 -0
  114. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/output/templates/collections.j2 +0 -0
  115. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/output/templates/content-version.j2 +0 -0
  116. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/output/templates/detection_count.j2 +0 -0
  117. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/output/templates/detection_coverage.j2 +0 -0
  118. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/output/templates/doc_detection_page.j2 +0 -0
  119. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/output/templates/doc_detections.j2 +0 -0
  120. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/output/templates/doc_navigation.j2 +0 -0
  121. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/output/templates/doc_navigation_pages.j2 +0 -0
  122. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/output/templates/doc_playbooks.j2 +0 -0
  123. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/output/templates/doc_playbooks_page.j2 +0 -0
  124. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/output/templates/doc_stories.j2 +0 -0
  125. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/output/templates/doc_story_page.j2 +0 -0
  126. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/output/templates/es_investigations_investigations.j2 +0 -0
  127. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/output/templates/es_investigations_stories.j2 +0 -0
  128. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/output/templates/header.j2 +0 -0
  129. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/output/templates/macros.j2 +0 -0
  130. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/output/templates/panel.j2 +0 -0
  131. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/output/templates/savedsearches_baselines.j2 +0 -0
  132. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/output/templates/savedsearches_detections.j2 +0 -0
  133. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/output/templates/savedsearches_investigations.j2 +0 -0
  134. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/output/templates/server.conf.j2 +0 -0
  135. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/output/templates/transforms.j2 +0 -0
  136. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/output/templates/workflow_actions.j2 +0 -0
  137. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/output/yml_writer.py +0 -0
  138. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/templates/README.md +0 -0
  139. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/templates/app_default.yml +0 -0
  140. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/templates/app_template/README/essoc_story_detail.txt +0 -0
  141. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/templates/app_template/README/essoc_summary.txt +0 -0
  142. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/templates/app_template/README/essoc_usage_dashboard.txt +0 -0
  143. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/templates/app_template/README.md +0 -0
  144. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/templates/app_template/default/analytic_stories.conf +0 -0
  145. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/templates/app_template/default/commands.conf +0 -0
  146. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/templates/app_template/default/data/ui/nav/default.xml +0 -0
  147. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/templates/app_template/default/data/ui/views/escu_summary.xml +0 -0
  148. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/templates/app_template/default/data/ui/views/feedback.xml +0 -0
  149. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/templates/app_template/default/use_case_library.conf +0 -0
  150. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/templates/app_template/lookups/mitre_enrichment.csv +0 -0
  151. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/templates/app_template/metadata/default.meta +0 -0
  152. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/templates/app_template/static/appIcon.png +0 -0
  153. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/templates/app_template/static/appIconAlt.png +0 -0
  154. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/templates/app_template/static/appIconAlt_2x.png +0 -0
  155. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/templates/app_template/static/appIcon_2x.png +0 -0
  156. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/templates/data_sources/sysmon_eventid_1.yml +0 -0
  157. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/templates/datamodels_cim.conf +0 -0
  158. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/templates/datamodels_custom.conf +0 -0
  159. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/templates/deployments/escu_default_configuration_anomaly.yml +0 -0
  160. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/templates/deployments/escu_default_configuration_baseline.yml +0 -0
  161. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/templates/deployments/escu_default_configuration_correlation.yml +0 -0
  162. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/templates/deployments/escu_default_configuration_hunting.yml +0 -0
  163. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/templates/deployments/escu_default_configuration_ttp.yml +0 -0
  164. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/templates/detections/application/.gitkeep +0 -0
  165. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/templates/detections/cloud/.gitkeep +0 -0
  166. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/templates/detections/endpoint/anomalous_usage_of_7zip.yml +0 -0
  167. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/templates/detections/network/.gitkeep +0 -0
  168. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/templates/detections/web/.gitkeep +0 -0
  169. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/templates/macros/security_content_ctime.yml +0 -0
  170. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/templates/macros/security_content_summariesonly.yml +0 -0
  171. {contentctl-5.5.5 → contentctl-5.5.7}/contentctl/templates/stories/cobalt_strike.yml +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: contentctl
3
- Version: 5.5.5
3
+ Version: 5.5.7
4
4
  Summary: Splunk Content Control Tool
5
5
  License: Apache 2.0
6
6
  Author: STRT
@@ -27,7 +27,7 @@ Requires-Dist: semantic-version (>=2.10.0,<3.0.0)
27
27
  Requires-Dist: setuptools (>=69.5.1,<81.0.0)
28
28
  Requires-Dist: splunk-sdk (>=2.0.2,<3.0.0)
29
29
  Requires-Dist: tqdm (>=4.66.5,<5.0.0)
30
- Requires-Dist: tyro (>=0.9.2,<0.10.0)
30
+ Requires-Dist: tyro (>=0.9.2,<0.9.23)
31
31
  Requires-Dist: xmltodict (>=0.13,<0.15)
32
32
  Description-Content-Type: text/markdown
33
33
 
@@ -0,0 +1,294 @@
1
+ from __future__ import annotations
2
+ from typing import Optional, List
3
+ from pydantic import BaseModel, Field, ConfigDict
4
+ import enum
5
+ from contentctl.objects.detection import Detection
6
+
7
+
8
+ class PlaybookProduct(str, enum.Enum):
9
+ SPLUNK_SOAR = "Splunk SOAR"
10
+
11
+
12
+ class PlaybookUseCase(str, enum.Enum):
13
+ COLLECTION = "Collection"
14
+ ENDPOINT = "Endpoint"
15
+ ENRICHMENT = "Enrichment"
16
+ MALWARE = "Malware"
17
+ PHISHING = "Phishing"
18
+ RESPONSE = "Response"
19
+ UTILITY = "Utility"
20
+
21
+
22
+ class PlaybookType(str, enum.Enum):
23
+ INPUT = "Input"
24
+ AUTOMATION = "Automation"
25
+
26
+
27
+ class VpeType(str, enum.Enum):
28
+ MODERN = "Modern"
29
+ CLASSIC = "Classic"
30
+
31
+
32
+ class DefendTechnique(str, enum.Enum):
33
+ D3_AA = "D3-AA"
34
+ D3_ABPI = "D3-ABPI"
35
+ D3_ACA = "D3-ACA"
36
+ D3_ACH = "D3-ACH"
37
+ D3_AH = "D3-AH"
38
+ D3_AI = "D3-AI"
39
+ D3_AL = "D3-AL"
40
+ D3_ALLM = "D3-ALLM"
41
+ D3_AM = "D3-AM"
42
+ D3_AMED = "D3-AMED"
43
+ D3_ANAA = "D3-ANAA"
44
+ D3_ANCI = "D3-ANCI"
45
+ D3_ANET = "D3-ANET"
46
+ D3_APA = "D3-APA"
47
+ D3_APLM = "D3-APLM"
48
+ D3_AVE = "D3-AVE"
49
+ D3_AZET = "D3-AZET"
50
+ D3_BA = "D3-BA"
51
+ D3_BAN = "D3-BAN"
52
+ D3_BDI = "D3-BDI"
53
+ D3_BSE = "D3-BSE"
54
+ D3_CA = "D3-CA"
55
+ D3_CAA = "D3-CAA"
56
+ D3_CBAN = "D3-CBAN"
57
+ D3_CCSA = "D3-CCSA"
58
+ D3_CE = "D3-CE"
59
+ D3_CERO = "D3-CERO"
60
+ D3_CF = "D3-CF"
61
+ D3_CFC = "D3-CFC"
62
+ D3_CH = "D3-CH"
63
+ D3_CHN = "D3-CHN"
64
+ D3_CI = "D3-CI"
65
+ D3_CIA = "D3-CIA"
66
+ D3_CM = "D3-CM"
67
+ D3_CNE = "D3-CNE"
68
+ D3_CNR = "D3-CNR"
69
+ D3_CNS = "D3-CNS"
70
+ D3_CP = "D3-CP"
71
+ D3_CQ = "D3-CQ"
72
+ D3_CR = "D3-CR"
73
+ D3_CRO = "D3-CRO"
74
+ D3_CS = "D3-CS"
75
+ D3_CSPP = "D3-CSPP"
76
+ D3_CTS = "D3-CTS"
77
+ D3_CV = "D3-CV"
78
+ D3_DA = "D3-DA"
79
+ D3_DAM = "D3-DAM"
80
+ D3_DCE = "D3-DCE"
81
+ D3_DE = "D3-DE"
82
+ D3_DEM = "D3-DEM"
83
+ D3_DENCR = "D3-DENCR"
84
+ D3_DF = "D3-DF"
85
+ D3_DI = "D3-DI"
86
+ D3_DKE = "D3-DKE"
87
+ D3_DKF = "D3-DKF"
88
+ D3_DKP = "D3-DKP"
89
+ D3_DLIC = "D3-DLIC"
90
+ D3_DNR = "D3-DNR"
91
+ D3_DNRA = "D3-DNRA"
92
+ D3_DNSAL = "D3-DNSAL"
93
+ D3_DNSCE = "D3-DNSCE"
94
+ D3_DNSDL = "D3-DNSDL"
95
+ D3_DNSTA = "D3-DNSTA"
96
+ D3_DO = "D3-DO"
97
+ D3_DP = "D3-DP"
98
+ D3_DPLM = "D3-DPLM"
99
+ D3_DPR = "D3-DPR"
100
+ D3_DQSA = "D3-DQSA"
101
+ D3_DRT = "D3-DRT"
102
+ D3_DST = "D3-DST"
103
+ D3_DTP = "D3-DTP"
104
+ D3_DUC = "D3-DUC"
105
+ D3_EAL = "D3-EAL"
106
+ D3_EBWSAM = "D3-EBWSAM"
107
+ D3_EDL = "D3-EDL"
108
+ D3_EF = "D3-EF"
109
+ D3_EFA = "D3-EFA"
110
+ D3_EHB = "D3-EHB"
111
+ D3_EHPV = "D3-EHPV"
112
+ D3_EI = "D3-EI"
113
+ D3_ER = "D3-ER"
114
+ D3_ET = "D3-ET"
115
+ D3_FA = "D3-FA"
116
+ D3_FAPA = "D3-FAPA"
117
+ D3_FBA = "D3-FBA"
118
+ D3_FC = "D3-FC"
119
+ D3_FCA = "D3-FCA"
120
+ D3_FCDC = "D3-FCDC"
121
+ D3_FCOA = "D3-FCOA"
122
+ D3_FCR = "D3-FCR"
123
+ D3_FE = "D3-FE"
124
+ D3_FEMC = "D3-FEMC"
125
+ D3_FEV = "D3-FEV"
126
+ D3_FFV = "D3-FFV"
127
+ D3_FH = "D3-FH"
128
+ D3_FHRA = "D3-FHRA"
129
+ D3_FIM = "D3-FIM"
130
+ D3_FISV = "D3-FISV"
131
+ D3_FMBV = "D3-FMBV"
132
+ D3_FMCV = "D3-FMCV"
133
+ D3_FMVV = "D3-FMVV"
134
+ D3_FRDDL = "D3-FRDDL"
135
+ D3_FRIDL = "D3-FRIDL"
136
+ D3_FV = "D3-FV"
137
+ D3_HBPI = "D3-HBPI"
138
+ D3_HCI = "D3-HCI"
139
+ D3_HD = "D3-HD"
140
+ D3_HDDL = "D3-HDDL"
141
+ D3_HDL = "D3-HDL"
142
+ D3_HR = "D3-HR"
143
+ D3_HS = "D3-HS"
144
+ D3_IAA = "D3-IAA"
145
+ D3_IBCA = "D3-IBCA"
146
+ D3_ID = "D3-ID"
147
+ D3_IDA = "D3-IDA"
148
+ D3_IHN = "D3-IHN"
149
+ D3_IOPR = "D3-IOPR"
150
+ D3_IPCTA = "D3-IPCTA"
151
+ D3_IPRA = "D3-IPRA"
152
+ D3_IRA = "D3-IRA"
153
+ D3_IRV = "D3-IRV"
154
+ D3_ISVA = "D3-ISVA"
155
+ D3_ITF = "D3-ITF"
156
+ D3_JFAPA = "D3-JFAPA"
157
+ D3_KBPI = "D3-KBPI"
158
+ D3_LAM = "D3-LAM"
159
+ D3_LAMED = "D3-LAMED"
160
+ D3_LFAM = "D3-LFAM"
161
+ D3_LFP = "D3-LFP"
162
+ D3_LLM = "D3-LLM"
163
+ D3_MA = "D3-MA"
164
+ D3_MAN = "D3-MAN"
165
+ D3_MBSV = "D3-MBSV"
166
+ D3_MBT = "D3-MBT"
167
+ D3_MENCR = "D3-MENCR"
168
+ D3_MFA = "D3-MFA"
169
+ D3_MH = "D3-MH"
170
+ D3_NAM = "D3-NAM"
171
+ D3_NI = "D3-NI"
172
+ D3_NM = "D3-NM"
173
+ D3_NNI = "D3-NNI"
174
+ D3_NPC = "D3-NPC"
175
+ D3_NRAM = "D3-NRAM"
176
+ D3_NTA = "D3-NTA"
177
+ D3_NTCD = "D3-NTCD"
178
+ D3_NTF = "D3-NTF"
179
+ D3_NTPM = "D3-NTPM"
180
+ D3_NTSA = "D3-NTSA"
181
+ D3_NVA = "D3-NVA"
182
+ D3_OAM = "D3-OAM"
183
+ D3_ODM = "D3-ODM"
184
+ D3_OE = "D3-OE"
185
+ D3_OM = "D3-OM"
186
+ D3_ORA = "D3-ORA"
187
+ D3_OSM = "D3-OSM"
188
+ D3_OTF = "D3-OTF"
189
+ D3_OTP = "D3-OTP"
190
+ D3_PA = "D3-PA"
191
+ D3_PAM = "D3-PAM"
192
+ D3_PAN = "D3-PAN"
193
+ D3_PBWSAM = "D3-PBWSAM"
194
+ D3_PCA = "D3-PCA"
195
+ D3_PCSV = "D3-PCSV"
196
+ D3_PE = "D3-PE"
197
+ D3_PFV = "D3-PFV"
198
+ D3_PH = "D3-PH"
199
+ D3_PHDURA = "D3-PHDURA"
200
+ D3_PLA = "D3-PLA"
201
+ D3_PLLM = "D3-PLLM"
202
+ D3_PLM = "D3-PLM"
203
+ D3_PM = "D3-PM"
204
+ D3_PMAD = "D3-PMAD"
205
+ D3_PR = "D3-PR"
206
+ D3_PS = "D3-PS"
207
+ D3_PSA = "D3-PSA"
208
+ D3_PSEP = "D3-PSEP"
209
+ D3_PSMD = "D3-PSMD"
210
+ D3_PT = "D3-PT"
211
+ D3_PV = "D3-PV"
212
+ D3_PWA = "D3-PWA"
213
+ D3_RA = "D3-RA"
214
+ D3_RAM = "D3-RAM"
215
+ D3_RAPA = "D3-RAPA"
216
+ D3_RC = "D3-RC"
217
+ D3_RD = "D3-RD"
218
+ D3_RDI = "D3-RDI"
219
+ D3_RE = "D3-RE"
220
+ D3_RF = "D3-RF"
221
+ D3_RFAM = "D3-RFAM"
222
+ D3_RFS = "D3-RFS"
223
+ D3_RIC = "D3-RIC"
224
+ D3_RKD = "D3-RKD"
225
+ D3_RN = "D3-RN"
226
+ D3_RNA = "D3-RNA"
227
+ D3_RO = "D3-RO"
228
+ D3_RPA = "D3-RPA"
229
+ D3_RRID = "D3-RRID"
230
+ D3_RS = "D3-RS"
231
+ D3_RTA = "D3-RTA"
232
+ D3_RTSD = "D3-RTSD"
233
+ D3_RUAA = "D3-RUAA"
234
+ D3_SAOR = "D3-SAOR"
235
+ D3_SBV = "D3-SBV"
236
+ D3_SCA = "D3-SCA"
237
+ D3_SCF = "D3-SCF"
238
+ D3_SCH = "D3-SCH"
239
+ D3_SCP = "D3-SCP"
240
+ D3_SDA = "D3-SDA"
241
+ D3_SDM = "D3-SDM"
242
+ D3_SEA = "D3-SEA"
243
+ D3_SFA = "D3-SFA"
244
+ D3_SFCV = "D3-SFCV"
245
+ D3_SFV = "D3-SFV"
246
+ D3_SHN = "D3-SHN"
247
+ D3_SICA = "D3-SICA"
248
+ D3_SJA = "D3-SJA"
249
+ D3_SMRA = "D3-SMRA"
250
+ D3_SPP = "D3-SPP"
251
+ D3_SRA = "D3-SRA"
252
+ D3_SSC = "D3-SSC"
253
+ D3_ST = "D3-ST"
254
+ D3_SU = "D3-SU"
255
+ D3_SVCDM = "D3-SVCDM"
256
+ D3_SWI = "D3-SWI"
257
+ D3_SYSDM = "D3-SYSDM"
258
+ D3_SYSM = "D3-SYSM"
259
+ D3_SYSVA = "D3-SYSVA"
260
+ D3_TAAN = "D3-TAAN"
261
+ D3_TB = "D3-TB"
262
+ D3_TBA = "D3-TBA"
263
+ D3_TBI = "D3-TBI"
264
+ D3_TL = "D3-TL"
265
+ D3_UA = "D3-UA"
266
+ D3_UAP = "D3-UAP"
267
+ D3_UBA = "D3-UBA"
268
+ D3_UDTA = "D3-UDTA"
269
+ D3_UGLPA = "D3-UGLPA"
270
+ D3_ULA = "D3-ULA"
271
+ D3_URA = "D3-URA"
272
+ D3_USICA = "D3-USICA"
273
+ D3_VI = "D3-VI"
274
+ D3_VTV = "D3-VTV"
275
+ D3_WSAA = "D3-WSAA"
276
+ D3_WSAM = "D3-WSAM"
277
+
278
+
279
+ class PlaybookTag(BaseModel):
280
+ model_config = ConfigDict(extra="forbid")
281
+ analytic_story: Optional[list] = None
282
+ detections: Optional[list] = None
283
+ platform_tags: list[str] = Field(..., min_length=0)
284
+ playbook_type: PlaybookType = Field(...)
285
+ vpe_type: VpeType = Field(...)
286
+ playbook_fields: list[str] = Field([], min_length=0)
287
+ product: list[PlaybookProduct] = Field([], min_length=0)
288
+ use_cases: list[PlaybookUseCase] = Field([], min_length=0)
289
+ defend_technique_id: Optional[List[DefendTechnique]] = None
290
+
291
+ labels: list[str] = []
292
+ playbook_outputs: list[str] = []
293
+
294
+ detection_objects: list[Detection] = []
@@ -88,7 +88,7 @@ class AttackNavOutput:
88
88
  layer: LayerData = {
89
89
  "name": self.layer_name,
90
90
  "versions": {
91
- "attack": "14", # Update as needed
91
+ "attack": "17", # Update as needed
92
92
  "navigator": "5.1.0",
93
93
  "layer": "4.5",
94
94
  },
@@ -1,7 +1,7 @@
1
1
  [tool.poetry]
2
2
  name = "contentctl"
3
3
 
4
- version = "5.5.5"
4
+ version = "5.5.7"
5
5
 
6
6
  description = "Splunk Content Control Tool"
7
7
  authors = ["STRT <research@splunk.com>"]
@@ -28,7 +28,11 @@ semantic-version = "^2.10.0"
28
28
  bottle = ">=0.12.25,<0.14.0"
29
29
  tqdm = "^4.66.5"
30
30
  pygit2 = "^1.15.1"
31
- tyro = "^0.9.2"
31
+ #We are pinned to this version of tyro because 0.9.23 and above
32
+ #have an issue when parsing an extremely large number of files
33
+ #(in our testing great than 130) when using the mode:selected
34
+ #--mode.files command.
35
+ tyro = "^0.9.2,<0.9.23"
32
36
  gitpython = "^3.1.43"
33
37
  setuptools = ">=69.5.1,<81.0.0"
34
38
  rich = "^14.0.0"
@@ -1,60 +0,0 @@
1
- from __future__ import annotations
2
- from typing import Optional, List
3
- from pydantic import BaseModel, Field, ConfigDict
4
- import enum
5
- from contentctl.objects.detection import Detection
6
-
7
-
8
- class PlaybookProduct(str, enum.Enum):
9
- SPLUNK_SOAR = "Splunk SOAR"
10
-
11
-
12
- class PlaybookUseCase(str, enum.Enum):
13
- PHISHING = "Phishing"
14
- ENDPOINT = "Endpoint"
15
- ENRICHMENT = "Enrichment"
16
-
17
-
18
- class PlaybookType(str, enum.Enum):
19
- INPUT = "Input"
20
- AUTOMATION = "Automation"
21
-
22
-
23
- class VpeType(str, enum.Enum):
24
- MODERN = "Modern"
25
- CLASSIC = "Classic"
26
-
27
-
28
- class DefendTechnique(str, enum.Enum):
29
- D3_AL = "D3-AL"
30
- D3_DNSDL = "D3-DNSDL"
31
- D3_DA = "D3-DA"
32
- D3_IAA = "D3-IAA"
33
- D3_IRA = "D3-IRA"
34
- D3_OTF = "D3-OTF"
35
- D3_ER = "D3-ER"
36
- D3_RE = "D3-RE"
37
- D3_URA = "D3-URA"
38
- D3_DNRA = "D3-DNRA"
39
- D3_IPRA = "D3-IPRA"
40
- D3_FHRA = "D3-FHRA"
41
- D3_SRA = "D3-SRA"
42
- D3_RUAA = "D3-RUAA"
43
-
44
-
45
- class PlaybookTag(BaseModel):
46
- model_config = ConfigDict(extra="forbid")
47
- analytic_story: Optional[list] = None
48
- detections: Optional[list] = None
49
- platform_tags: list[str] = Field(..., min_length=0)
50
- playbook_type: PlaybookType = Field(...)
51
- vpe_type: VpeType = Field(...)
52
- playbook_fields: list[str] = Field([], min_length=0)
53
- product: list[PlaybookProduct] = Field([], min_length=0)
54
- use_cases: list[PlaybookUseCase] = Field([], min_length=0)
55
- defend_technique_id: Optional[List[DefendTechnique]] = None
56
-
57
- labels: list[str] = []
58
- playbook_outputs: list[str] = []
59
-
60
- detection_objects: list[Detection] = []
File without changes
File without changes
File without changes