Skip to content

Commit

Permalink
Merge 91b75b2 into d2ce3b5
Browse files Browse the repository at this point in the history
  • Loading branch information
yucohen committed Jun 2, 2024
2 parents d2ce3b5 + 91b75b2 commit e575b45
Show file tree
Hide file tree
Showing 43 changed files with 931 additions and 28 deletions.
29 changes: 29 additions & 0 deletions TestSuite/case_field.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
from pathlib import Path

from TestSuite.json_based import JSONBased


class CaseField(JSONBased):
def __init__(self, name: str, case_field_dir_path: Path, json_content: dict = None):
self.case_field_file_path = case_field_dir_path / f"{name}.json"
super().__init__(
dir_path=case_field_dir_path,
name=name,
prefix="casefield",
json_content=json_content,
)

def create_default(self):
self.write_json(
{
"id": self.id,
"description": "test description",
"cliName": self.id.lower(),
"name": self.id,
"associatedToAll": False,
"type": "shortText",
"associatedTypes": [],
"threshold": 72,
"fromVersion": "8.7.0",
}
)
45 changes: 45 additions & 0 deletions TestSuite/case_layout.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
from pathlib import Path

from TestSuite.json_based import JSONBased


class CaseLayout(JSONBased):
def __init__(
self, name: str, case_layout_dir_path: Path, json_content: dict = None
):
self.case_layout_tmp_path = case_layout_dir_path / f"{name}.json"
super().__init__(
dir_path=case_layout_dir_path,
name=name,
prefix="layoutcontainer",
json_content=json_content,
)

def create_default(self):
self.write_json(
{
"detailsV2": {
"tabs": [
{"id": "overview", "name": "Overview", "type": "overview"},
{
"id": "alerts_and_insights",
"name": "Alerts \u0026 Insights",
"type": "alertInsights",
},
{"id": "timeline", "name": "Timeline", "type": "timeline"},
{
"id": "executions",
"name": "Executions",
"type": "executions",
},
]
},
"group": "case",
"id": self.id,
"name": self.id,
"system": False,
"version": -1,
"fromVersion": "8.7.0",
"description": "",
}
)
41 changes: 41 additions & 0 deletions TestSuite/case_layout_rule.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
from pathlib import Path

from TestSuite.json_based import JSONBased


class CaseLayoutRule(JSONBased):
def __init__(
self, name: str, case_layout_rule_dir_path: Path, json_content: dict = None
):
self.layout_rule_tmp_path = case_layout_rule_dir_path / f"{name}.json"
self.name = name
self.rule_id = name

super().__init__(dir_path=case_layout_rule_dir_path, name=name, prefix="")

if json_content:
self.write_json(json_content)
else:
self.create_default_case_layout_rule()

def create_default_case_layout_rule(self):
self.write_json(
{
"rule_id": self.rule_id,
"rule_name": self.rule_id,
"layout_id": "test_layout",
"description": "",
"incidents_filter": {
"filter": {
"AND": [
{
"SEARCH_FIELD": "STATUS",
"SEARCH_TYPE": "NEQ",
"SEARCH_VALUE": "STATUS_030_RESOLVED_THREAT_HANDLED",
}
]
}
},
"fromVersion": "8.7.0",
}
)
42 changes: 42 additions & 0 deletions TestSuite/pack.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@

from demisto_sdk.commands.common.constants import (
ASSETS_MODELING_RULES_DIR,
CASE_FIELDS_DIR,
CASE_LAYOUT_RULES_DIR,
CASE_LAYOUTS_DIR,
CORRELATION_RULES_DIR,
DEFAULT_IMAGE_BASE64,
LAYOUT_RULES_DIR,
Expand All @@ -13,6 +16,9 @@
XSIAM_DASHBOARDS_DIR,
XSIAM_REPORTS_DIR,
)
from TestSuite.case_field import CaseField
from TestSuite.case_layout import CaseLayout
from TestSuite.case_layout_rule import CaseLayoutRule
from TestSuite.classifier import Classifier
from TestSuite.content_list import ContentList
from TestSuite.correlation_rule import CorrelationRule
Expand Down Expand Up @@ -105,6 +111,9 @@ def __init__(self, packs_dir: Path, name: str, repo):
self.xdrc_templates: List[XDRCTemplate] = list()
self.layout_rules: List[LayoutRule] = list()
self.assets_modeling_rules: List[Rule] = list()
self.case_fields: List[CaseField] = list()
self.case_layouts: List[CaseLayout] = list()
self.case_layout_rules: List[CaseLayoutRule] = list()

# Create base pack
self._pack_path = packs_dir / self.name
Expand Down Expand Up @@ -227,6 +236,15 @@ def __init__(self, packs_dir: Path, name: str, repo):
self._xsiam_layout_rules_path = self._pack_path / LAYOUT_RULES_DIR
self._xsiam_layout_rules_path.mkdir()

self._case_layout_rules_path = self._pack_path / CASE_LAYOUT_RULES_DIR
self._case_layout_rules_path.mkdir()

self._case_layouts_path = self._pack_path / CASE_LAYOUTS_DIR
self._case_layouts_path.mkdir()

self._case_fields_path = self._pack_path / CASE_FIELDS_DIR
self._case_fields_path.mkdir()

self.contributors: Optional[TextBased] = None

self._assets_modeling_rules_path = self._pack_path / ASSETS_MODELING_RULES_DIR
Expand Down Expand Up @@ -764,5 +782,29 @@ def create_layout_rule(self, name: str = None, content: dict = None) -> LayoutRu
self.layout_rules.append(layout_rule)
return layout_rule

def create_case_layout_rule(
self, name: str = None, content: dict = None
) -> CaseLayoutRule:
if not name:
name = f"case_layout_rule{len(self.case_layout_rules)}"
case_layout_rule = CaseLayoutRule(name, self._case_layout_rules_path, content)
self.case_layout_rules.append(case_layout_rule)
return case_layout_rule

def create_case_layout(self, name: str = None, content: dict = None) -> CaseLayout:
if not name:
name = f"case_layout{len(self.case_layouts)}"
case_layout = CaseLayout(name, self._case_layouts_path, content)
self.case_layouts.append(case_layout)
return case_layout

def create_case_field(self, name: str = None, content: dict = None) -> CaseField:
if not name:
name = f"casefield{len(self.incident_fields)}"
case_field = CaseField(name, self._case_fields_path, content)

self.case_fields.append(case_field)
return case_field

def set_data(self, **key_path_to_val):
self.pack_metadata.set_data(**key_path_to_val)
32 changes: 32 additions & 0 deletions demisto_sdk/commands/common/constants.py
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,9 @@
XDRC_TEMPLATE_DIR = "XDRCTemplates"
LAYOUT_RULES_DIR = "LayoutRules"
ASSETS_MODELING_RULES_DIR = "AssetsModelingRules"
CASE_LAYOUT_RULES_DIR = "CaseLayoutRules"
CASE_LAYOUTS_DIR = "CaseLayouts"
CASE_FIELDS_DIR = "CaseFields"

# NAMES OF ENTITIES

Expand Down Expand Up @@ -158,6 +161,9 @@
MARKETPLACE_KEY_PACK_METADATA = "marketplaces"
EVENT_COLLECTOR = "EventCollector"
ASSETS_MODELING_RULE = "assetsmodelingrule"
CASE_LAYOUT_RULE = "caselayoutrule"
CASE_FIELD = "casefield"
CASE_LAYOUT = "caselayout"

# Marketplaces

Expand Down Expand Up @@ -249,6 +255,9 @@ class FileType(StrEnum):
ASSETS_MODELING_RULE_SCHEMA = "assetsmodelingruleschema"
ASSETS_MODELING_RULE = "assetsmodelingrule"
ASSETS_MODELING_RULE_XIF = "assetsmodelingrulexif"
CASE_LAYOUT_RULE = "caselayoutrule"
CASE_FIELD = "casefield"
CASE_LAYOUT = "caselayout"


RN_HEADER_BY_FILE_TYPE = {
Expand Down Expand Up @@ -287,6 +296,9 @@ class FileType(StrEnum):
FileType.XDRC_TEMPLATE: "XDRC Templates",
FileType.LAYOUT_RULE: "Layout Rules",
FileType.ASSETS_MODELING_RULE: "Assets Modeling Rules",
FileType.CASE_LAYOUT_RULE: "Case Layout Rules",
FileType.CASE_FIELD: "Case Fields",
FileType.CASE_LAYOUT: "Case Layouts",
}

FILE_TYPE_BY_RN_HEADER = {
Expand Down Expand Up @@ -329,6 +341,9 @@ class FileType(StrEnum):
FileType.OLD_CLASSIFIER.value: CLASSIFIERS_DIR,
FileType.LAYOUT_RULE.value: LAYOUT_RULES_DIR,
FileType.ASSETS_MODELING_RULE.value: ASSETS_MODELING_RULES_DIR,
FileType.CASE_FIELD.value: CASE_FIELDS_DIR,
FileType.CASE_LAYOUT.value: CASE_LAYOUTS_DIR,
FileType.CASE_LAYOUT_RULE.value: CASE_LAYOUT_RULES_DIR,
}

SIEM_ONLY_ENTITIES = [
Expand All @@ -341,6 +356,9 @@ class FileType(StrEnum):
FileType.XDRC_TEMPLATE.value,
FileType.LAYOUT_RULE.value,
FileType.ASSETS_MODELING_RULE,
FileType.CASE_LAYOUT_RULE.value,
FileType.CASE_FIELD.value,
FileType.CASE_LAYOUT.value,
]

CONTENT_FILE_ENDINGS = ["py", "yml", "png", "json", "md"]
Expand Down Expand Up @@ -387,6 +405,9 @@ class FileType(StrEnum):
XSIAM_REPORTS_DIR,
TRIGGER_DIR,
ASSETS_MODELING_RULES_DIR,
CASE_LAYOUT_RULES_DIR,
CASE_FIELDS_DIR,
CASE_LAYOUTS_DIR,
]

CONTENT_ENTITY_UPLOAD_ORDER = [
Expand Down Expand Up @@ -905,6 +926,8 @@ class FileType(StrEnum):
XDRC_TEMPLATE_PREFIX = "xdrctemplate"
LAYOUT_RULE_PREFIX = "layoutrule"
ASSETS_MODELING_RULE_ID_SUFFIX = "AssetsModelingRule"
# TODO


# Pack Unique Files
PACKS_WHITELIST_FILE_NAME = ".secrets-ignore"
Expand Down Expand Up @@ -1569,6 +1592,9 @@ class PB_Status:
FileType.LAYOUT_RULE: "6.10.0",
FileType.XSIAM_DASHBOARD: "6.10.0",
FileType.ASSETS_MODELING_RULE: "6.2.1",
FileType.CASE_LAYOUT_RULE: "8.7.0",
FileType.CASE_FIELD: "8.7.0",
FileType.CASE_LAYOUT: "8.7.0",
}

DEFAULT_PYTHON_VERSION = "3.10"
Expand Down Expand Up @@ -1858,6 +1884,9 @@ class ContentItems(Enum):
XDRC_TEMPLATE = "xdrctemplate"
LAYOUT_RULES = "layoutrule"
ASSETS_MODELING_RULES = "assetsmodelingrule"
CASE_LAYOUT_RULES = "caselayoutrule"
CASE_FIELDS = "casefield"
CASE_LAYOUTS = "caselayout"


CONTENT_ITEMS_DISPLAY_FOLDERS = {
Expand Down Expand Up @@ -1886,6 +1915,9 @@ class ContentItems(Enum):
XDRC_TEMPLATE_DIR,
LAYOUT_RULES_DIR,
ASSETS_MODELING_RULES_DIR,
CASE_LAYOUT_RULES_DIR,
CASE_FIELDS_DIR,
CASE_LAYOUTS_DIR,
}


Expand Down
Loading

0 comments on commit e575b45

Please sign in to comment.