contentctl 5.0.3__py3-none-any.whl → 5.0.4__py3-none-any.whl

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.
@@ -123,6 +123,8 @@ ES_MAX_STANZA_LENGTH = 99
123
123
  CONTENTCTL_DETECTION_STANZA_NAME_FORMAT_TEMPLATE = (
124
124
  "{app_label} - {detection_name} - Rule"
125
125
  )
126
+
127
+ CONTENTCTL_DASHBOARD_LABEL_TEMPLATE = "{app_label} - {dashboard_name}"
126
128
  CONTENTCTL_BASELINE_STANZA_NAME_FORMAT_TEMPLATE = "{app_label} - {detection_name}"
127
129
  CONTENTCTL_RESPONSE_TASK_NAME_FORMAT_TEMPLATE = (
128
130
  "{app_label} - {detection_name} - Response Task"
@@ -1,14 +1,16 @@
1
+ import json
2
+ import pathlib
3
+ from enum import StrEnum
1
4
  from typing import Any
2
- from pydantic import Field, Json, model_validator
3
5
 
4
- import pathlib
5
6
  from jinja2 import Environment
6
- import json
7
- from contentctl.objects.security_content_object import SecurityContentObject
7
+ from pydantic import Field, Json, model_validator
8
+
8
9
  from contentctl.objects.config import build
9
- from enum import StrEnum
10
+ from contentctl.objects.constants import CONTENTCTL_DASHBOARD_LABEL_TEMPLATE
11
+ from contentctl.objects.security_content_object import SecurityContentObject
10
12
 
11
- DEFAULT_DASHBAORD_JINJA2_TEMPLATE = """<dashboard version="2" theme="{{ dashboard.theme }}">
13
+ DEFAULT_DASHBOARD_JINJA2_TEMPLATE = """<dashboard version="2" theme="{{ dashboard.theme }}">
12
14
  <label>{{ dashboard.label(config) }}</label>
13
15
  <description></description>
14
16
  <definition><![CDATA[
@@ -31,7 +33,7 @@ class DashboardTheme(StrEnum):
31
33
 
32
34
  class Dashboard(SecurityContentObject):
33
35
  j2_template: str = Field(
34
- default=DEFAULT_DASHBAORD_JINJA2_TEMPLATE,
36
+ default=DEFAULT_DASHBOARD_JINJA2_TEMPLATE,
35
37
  description="Jinja2 Template used to construct the dashboard",
36
38
  )
37
39
  description: str = Field(
@@ -49,7 +51,9 @@ class Dashboard(SecurityContentObject):
49
51
  )
50
52
 
51
53
  def label(self, config: build) -> str:
52
- return f"{config.app.label} - {self.name}"
54
+ return CONTENTCTL_DASHBOARD_LABEL_TEMPLATE.format(
55
+ app_label=config.app.label, dashboard_name=self.name
56
+ )
53
57
 
54
58
  @model_validator(mode="before")
55
59
  @classmethod
@@ -98,7 +102,9 @@ class Dashboard(SecurityContentObject):
98
102
  return json.dumps(self.json_obj, indent=4)
99
103
 
100
104
  def getOutputFilepathRelativeToAppRoot(self, config: build) -> pathlib.Path:
101
- filename = f"{self.file_path.stem}.xml".lower()
105
+ # for clarity, the name of the dashboard file will follow the same convention
106
+ # as we use for detections, prefixing it with app_name -
107
+ filename = f"{self.label(config)}.xml"
102
108
  return pathlib.Path("default/data/ui/views") / filename
103
109
 
104
110
  def writeDashboardFile(self, j2_env: Environment, config: build):
@@ -1,7 +1,7 @@
1
1
  <nav search_view="search" color="#65A637">
2
2
  <view name="escu_summary" default="true"/>
3
- <view name="feedback"/>
4
3
  <view name="search"/>
5
- <view name="dashboards"/>
6
- <a href="http://docs.splunk.com/Documentation/ESSOC">Docs</a>
4
+ <collection label="Dashboards">
5
+ <view source="unclassified" match=" - "/>
6
+ </collection>
7
7
  </nav>
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: contentctl
3
- Version: 5.0.3
3
+ Version: 5.0.4
4
4
  Summary: Splunk Content Control Tool
5
5
  License: Apache 2.0
6
6
  Author: STRT
@@ -42,9 +42,9 @@ contentctl/objects/base_test_result.py,sha256=TYYzTPKWqp9rHTebWoid50uxAp_iALZour
42
42
  contentctl/objects/baseline.py,sha256=grzM56KCpROjMnJQIan-fG0LCYfRGA2GHui4FwBwb8A,3172
43
43
  contentctl/objects/baseline_tags.py,sha256=Eomy8y3HV-E6Lym5B5ZZTtsmQJYi6Jd4y8GZpTWGYgQ,1643
44
44
  contentctl/objects/config.py,sha256=3l8tFVwrBDpAnS7aBgj6to0Kc8_s4bxuZY5Bm5vel8k,48605
45
- contentctl/objects/constants.py,sha256=P4K07PX4_pL_n5jmBVn1BxtoFpjvhT8MuHOquhnEkdA,5465
45
+ contentctl/objects/constants.py,sha256=u7KI1uo5ggg1c0uSgmXGSsbjQUyqsNtmLH90fwQY2Eg,5537
46
46
  contentctl/objects/correlation_search.py,sha256=ab6v-0nbzujhTMpwaXynQiInWpRO1zB5KR4eZLCav_M,45234
47
- contentctl/objects/dashboard.py,sha256=qMSP76hkJo7PVsWr19hQW4eYoUqGTcRejaOEjlcA_DY,4198
47
+ contentctl/objects/dashboard.py,sha256=10nC4U1_brq8_lE_BBQcpFZqtvpbBuWk9W7tXc0B3c0,4501
48
48
  contentctl/objects/data_source.py,sha256=qt4W14DEwKGO69oLGdJeuYqbWvGkZ6j5Nz0R1RhDQEQ,1491
49
49
  contentctl/objects/deployment.py,sha256=FRsgsX2T1gvA_0A44_sFPr22rsedxXVIhtO7o9F7eZM,2902
50
50
  contentctl/objects/deployment_email.py,sha256=_Sdr_BNjvXECiFonRHLkiOrIQp3slnUaERbptqRbD0Q,206
@@ -135,7 +135,7 @@ contentctl/templates/app_template/README/essoc_usage_dashboard.txt,sha256=xYUKKV
135
135
  contentctl/templates/app_template/README.md,sha256=RT-J9bgRSFsEFgNr9qV6yc2LkfUH_uiMJ2RV4NM9Ymo,366
136
136
  contentctl/templates/app_template/default/analytic_stories.conf,sha256=zWuCOOl8SiP7Kit2s-de4KRu3HySLtBSXcp1QnJx0ec,168
137
137
  contentctl/templates/app_template/default/commands.conf,sha256=U2ccwUeGXKKKt5jo14QY5swi-p9_TSJtaNquOkeF3Yk,319
138
- contentctl/templates/app_template/default/data/ui/nav/default.xml,sha256=fKN53HZCtNJbQqq_5pP8e5-5m30DRrJittr6q5s6V_0,236
138
+ contentctl/templates/app_template/default/data/ui/nav/default.xml,sha256=_qdZXttnPgwGVw5xsqieYnR0o2Oc8ere9u1_Utw8bvY,214
139
139
  contentctl/templates/app_template/default/data/ui/views/escu_summary.xml,sha256=jQhkIthPgEEptCJ2wUCj2lWGHBvUl6JGsKkDfONloxI,8635
140
140
  contentctl/templates/app_template/default/data/ui/views/feedback.xml,sha256=uM71EMK2uFz8h68nOTNKGnYxob3HhE_caSL6yA-3H-k,696
141
141
  contentctl/templates/app_template/default/use_case_library.conf,sha256=zWuCOOl8SiP7Kit2s-de4KRu3HySLtBSXcp1QnJx0ec,168
@@ -161,8 +161,8 @@ contentctl/templates/detections/web/.gitkeep,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRk
161
161
  contentctl/templates/macros/security_content_ctime.yml,sha256=Gg1YNllHVsX_YB716H1SJLWzxXZEfuJlnsgB2fuyoHU,159
162
162
  contentctl/templates/macros/security_content_summariesonly.yml,sha256=9BYUxAl2E4Nwh8K19F3AJS8Ka7ceO6ZDBjFiO3l3LY0,162
163
163
  contentctl/templates/stories/cobalt_strike.yml,sha256=uj8idtDNOAIqpZ9p8usQg6mop1CQkJ5TlB4Q7CJdTIE,3082
164
- contentctl-5.0.3.dist-info/LICENSE.md,sha256=hQWUayRk-pAiOZbZnuy8djmoZkjKBx8MrCFpW-JiOgo,11344
165
- contentctl-5.0.3.dist-info/METADATA,sha256=KUmcwcjNRAf0tyt2jpUWcjTBJf07usgeBsHmNShVHIo,21539
166
- contentctl-5.0.3.dist-info/WHEEL,sha256=IYZQI976HJqqOpQU6PHkJ8fb3tMNBFjg-Cn-pwAbaFM,88
167
- contentctl-5.0.3.dist-info/entry_points.txt,sha256=5bjZ2NkbQfSwK47uOnA77yCtjgXhvgxnmCQiynRF_-U,57
168
- contentctl-5.0.3.dist-info/RECORD,,
164
+ contentctl-5.0.4.dist-info/LICENSE.md,sha256=hQWUayRk-pAiOZbZnuy8djmoZkjKBx8MrCFpW-JiOgo,11344
165
+ contentctl-5.0.4.dist-info/METADATA,sha256=rZUz7votHt0VBGXtqkPv_Mz0O4d22W2kv4qm8jkj9BM,21539
166
+ contentctl-5.0.4.dist-info/WHEEL,sha256=XbeZDeTWKc1w7CSIyre5aMDU_-PohRwTQceYnisIYYY,88
167
+ contentctl-5.0.4.dist-info/entry_points.txt,sha256=5bjZ2NkbQfSwK47uOnA77yCtjgXhvgxnmCQiynRF_-U,57
168
+ contentctl-5.0.4.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: poetry-core 2.0.1
2
+ Generator: poetry-core 2.1.1
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any