Skip to content

Commit 29fa729

Browse files
authored
Merge pull request #194 from UncoderIO/gis-8678
cortex xdr render
2 parents 5b9c114 + abf11c2 commit 29fa729

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

61 files changed

+624
-272
lines changed

uncoder-core/app/translator/core/exceptions/core.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,12 @@ def __init__(self, platform_name: str, fields: list[str], mapping: Optional[str]
1717
super().__init__(message)
1818

1919

20+
class UnsupportedMappingsException(BasePlatformException):
21+
def __init__(self, platform_name: str, mappings: list[str]):
22+
message = f"Platform {platform_name} does not support these mappings: {mappings}."
23+
super().__init__(message)
24+
25+
2026
class StrictPlatformFieldException(BasePlatformException):
2127
def __init__(self, platform_name: str, field_name: str):
2228
message = f"Source field `{field_name}` has no mapping for platform {platform_name}."

uncoder-core/app/translator/core/mapping.py

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from abc import ABC, abstractmethod
44
from typing import TYPE_CHECKING, Optional, TypeVar, Union
55

6-
from app.translator.core.exceptions.core import StrictPlatformException
6+
from app.translator.core.exceptions.core import StrictPlatformException, UnsupportedMappingsException
77
from app.translator.core.models.platform_details import PlatformDetails
88
from app.translator.mappings.utils.load_from_files import LoaderFileMappings
99

@@ -116,7 +116,7 @@ def prepare_mapping(self) -> dict[str, SourceMapping]:
116116
default_mapping = SourceMapping(source_id=DEFAULT_MAPPING_NAME)
117117
for mapping_dict in self._loader.load_platform_mappings(self._platform_dir):
118118
log_source_signature = self.prepare_log_source_signature(mapping=mapping_dict)
119-
if (source_id := mapping_dict.get("source")) == DEFAULT_MAPPING_NAME:
119+
if (source_id := mapping_dict["source"]) == DEFAULT_MAPPING_NAME:
120120
default_mapping.log_source_signature = log_source_signature
121121
if self.skip_load_default_mappings:
122122
continue
@@ -152,7 +152,7 @@ def prepare_fields_mapping(field_mapping: dict) -> FieldsMapping:
152152
def prepare_log_source_signature(self, mapping: dict) -> LogSourceSignature:
153153
raise NotImplementedError("Abstract method")
154154

155-
def get_suitable_source_mappings(
155+
def get_source_mappings_by_fields_and_log_sources(
156156
self, field_names: list[str], log_sources: dict[str, list[Union[int, str]]]
157157
) -> list[SourceMapping]:
158158
by_log_sources_and_fields = []
@@ -170,6 +170,17 @@ def get_suitable_source_mappings(
170170

171171
return by_log_sources_and_fields or by_fields or [self._source_mappings[DEFAULT_MAPPING_NAME]]
172172

173+
def get_source_mappings_by_ids(self, source_mapping_ids: list[str]) -> list[SourceMapping]:
174+
source_mappings = []
175+
for source_mapping_id in source_mapping_ids:
176+
if source_mapping := self.get_source_mapping(source_mapping_id):
177+
source_mappings.append(source_mapping)
178+
179+
if not source_mappings:
180+
source_mappings = [self.get_source_mapping(DEFAULT_MAPPING_NAME)]
181+
182+
return source_mappings
183+
173184
def get_source_mapping(self, source_id: str) -> Optional[SourceMapping]:
174185
return self._source_mappings.get(source_id)
175186

@@ -218,3 +229,18 @@ def prepare_mapping(self) -> dict[str, SourceMapping]:
218229
)
219230

220231
return source_mappings
232+
233+
234+
class BaseStrictLogSourcesPlatformMappings(ABC, BasePlatformMappings):
235+
def get_source_mappings_by_ids(self, source_mapping_ids: list[str]) -> list[SourceMapping]:
236+
source_mappings = []
237+
for source_mapping_id in source_mapping_ids:
238+
if source_mapping_id == DEFAULT_MAPPING_NAME:
239+
continue
240+
if source_mapping := self.get_source_mapping(source_mapping_id):
241+
source_mappings.append(source_mapping)
242+
243+
if not source_mappings:
244+
raise UnsupportedMappingsException(platform_name=self.details.name, mappings=source_mapping_ids)
245+
246+
return source_mappings

uncoder-core/app/translator/core/parser.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,8 @@ def get_source_mappings(
8080
self, field_tokens: list[Field], log_sources: dict[str, list[Union[int, str]]]
8181
) -> list[SourceMapping]:
8282
field_names = [field.source_name for field in field_tokens]
83-
source_mappings = self.mappings.get_suitable_source_mappings(field_names=field_names, log_sources=log_sources)
83+
source_mappings = self.mappings.get_source_mappings_by_fields_and_log_sources(
84+
field_names=field_names, log_sources=log_sources
85+
)
8486
self.tokenizer.set_field_tokens_generic_names_map(field_tokens, source_mappings, self.mappings.default_mapping)
8587
return source_mappings

uncoder-core/app/translator/core/render.py

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
from app.translator.core.exceptions.parser import UnsupportedOperatorException
3232
from app.translator.core.exceptions.render import UnsupportedRenderMethod
3333
from app.translator.core.functions import PlatformFunctions
34-
from app.translator.core.mapping import DEFAULT_MAPPING_NAME, BasePlatformMappings, LogSourceSignature, SourceMapping
34+
from app.translator.core.mapping import BasePlatformMappings, LogSourceSignature, SourceMapping
3535
from app.translator.core.models.functions.base import Function, RenderedFunctions
3636
from app.translator.core.models.platform_details import PlatformDetails
3737
from app.translator.core.models.query_container import MetaInfoContainer, RawQueryContainer, TokenizedQueryContainer
@@ -384,17 +384,6 @@ def finalize(self, queries_map: dict[str, str]) -> str:
384384

385385
return result
386386

387-
def _get_source_mappings(self, source_mapping_ids: list[str]) -> Optional[list[SourceMapping]]:
388-
source_mappings = []
389-
for source_mapping_id in source_mapping_ids:
390-
if source_mapping := self.mappings.get_source_mapping(source_mapping_id):
391-
source_mappings.append(source_mapping)
392-
393-
if not source_mappings:
394-
source_mappings = [self.mappings.get_source_mapping(DEFAULT_MAPPING_NAME)]
395-
396-
return source_mappings
397-
398387
def generate_from_raw_query_container(self, query_container: RawQueryContainer) -> str:
399388
return self.finalize_query(
400389
prefix="", query=query_container.query, functions="", meta_info=query_container.meta_info
@@ -464,7 +453,7 @@ def _generate_from_tokenized_query_container_by_source_mapping(
464453
def generate_from_tokenized_query_container(self, query_container: TokenizedQueryContainer) -> str:
465454
queries_map = {}
466455
errors = []
467-
source_mappings = self._get_source_mappings(query_container.meta_info.source_mapping_ids)
456+
source_mappings = self.mappings.get_source_mappings_by_ids(query_container.meta_info.source_mapping_ids)
468457

469458
for source_mapping in source_mappings:
470459
try:
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
platform: Palo Alto Cortex XDR
2+
source: default
3+
4+
5+
default_log_source:
6+
datamodel: datamodel

uncoder-core/app/translator/mappings/platforms/palo_alto_cortex/linux_file_event.yml renamed to uncoder-core/app/translator/mappings/platforms/palo_alto_cortex_xdr/linux_file_event.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
platform: Palo Alto XSIAM
1+
platform: Palo Alto Cortex XDR
22
source: linux_file_event
33

44
log_source:

uncoder-core/app/translator/mappings/platforms/palo_alto_cortex/linux_process_creation.yml renamed to uncoder-core/app/translator/mappings/platforms/palo_alto_cortex_xdr/linux_process_creation.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
platform: Palo Alto XSIAM
1+
platform: Palo Alto Cortex XDR
22
source: linux_process_creation
33

44
log_source:

uncoder-core/app/translator/mappings/platforms/palo_alto_cortex/macos_file_event.yml renamed to uncoder-core/app/translator/mappings/platforms/palo_alto_cortex_xdr/macos_file_event.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
platform: Palo Alto XSIAM
1+
platform: Palo Alto Cortex XDR
22
source: macos_file_event
33

44
log_source:

uncoder-core/app/translator/mappings/platforms/palo_alto_cortex/macos_process_creation.yml renamed to uncoder-core/app/translator/mappings/platforms/palo_alto_cortex_xdr/macos_process_creation.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
platform: Palo Alto XSIAM
1+
platform: Palo Alto Cortex XDR
22
source: macos_process_creation
33

44
log_source:

uncoder-core/app/translator/mappings/platforms/palo_alto_cortex/windows_file_event.yml renamed to uncoder-core/app/translator/mappings/platforms/palo_alto_cortex_xdr/windows_file_event.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
platform: Palo Alto XSIAM
1+
platform: Palo Alto Cortex XDR
22
source: windows_file_event
33

44
log_source:

0 commit comments

Comments
 (0)