contentctl 4.4.4__tar.gz → 4.4.5__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 (172) hide show
  1. {contentctl-4.4.4 → contentctl-4.4.5}/PKG-INFO +1 -1
  2. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/actions/detection_testing/GitService.py +17 -6
  3. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/actions/new_content.py +1 -2
  4. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/objects/abstract_security_content_objects/detection_abstract.py +1 -0
  5. {contentctl-4.4.4 → contentctl-4.4.5}/pyproject.toml +1 -1
  6. {contentctl-4.4.4 → contentctl-4.4.5}/LICENSE.md +0 -0
  7. {contentctl-4.4.4 → contentctl-4.4.5}/README.md +0 -0
  8. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/__init__.py +0 -0
  9. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/actions/build.py +0 -0
  10. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/actions/deploy_acs.py +0 -0
  11. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/actions/detection_testing/DetectionTestingManager.py +0 -0
  12. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/actions/detection_testing/generate_detection_coverage_badge.py +0 -0
  13. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/actions/detection_testing/infrastructures/DetectionTestingInfrastructure.py +0 -0
  14. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/actions/detection_testing/infrastructures/DetectionTestingInfrastructureContainer.py +0 -0
  15. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/actions/detection_testing/infrastructures/DetectionTestingInfrastructureServer.py +0 -0
  16. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/actions/detection_testing/progress_bar.py +0 -0
  17. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/actions/detection_testing/views/DetectionTestingView.py +0 -0
  18. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/actions/detection_testing/views/DetectionTestingViewCLI.py +0 -0
  19. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/actions/detection_testing/views/DetectionTestingViewFile.py +0 -0
  20. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/actions/detection_testing/views/DetectionTestingViewWeb.py +0 -0
  21. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/actions/doc_gen.py +0 -0
  22. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/actions/initialize.py +0 -0
  23. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/actions/initialize_old.py +0 -0
  24. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/actions/inspect.py +0 -0
  25. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/actions/release_notes.py +0 -0
  26. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/actions/reporting.py +0 -0
  27. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/actions/test.py +0 -0
  28. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/actions/validate.py +0 -0
  29. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/api.py +0 -0
  30. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/contentctl.py +0 -0
  31. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/enrichments/attack_enrichment.py +0 -0
  32. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/enrichments/cve_enrichment.py +0 -0
  33. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/enrichments/splunk_app_enrichment.py +0 -0
  34. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/helper/link_validator.py +0 -0
  35. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/helper/logger.py +0 -0
  36. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/helper/splunk_app.py +0 -0
  37. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/helper/utils.py +0 -0
  38. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/input/director.py +0 -0
  39. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/input/new_content_questions.py +0 -0
  40. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/input/yml_reader.py +0 -0
  41. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/objects/abstract_security_content_objects/security_content_object_abstract.py +0 -0
  42. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/objects/alert_action.py +0 -0
  43. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/objects/annotated_types.py +0 -0
  44. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/objects/atomic.py +0 -0
  45. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/objects/base_test.py +0 -0
  46. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/objects/base_test_result.py +0 -0
  47. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/objects/baseline.py +0 -0
  48. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/objects/baseline_tags.py +0 -0
  49. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/objects/config.py +0 -0
  50. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/objects/constants.py +0 -0
  51. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/objects/correlation_search.py +0 -0
  52. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/objects/dashboard.py +0 -0
  53. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/objects/data_source.py +0 -0
  54. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/objects/deployment.py +0 -0
  55. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/objects/deployment_email.py +0 -0
  56. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/objects/deployment_notable.py +0 -0
  57. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/objects/deployment_phantom.py +0 -0
  58. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/objects/deployment_rba.py +0 -0
  59. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/objects/deployment_scheduling.py +0 -0
  60. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/objects/deployment_slack.py +0 -0
  61. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/objects/detection.py +0 -0
  62. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/objects/detection_metadata.py +0 -0
  63. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/objects/detection_stanza.py +0 -0
  64. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/objects/detection_tags.py +0 -0
  65. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/objects/drilldown.py +0 -0
  66. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/objects/enums.py +0 -0
  67. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/objects/errors.py +0 -0
  68. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/objects/event_source.py +0 -0
  69. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/objects/integration_test.py +0 -0
  70. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/objects/integration_test_result.py +0 -0
  71. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/objects/investigation.py +0 -0
  72. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/objects/investigation_tags.py +0 -0
  73. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/objects/lookup.py +0 -0
  74. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/objects/macro.py +0 -0
  75. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/objects/manual_test.py +0 -0
  76. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/objects/manual_test_result.py +0 -0
  77. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/objects/mitre_attack_enrichment.py +0 -0
  78. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/objects/notable_action.py +0 -0
  79. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/objects/notable_event.py +0 -0
  80. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/objects/observable.py +0 -0
  81. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/objects/playbook.py +0 -0
  82. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/objects/playbook_tags.py +0 -0
  83. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/objects/risk_analysis_action.py +0 -0
  84. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/objects/risk_event.py +0 -0
  85. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/objects/risk_object.py +0 -0
  86. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/objects/savedsearches_conf.py +0 -0
  87. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/objects/security_content_object.py +0 -0
  88. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/objects/story.py +0 -0
  89. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/objects/story_tags.py +0 -0
  90. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/objects/test_attack_data.py +0 -0
  91. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/objects/test_group.py +0 -0
  92. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/objects/threat_object.py +0 -0
  93. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/objects/throttling.py +0 -0
  94. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/objects/unit_test.py +0 -0
  95. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/objects/unit_test_baseline.py +0 -0
  96. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/objects/unit_test_result.py +0 -0
  97. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/output/api_json_output.py +0 -0
  98. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/output/attack_nav_output.py +0 -0
  99. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/output/attack_nav_writer.py +0 -0
  100. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/output/conf_output.py +0 -0
  101. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/output/conf_writer.py +0 -0
  102. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/output/data_source_writer.py +0 -0
  103. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/output/detection_writer.py +0 -0
  104. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/output/doc_md_output.py +0 -0
  105. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/output/jinja_writer.py +0 -0
  106. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/output/json_writer.py +0 -0
  107. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/output/new_content_yml_output.py +0 -0
  108. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/output/svg_output.py +0 -0
  109. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/output/templates/analyticstories_detections.j2 +0 -0
  110. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/output/templates/analyticstories_investigations.j2 +0 -0
  111. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/output/templates/analyticstories_stories.j2 +0 -0
  112. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/output/templates/app.conf.j2 +0 -0
  113. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/output/templates/app.manifest.j2 +0 -0
  114. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/output/templates/collections.j2 +0 -0
  115. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/output/templates/content-version.j2 +0 -0
  116. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/output/templates/detection_count.j2 +0 -0
  117. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/output/templates/detection_coverage.j2 +0 -0
  118. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/output/templates/doc_detection_page.j2 +0 -0
  119. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/output/templates/doc_detections.j2 +0 -0
  120. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/output/templates/doc_navigation.j2 +0 -0
  121. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/output/templates/doc_navigation_pages.j2 +0 -0
  122. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/output/templates/doc_playbooks.j2 +0 -0
  123. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/output/templates/doc_playbooks_page.j2 +0 -0
  124. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/output/templates/doc_stories.j2 +0 -0
  125. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/output/templates/doc_story_page.j2 +0 -0
  126. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/output/templates/es_investigations_investigations.j2 +0 -0
  127. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/output/templates/es_investigations_stories.j2 +0 -0
  128. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/output/templates/header.j2 +0 -0
  129. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/output/templates/macros.j2 +0 -0
  130. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/output/templates/panel.j2 +0 -0
  131. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/output/templates/savedsearches_baselines.j2 +0 -0
  132. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/output/templates/savedsearches_detections.j2 +0 -0
  133. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/output/templates/savedsearches_investigations.j2 +0 -0
  134. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/output/templates/server.conf.j2 +0 -0
  135. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/output/templates/transforms.j2 +0 -0
  136. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/output/templates/workflow_actions.j2 +0 -0
  137. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/output/yml_output.py +0 -0
  138. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/output/yml_writer.py +0 -0
  139. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/templates/README.md +0 -0
  140. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/templates/app_default.yml +0 -0
  141. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/templates/app_template/README/essoc_story_detail.txt +0 -0
  142. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/templates/app_template/README/essoc_summary.txt +0 -0
  143. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/templates/app_template/README/essoc_usage_dashboard.txt +0 -0
  144. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/templates/app_template/README.md +0 -0
  145. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/templates/app_template/default/analytic_stories.conf +0 -0
  146. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/templates/app_template/default/commands.conf +0 -0
  147. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/templates/app_template/default/data/ui/nav/default.xml +0 -0
  148. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/templates/app_template/default/data/ui/views/escu_summary.xml +0 -0
  149. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/templates/app_template/default/data/ui/views/feedback.xml +0 -0
  150. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/templates/app_template/default/use_case_library.conf +0 -0
  151. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/templates/app_template/lookups/mitre_enrichment.csv +0 -0
  152. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/templates/app_template/metadata/default.meta +0 -0
  153. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/templates/app_template/static/appIcon.png +0 -0
  154. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/templates/app_template/static/appIconAlt.png +0 -0
  155. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/templates/app_template/static/appIconAlt_2x.png +0 -0
  156. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/templates/app_template/static/appIcon_2x.png +0 -0
  157. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/templates/data_sources/sysmon_eventid_1.yml +0 -0
  158. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/templates/datamodels_cim.conf +0 -0
  159. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/templates/datamodels_custom.conf +0 -0
  160. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/templates/deployments/escu_default_configuration_anomaly.yml +0 -0
  161. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/templates/deployments/escu_default_configuration_baseline.yml +0 -0
  162. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/templates/deployments/escu_default_configuration_correlation.yml +0 -0
  163. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/templates/deployments/escu_default_configuration_hunting.yml +0 -0
  164. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/templates/deployments/escu_default_configuration_ttp.yml +0 -0
  165. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/templates/detections/application/.gitkeep +0 -0
  166. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/templates/detections/cloud/.gitkeep +0 -0
  167. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/templates/detections/endpoint/anomalous_usage_of_7zip.yml +0 -0
  168. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/templates/detections/network/.gitkeep +0 -0
  169. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/templates/detections/web/.gitkeep +0 -0
  170. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/templates/macros/security_content_ctime.yml +0 -0
  171. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/templates/macros/security_content_summariesonly.yml +0 -0
  172. {contentctl-4.4.4 → contentctl-4.4.5}/contentctl/templates/stories/cobalt_strike.yml +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: contentctl
3
- Version: 4.4.4
3
+ Version: 4.4.5
4
4
  Summary: Splunk Content Control Tool
5
5
  License: Apache 2.0
6
6
  Author: STRT
@@ -13,6 +13,7 @@ if TYPE_CHECKING:
13
13
  from contentctl.objects.macro import Macro
14
14
  from contentctl.objects.lookup import Lookup
15
15
  from contentctl.objects.detection import Detection
16
+ from contentctl.objects.data_source import DataSource
16
17
  from contentctl.objects.security_content_object import SecurityContentObject
17
18
  from contentctl.objects.config import test_common, All, Changes, Selected
18
19
 
@@ -67,9 +68,12 @@ class GitService(BaseModel):
67
68
 
68
69
  #Make a filename to content map
69
70
  filepath_to_content_map = { obj.file_path:obj for (_,obj) in self.director.name_to_content_map.items()}
70
- updated_detections:set[Detection] = set()
71
- updated_macros:set[Macro] = set()
72
- updated_lookups:set[Lookup] = set()
71
+
72
+ updated_detections: set[Detection] = set()
73
+ updated_macros: set[Macro] = set()
74
+ updated_lookups: set[Lookup] = set()
75
+ updated_datasources: set[DataSource] = set()
76
+
73
77
 
74
78
  for diff in all_diffs:
75
79
  if type(diff) == pygit2.Patch:
@@ -90,6 +94,13 @@ class GitService(BaseModel):
90
94
  updated_macros.add(macroObject)
91
95
  else:
92
96
  raise Exception(f"Error getting macro object for file {str(decoded_path)}")
97
+
98
+ elif decoded_path.is_relative_to(self.config.path/"data_sources") and decoded_path.suffix == ".yml":
99
+ datasourceObject = filepath_to_content_map.get(decoded_path, None)
100
+ if isinstance(datasourceObject, DataSource):
101
+ updated_datasources.add(datasourceObject)
102
+ else:
103
+ raise Exception(f"Error getting data source object for file {str(decoded_path)}")
93
104
 
94
105
  elif decoded_path.is_relative_to(self.config.path/"lookups"):
95
106
  # We need to convert this to a yml. This means we will catch
@@ -115,7 +126,6 @@ class GitService(BaseModel):
115
126
  # Detected a changed .mlmodel file. However, since we do not have testing for these detections at
116
127
  # this time, we will ignore this change.
117
128
  updatedLookup = None
118
-
119
129
 
120
130
  else:
121
131
  raise Exception(f"Detected a changed file in the lookups/ directory '{str(decoded_path)}'.\n"
@@ -136,7 +146,8 @@ class GitService(BaseModel):
136
146
 
137
147
  # If a detection has at least one dependency on changed content,
138
148
  # then we must test it again
139
- changed_macros_and_lookups:set[SecurityContentObject] = updated_macros.union(updated_lookups)
149
+
150
+ changed_macros_and_lookups_and_datasources:set[SecurityContentObject] = updated_macros.union(updated_lookups, updated_datasources)
140
151
 
141
152
  for detection in self.director.detections:
142
153
  if detection in updated_detections:
@@ -144,7 +155,7 @@ class GitService(BaseModel):
144
155
  # to add it again
145
156
  continue
146
157
 
147
- for obj in changed_macros_and_lookups:
158
+ for obj in changed_macros_and_lookups_and_datasources:
148
159
  if obj in detection.get_content_dependencies():
149
160
  updated_detections.add(detection)
150
161
  break
@@ -29,8 +29,7 @@ class NewContent:
29
29
  answers['date'] = datetime.today().strftime('%Y-%m-%d')
30
30
  answers['author'] = answers['detection_author']
31
31
  del answers['detection_author']
32
- answers['data_sources'] = answers['data_source']
33
- del answers['data_source']
32
+ answers['data_source'] = answers['data_source']
34
33
  answers['type'] = answers['detection_type']
35
34
  del answers['detection_type']
36
35
  answers['status'] = "production" #start everything as production since that's what we INTEND the content to become
@@ -689,6 +689,7 @@ class Detection_Abstract(SecurityContentObject):
689
689
  objects: list[SecurityContentObject] = []
690
690
  objects += self.macros
691
691
  objects += self.lookups
692
+ objects += self.data_source_objects
692
693
  return objects
693
694
 
694
695
  @field_validator("deployment", mode="before")
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "contentctl"
3
- version = "4.4.4"
3
+ version = "4.4.5"
4
4
 
5
5
  description = "Splunk Content Control Tool"
6
6
  authors = ["STRT <research@splunk.com>"]
File without changes
File without changes
File without changes