Skip to content

Commit 2b3836c

Browse files
authored
Merge pull request #111 from UncoderIO/gis-7789
Palo Alto Cortex XSIAM: add support array of default logsources
2 parents 4f01f62 + 17ea72d commit 2b3836c

File tree

4 files changed

+31
-19
lines changed

4 files changed

+31
-19
lines changed
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
platform: Palo Alto XSIAM
2+
source: webserver
3+
4+
default_log_source:
5+
dataset: [apache_tomcat_raw, nginx_nginx_raw, apache_tomcat_raw]
6+
7+
field_mapping:
8+
c-uri: xdm.network.http.url
9+
c-useragent: xdm.source.user_agent
10+
cs-method: xdm.network.http.method
11+
cs-bytes: xdm.target.sent_bytes
12+
c-uri-query: xdm.network.http.url
13+
cs-referrer: xdm.network.http.referrer
14+
sc-status: xdm.network.http.response_code

uncoder-core/app/translator/platforms/palo_alto/escape_manager.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,10 @@
77

88
class XQLEscapeManager(EscapeManager):
99
escape_map: ClassVar[dict[str, list[EscapeDetails]]] = {
10-
ValueType.regex_value: [EscapeDetails(pattern=r'([_!@#$%^&*=+()\[\]{}|;:\'",.<>?/`~\-\s\\])', escape_symbols=r"\\\1")],
11-
ValueType.value: [EscapeDetails(pattern=r'([\\])', escape_symbols=r"\\\1")],
12-
10+
ValueType.regex_value: [
11+
EscapeDetails(pattern=r'([_!@#$%^&*=+()\[\]{}|;:\'",.<>?/`~\-\s\\])', escape_symbols=r"\\\1")
12+
],
13+
ValueType.value: [EscapeDetails(pattern=r"([\\])", escape_symbols=r"\\\1")],
1314
}
1415

1516

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

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from typing import Optional
1+
from typing import Optional, Union
22

33
from app.translator.core.mapping import (
44
DEFAULT_MAPPING_NAME,
@@ -18,8 +18,17 @@ def __init__(self, preset: Optional[list[str]], dataset: Optional[list[str]], de
1818
def is_suitable(self, preset: str, dataset: str) -> bool:
1919
return preset == self.preset or dataset == self.dataset
2020

21+
def __prepare_log_source_for_render(self, logsource: Union[str, list[str]], model: str = "datamodel") -> str:
22+
if isinstance(logsource, list):
23+
return f"{model} in ({', '.join(source for source in logsource)})"
24+
return f"{model} = {logsource}"
25+
2126
def __str__(self) -> str:
22-
return self._default_source.get("preset") or self._default_source.get("dataset")
27+
if preset_data := self._default_source.get("preset"):
28+
return self.__prepare_log_source_for_render(logsource=preset_data, model="preset")
29+
if dataset_data := self._default_source.get("dataset"):
30+
return self.__prepare_log_source_for_render(logsource=dataset_data, model="dataset")
31+
return "datamodel"
2332

2433

2534
class CortexXSIAMMappings(BasePlatformMappings):

uncoder-core/app/translator/platforms/palo_alto/renders/cortex_xsiam.py

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -69,9 +69,7 @@ def contains_modifier(self, field: str, value: DEFAULT_VALUE_TYPE) -> str:
6969

7070
def endswith_modifier(self, field: str, value: DEFAULT_VALUE_TYPE) -> str:
7171
if isinstance(value, list):
72-
return (
73-
f"({self.or_token.join(self.endswith_modifier(field=field, value=v) for v in value)})"
74-
)
72+
return f"({self.or_token.join(self.endswith_modifier(field=field, value=v) for v in value)})"
7573
return f'{field} ~= ".*{self.apply_value(value, value_type=ValueType.regex_value)}"'
7674

7775
def startswith_modifier(self, field: str, value: DEFAULT_VALUE_TYPE) -> str:
@@ -118,14 +116,4 @@ class CortexXQLQueryRender(PlatformQueryRender):
118116
is_single_line_comment = False
119117

120118
def generate_prefix(self, log_source_signature: CortexXSIAMLogSourceSignature) -> str:
121-
preset = (
122-
f"preset = {log_source_signature._default_source.get('preset')}"
123-
if log_source_signature._default_source.get("preset")
124-
else None
125-
)
126-
dataset = (
127-
f"dataset = {log_source_signature._default_source.get('dataset')}"
128-
if log_source_signature._default_source.get("dataset")
129-
else None
130-
)
131-
return preset or dataset or "datamodel"
119+
return str(log_source_signature)

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy