checkov 3.2.332__py3-none-any.whl → 3.2.334__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.
- checkov/serverless/graph_builder/definition_context.py +14 -0
- checkov/serverless/graph_builder/graph_to_definitions.py +55 -0
- checkov/serverless/graph_builder/local_graph.py +84 -5
- checkov/serverless/runner.py +42 -28
- checkov/serverless/utils.py +17 -0
- checkov/version.py +1 -1
- {checkov-3.2.332.dist-info → checkov-3.2.334.dist-info}/METADATA +1 -1
- {checkov-3.2.332.dist-info → checkov-3.2.334.dist-info}/RECORD +13 -12
- checkov/serverless/graph_builder/graph_components/block_types.py +0 -12
- {checkov-3.2.332.data → checkov-3.2.334.data}/scripts/checkov +0 -0
- {checkov-3.2.332.data → checkov-3.2.334.data}/scripts/checkov.cmd +0 -0
- {checkov-3.2.332.dist-info → checkov-3.2.334.dist-info}/LICENSE +0 -0
- {checkov-3.2.332.dist-info → checkov-3.2.334.dist-info}/WHEEL +0 -0
- {checkov-3.2.332.dist-info → checkov-3.2.334.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from typing import Any
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
def build_definitions_context(definitions: dict[str, dict[str, Any]], definitions_raw: dict[str, list[tuple[int, str]]]
|
|
7
|
+
) -> dict[str, dict[str, Any]]:
|
|
8
|
+
return {}
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def add_resource_to_definitions_context(definitions_context: dict[str, dict[str, Any]], resource_key: str,
|
|
12
|
+
resource_attributes: dict[str, Any], definition_attribute: str,
|
|
13
|
+
definitions_raw: dict[str, Any], file_path: str) -> None:
|
|
14
|
+
pass
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import os
|
|
4
|
+
from pathlib import Path
|
|
5
|
+
from typing import Any, TYPE_CHECKING
|
|
6
|
+
|
|
7
|
+
from checkov.serverless.utils import ServerlessElements
|
|
8
|
+
|
|
9
|
+
if TYPE_CHECKING:
|
|
10
|
+
from checkov.serverless.graph_builder.graph_components.blocks import ServerlessBlock
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def convert_graph_vertices_to_definitions(vertices: list[ServerlessBlock], root_folder: str | Path | None) \
|
|
14
|
+
-> tuple[dict[str, dict[str, Any]], dict[str, dict[str, Any]]]:
|
|
15
|
+
serverless_definitions: dict[str, dict[str, Any]] = {}
|
|
16
|
+
breadcrumbs: dict[str, dict[str, Any]] = {}
|
|
17
|
+
for vertex in vertices:
|
|
18
|
+
block_path = vertex.path
|
|
19
|
+
element_name = vertex.name.split('.')[-1]
|
|
20
|
+
# Plugins section is formatted as a list
|
|
21
|
+
if vertex.block_type == ServerlessElements.PLUGINS:
|
|
22
|
+
serverless_definitions.setdefault(block_path, {}).setdefault(vertex.block_type, []).append(element_name)
|
|
23
|
+
|
|
24
|
+
# If there is a ket named 'value' in the config it means that
|
|
25
|
+
# this vertex's config contains only a single string
|
|
26
|
+
elif 'value' in vertex.config:
|
|
27
|
+
# If the vertex is provider or service and it only contains a string the section should look like:
|
|
28
|
+
# provider: <value>
|
|
29
|
+
# service: <value>
|
|
30
|
+
if element_name == ServerlessElements.PROVIDER or element_name == ServerlessElements.SERVICE:
|
|
31
|
+
serverless_definitions.setdefault(block_path, {})[vertex.block_type] = vertex.config['value']
|
|
32
|
+
|
|
33
|
+
# Otherwise it's a vertex of a specific nested attribute and need to include the full path
|
|
34
|
+
# Examples:
|
|
35
|
+
# provider:
|
|
36
|
+
# runtime: nodejs20.x
|
|
37
|
+
# custom:
|
|
38
|
+
# myCustomVar: value
|
|
39
|
+
else:
|
|
40
|
+
serverless_definitions.setdefault(block_path, {}).setdefault(vertex.block_type, {})[element_name] = \
|
|
41
|
+
vertex.config['value']
|
|
42
|
+
|
|
43
|
+
# Otherwise, the vertex config is a dict
|
|
44
|
+
else:
|
|
45
|
+
serverless_definitions.setdefault(block_path, {}).setdefault(vertex.block_type, {})[
|
|
46
|
+
element_name] = vertex.config
|
|
47
|
+
|
|
48
|
+
if vertex.breadcrumbs:
|
|
49
|
+
relative_block_path = f"/{os.path.relpath(block_path, root_folder)}"
|
|
50
|
+
add_breadcrumbs(vertex, breadcrumbs, relative_block_path)
|
|
51
|
+
return serverless_definitions, breadcrumbs
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def add_breadcrumbs(vertex: ServerlessBlock, breadcrumbs: dict[str, dict[str, Any]], relative_block_path: str) -> None:
|
|
55
|
+
breadcrumbs.setdefault(relative_block_path, {})[vertex.name] = vertex.breadcrumbs
|
|
@@ -2,8 +2,12 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
from typing import Any
|
|
4
4
|
|
|
5
|
+
from checkov.common.graph.graph_builder import CustomAttributes
|
|
5
6
|
from checkov.common.graph.graph_builder.local_graph import LocalGraph, _Block
|
|
7
|
+
from checkov.common.util.consts import LINE_FIELD_NAMES
|
|
8
|
+
from checkov.common.util.data_structures_utils import pickle_deepcopy
|
|
6
9
|
from checkov.serverless.graph_builder.graph_components.blocks import ServerlessBlock
|
|
10
|
+
from checkov.serverless.utils import ServerlessElements
|
|
7
11
|
|
|
8
12
|
|
|
9
13
|
class ServerlessLocalGraph(LocalGraph[ServerlessBlock]):
|
|
@@ -11,8 +15,86 @@ class ServerlessLocalGraph(LocalGraph[ServerlessBlock]):
|
|
|
11
15
|
super().__init__()
|
|
12
16
|
self.vertices: list[ServerlessBlock] = []
|
|
13
17
|
self.definitions = definitions
|
|
14
|
-
self.
|
|
15
|
-
|
|
18
|
+
self.vertices_by_path_and_name: dict[tuple[str, str], int] = {}
|
|
19
|
+
|
|
20
|
+
def build_graph(self, render_variables: bool = True) -> None:
|
|
21
|
+
self._create_vertices()
|
|
22
|
+
|
|
23
|
+
def _create_vertices(self) -> None:
|
|
24
|
+
for file_path, definition in self.definitions.items():
|
|
25
|
+
self._create_vertex(file_path=file_path, definition=definition, element_type=ServerlessElements.FUNCTIONS)
|
|
26
|
+
self._create_vertex(file_path=file_path, definition=definition, element_type=ServerlessElements.PARAMS)
|
|
27
|
+
self._create_vertex(file_path=file_path, definition=definition, element_type=ServerlessElements.PROVIDER)
|
|
28
|
+
self._create_vertex(file_path=file_path, definition=definition, element_type=ServerlessElements.LAYERS)
|
|
29
|
+
self._create_vertex(file_path=file_path, definition=definition, element_type=ServerlessElements.CUSTOM)
|
|
30
|
+
self._create_vertex(file_path=file_path, definition=definition, element_type=ServerlessElements.PACKAGE)
|
|
31
|
+
self._create_vertex(file_path=file_path, definition=definition, element_type=ServerlessElements.PLUGINS)
|
|
32
|
+
self._create_vertex(file_path=file_path, definition=definition, element_type=ServerlessElements.SERVICE)
|
|
33
|
+
self._create_vertex(file_path=file_path, definition=definition, element_type=ServerlessElements.RESOURCES)
|
|
34
|
+
|
|
35
|
+
for i, vertex in enumerate(self.vertices):
|
|
36
|
+
self.vertices_by_block_type[vertex.block_type].append(i)
|
|
37
|
+
self.vertices_by_path_and_name[(vertex.path, vertex.name)] = i
|
|
38
|
+
|
|
39
|
+
self.in_edges[i] = []
|
|
40
|
+
self.out_edges[i] = []
|
|
41
|
+
|
|
42
|
+
def _create_vertex(self, file_path: str, definition: dict[str, Any] | None,
|
|
43
|
+
element_type: ServerlessElements) -> None:
|
|
44
|
+
if not definition:
|
|
45
|
+
return
|
|
46
|
+
resources = definition.get(element_type)
|
|
47
|
+
if not resources:
|
|
48
|
+
return
|
|
49
|
+
|
|
50
|
+
elif isinstance(resources, str):
|
|
51
|
+
self.vertices.append(ServerlessBlock(
|
|
52
|
+
name=f'{element_type}',
|
|
53
|
+
config={"value": pickle_deepcopy(resources)},
|
|
54
|
+
path=file_path,
|
|
55
|
+
block_type=element_type,
|
|
56
|
+
attributes={"value": pickle_deepcopy(resources)},
|
|
57
|
+
id=f"{file_path}:{element_type}"
|
|
58
|
+
))
|
|
59
|
+
|
|
60
|
+
else:
|
|
61
|
+
for attribute in resources:
|
|
62
|
+
if attribute in LINE_FIELD_NAMES:
|
|
63
|
+
continue
|
|
64
|
+
|
|
65
|
+
if isinstance(resources, list):
|
|
66
|
+
full_conf = {"value": pickle_deepcopy(attribute)}
|
|
67
|
+
self.vertices.append(ServerlessBlock(
|
|
68
|
+
name=f'{element_type}.{attribute}',
|
|
69
|
+
config=full_conf,
|
|
70
|
+
path=file_path,
|
|
71
|
+
block_type=element_type,
|
|
72
|
+
attributes=full_conf,
|
|
73
|
+
id=f"{file_path}:{element_type}.{attribute}"
|
|
74
|
+
))
|
|
75
|
+
|
|
76
|
+
else:
|
|
77
|
+
attribute_value = resources[attribute]
|
|
78
|
+
if not isinstance(attribute_value, dict):
|
|
79
|
+
full_conf = {"value": pickle_deepcopy(attribute_value)}
|
|
80
|
+
else:
|
|
81
|
+
full_conf = attribute_value
|
|
82
|
+
|
|
83
|
+
config = pickle_deepcopy(full_conf)
|
|
84
|
+
|
|
85
|
+
resource_type = element_type
|
|
86
|
+
|
|
87
|
+
attributes = pickle_deepcopy(config)
|
|
88
|
+
attributes[CustomAttributes.RESOURCE_TYPE] = resource_type
|
|
89
|
+
|
|
90
|
+
self.vertices.append(ServerlessBlock(
|
|
91
|
+
name=f'{resource_type}.{attribute}',
|
|
92
|
+
config=config,
|
|
93
|
+
path=file_path,
|
|
94
|
+
block_type=resource_type,
|
|
95
|
+
attributes=attributes,
|
|
96
|
+
id=f"{file_path}:{resource_type}.{attribute}"
|
|
97
|
+
))
|
|
16
98
|
|
|
17
99
|
def get_resources_types_in_graph(self) -> list[str]:
|
|
18
100
|
# not used
|
|
@@ -25,6 +107,3 @@ class ServerlessLocalGraph(LocalGraph[ServerlessBlock]):
|
|
|
25
107
|
|
|
26
108
|
def update_vertices_configs(self) -> None:
|
|
27
109
|
pass
|
|
28
|
-
|
|
29
|
-
def build_graph(self, render_variables: bool) -> None:
|
|
30
|
-
pass
|
checkov/serverless/runner.py
CHANGED
|
@@ -11,6 +11,8 @@ from checkov.cloudformation.context_parser import ContextParser as CfnContextPar
|
|
|
11
11
|
from checkov.common.bridgecrew.check_type import CheckType
|
|
12
12
|
from checkov.common.util.secrets import omit_secret_value_from_checks
|
|
13
13
|
from checkov.serverless.base_registry import EntityDetails
|
|
14
|
+
from checkov.serverless.graph_builder.definition_context import build_definitions_context
|
|
15
|
+
from checkov.serverless.graph_builder.graph_to_definitions import convert_graph_vertices_to_definitions
|
|
14
16
|
from checkov.serverless.graph_builder.local_graph import ServerlessLocalGraph
|
|
15
17
|
from checkov.serverless.graph_manager import ServerlessGraphManager
|
|
16
18
|
from checkov.serverless.parsers.context_parser import ContextParser as SlsContextParser, ContextParser
|
|
@@ -111,6 +113,17 @@ class Runner(BaseRunner[_ServerlessDefinitions, _ServerlessContext, ServerlessGr
|
|
|
111
113
|
# Filter out empty files that have not been parsed successfully
|
|
112
114
|
self.definitions = {k: v for k, v in definitions.items() if v}
|
|
113
115
|
self.definitions_raw = {k: v for k, v in definitions_raw.items() if k in definitions.keys()}
|
|
116
|
+
self.context = build_definitions_context(definitions=self.definitions, definitions_raw=self.definitions_raw)
|
|
117
|
+
|
|
118
|
+
logging.info("Creating Serverless graph")
|
|
119
|
+
local_graph = self.graph_manager.build_graph_from_definitions(definitions=self.definitions)
|
|
120
|
+
logging.info("Successfully created Serverless graph")
|
|
121
|
+
|
|
122
|
+
self.graph_manager.save_graph(local_graph)
|
|
123
|
+
self.definitions, self.breadcrumbs = convert_graph_vertices_to_definitions(
|
|
124
|
+
vertices=local_graph.vertices,
|
|
125
|
+
root_folder=root_folder,
|
|
126
|
+
)
|
|
114
127
|
|
|
115
128
|
self.pbar.initiate(len(self.definitions))
|
|
116
129
|
|
|
@@ -140,34 +153,34 @@ class Runner(BaseRunner[_ServerlessDefinitions, _ServerlessContext, ServerlessGr
|
|
|
140
153
|
# "Complete" checks
|
|
141
154
|
# NOTE: Ignore code content, no point in showing (could be long)
|
|
142
155
|
file_abs_path = Path(sls_file).absolute()
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
)
|
|
156
|
+
entity_code_lines = self.definitions_raw[sls_file]
|
|
157
|
+
entity_lines_range = [1, len(entity_code_lines) - 1]
|
|
158
|
+
skipped_checks = CfnContextParser.collect_skip_comments(entity_code_lines or [])
|
|
159
|
+
variable_evaluations: dict[str, Any] = {}
|
|
160
|
+
entity = EntityDetails(sls_context_parser.provider_type, sls_file_data)
|
|
161
|
+
results = complete_registry.scan(sls_file, entity, skipped_checks, runner_filter)
|
|
162
|
+
tags = cfn_utils.get_resource_tags(entity, complete_registry) # type:ignore[arg-type]
|
|
163
|
+
if results:
|
|
164
|
+
for check, check_result in results.items():
|
|
165
|
+
record = Record(check_id=check.id, check_name=check.name, check_result=check_result,
|
|
166
|
+
code_block=[], # Don't show, could be large
|
|
167
|
+
file_path=self.extract_file_path_from_abs_path(Path(sls_file)),
|
|
168
|
+
file_line_range=entity_lines_range,
|
|
169
|
+
resource="complete", # Weird, not sure what to put where
|
|
170
|
+
evaluations=variable_evaluations,
|
|
171
|
+
check_class=check.__class__.__module__,
|
|
172
|
+
file_abs_path=str(file_abs_path),
|
|
173
|
+
entity_tags=tags, severity=check.severity)
|
|
174
|
+
record.set_guideline(check.guideline)
|
|
175
|
+
report.add_record(record=record)
|
|
176
|
+
else:
|
|
177
|
+
report.extra_resources.add(
|
|
178
|
+
ExtraResource(
|
|
179
|
+
file_abs_path=str(file_abs_path),
|
|
180
|
+
file_path=self.extract_file_path_from_abs_path(Path(sls_file)),
|
|
181
|
+
resource="complete",
|
|
170
182
|
)
|
|
183
|
+
)
|
|
171
184
|
|
|
172
185
|
def single_item_sections_checks(self,
|
|
173
186
|
sls_file: str,
|
|
@@ -183,7 +196,8 @@ class Runner(BaseRunner[_ServerlessDefinitions, _ServerlessContext, ServerlessGr
|
|
|
183
196
|
continue
|
|
184
197
|
entity_lines_range, entity_code_lines = sls_context_parser.extract_code_lines(item_content)
|
|
185
198
|
if not entity_lines_range:
|
|
186
|
-
|
|
199
|
+
entity_code_lines = self.definitions_raw[sls_file]
|
|
200
|
+
entity_lines_range = [1, len(entity_code_lines) - 1]
|
|
187
201
|
|
|
188
202
|
skipped_checks = CfnContextParser.collect_skip_comments(entity_code_lines or [])
|
|
189
203
|
variable_evaluations: dict[str, Any] = {}
|
checkov/serverless/utils.py
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import os
|
|
4
|
+
from enum import Enum
|
|
4
5
|
from typing import Callable, Any
|
|
5
6
|
|
|
6
7
|
from checkov.common.parallelizer.parallel_runner import parallel_runner
|
|
@@ -11,6 +12,22 @@ SLS_FILE_MASK = os.getenv(
|
|
|
11
12
|
"CKV_SLS_FILE_MASK", "serverless.yml,serverless.yaml").split(",")
|
|
12
13
|
|
|
13
14
|
|
|
15
|
+
class ServerlessElements(str, Enum):
|
|
16
|
+
PARAMS = "params"
|
|
17
|
+
FUNCTIONS = "functions"
|
|
18
|
+
PROVIDER = "provider"
|
|
19
|
+
LAYERS = "layers"
|
|
20
|
+
CUSTOM = "custom"
|
|
21
|
+
PACKAGE = "package"
|
|
22
|
+
PLUGINS = "plugins"
|
|
23
|
+
SERVICE = "service"
|
|
24
|
+
RESOURCES = "resources"
|
|
25
|
+
|
|
26
|
+
def __str__(self) -> str:
|
|
27
|
+
# needed, because of a Python 3.11 change
|
|
28
|
+
return self.value
|
|
29
|
+
|
|
30
|
+
|
|
14
31
|
def get_scannable_file_paths(root_folder: str | None = None, excluded_paths: list[str] | None = None) -> list[str]:
|
|
15
32
|
files_list: list[str] = []
|
|
16
33
|
|
checkov/version.py
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
version = '3.2.
|
|
1
|
+
version = '3.2.334'
|
|
@@ -9,7 +9,7 @@ checkov/logging_init.py,sha256=ImCCNBBSanaHEAKBNG_e1Qp3BI6Ez0BPTkbSsyDmxTU,1135
|
|
|
9
9
|
checkov/main.py,sha256=YD0umx-YHhXnTd8peTimMfXqe1SRfTw0h6m-3EsdefI,47873
|
|
10
10
|
checkov/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
11
11
|
checkov/runner_filter.py,sha256=GdzBc-ija2h-pkeAdX9NyvlW6IqcZ0JjvwYyPWZXIAM,21580
|
|
12
|
-
checkov/version.py,sha256=
|
|
12
|
+
checkov/version.py,sha256=83mWM7TS6nNpKOXWxc8eDyWuw4PRP0xghKRouDmsfd0,20
|
|
13
13
|
checkov/ansible/__init__.py,sha256=hFBtNkREui5Ra8CnhV3kJX7AUSeZM0w9h7ClX3ZxSgo,45
|
|
14
14
|
checkov/ansible/runner.py,sha256=Gf0J4K8jyR8-LkxOz7voPaRky-IWfWXyVbK-9CCFgh0,5578
|
|
15
15
|
checkov/ansible/utils.py,sha256=VFD9x3_BgktbXJan1u_H1u1hFmxDEVXgNKXYJvIdP9s,7956
|
|
@@ -1400,8 +1400,8 @@ checkov/serverless/__init__.py,sha256=oUAn9dkSV07GfCKLSaqQANNJZwJn9j7kaVwDEBzAZr
|
|
|
1400
1400
|
checkov/serverless/base_registry.py,sha256=X2mQAYcIiQscc1eazhtz2EWhdjQRi7Ep_kvFVhTfhm4,1970
|
|
1401
1401
|
checkov/serverless/graph_manager.py,sha256=TNvJ5lGJMwoqluzzT9-zbmdNm2bN96_BrPiCOHPYCbk,1750
|
|
1402
1402
|
checkov/serverless/registry.py,sha256=_Oh_DKa4lITlZnGlUJXR8WL2QM9R0-yp-zJNx4lKaLo,158
|
|
1403
|
-
checkov/serverless/runner.py,sha256=
|
|
1404
|
-
checkov/serverless/utils.py,sha256=
|
|
1403
|
+
checkov/serverless/runner.py,sha256=7LptCB2lYbwofmlHSPwB1ZDE6_QFeJLHdRJttXUKBvM,19921
|
|
1404
|
+
checkov/serverless/utils.py,sha256=jjMnYACz268bt0nRjv8eT-_lcRPBWulmo7g6BT12K4w,2232
|
|
1405
1405
|
checkov/serverless/checks/__init__.py,sha256=tNuTOyQi1FcIiShwaMn2YYRApnAnPGrg42Tzt2DSTBg,391
|
|
1406
1406
|
checkov/serverless/checks/base_function_check.py,sha256=Yrati_68MgPRgzL5nug6B5NNV0dfwlva4cGQOOcwMao,269
|
|
1407
1407
|
checkov/serverless/checks/complete/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -1433,9 +1433,10 @@ checkov/serverless/checks/service/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeR
|
|
|
1433
1433
|
checkov/serverless/checks/service/base_service_check.py,sha256=lMs4ZPaBFo2OMYfdd8o7zGY61P52BdP79V0OgtPN-fE,1143
|
|
1434
1434
|
checkov/serverless/checks/service/registry.py,sha256=KQuotQAjNFc-iNVvmDxf6NIsKJPeILIkbQAcwwDJK44,105
|
|
1435
1435
|
checkov/serverless/graph_builder/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
1436
|
-
checkov/serverless/graph_builder/
|
|
1436
|
+
checkov/serverless/graph_builder/definition_context.py,sha256=P1eqPcq8v8hZ-jvd_BaKdvENfGREnEPTIT0Qv4XRuMw,577
|
|
1437
|
+
checkov/serverless/graph_builder/graph_to_definitions.py,sha256=vifgIIv3YXHQeTYwnIxjktFjLt-QdwnZPd70kIB93y8,2531
|
|
1438
|
+
checkov/serverless/graph_builder/local_graph.py,sha256=pfMESZfkBq-Tfk3MOiL04MsBqKV429Cyq6XchdzDp1k,4924
|
|
1437
1439
|
checkov/serverless/graph_builder/graph_components/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
1438
|
-
checkov/serverless/graph_builder/graph_components/block_types.py,sha256=8i6MybOM4GGdLipw1URMPnYsFTBLvCBzfdkviaF1D_0,347
|
|
1439
1440
|
checkov/serverless/graph_builder/graph_components/blocks.py,sha256=82o4ChXHL3yCJsywKDxb49PJQhFm-Aa8_YgyOy5mZ4E,532
|
|
1440
1441
|
checkov/serverless/parsers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
1441
1442
|
checkov/serverless/parsers/context_parser.py,sha256=Xd9mQhQJ_mVi3srSxK_9Zudlc4KNTErMJZ5SJ32kgZ8,3586
|
|
@@ -2713,12 +2714,12 @@ checkov/yaml_doc/base_yaml_check.py,sha256=LbrPcztyZnm08sdj_l5KtgjqBNqlL580qFLc1
|
|
|
2713
2714
|
checkov/yaml_doc/enums.py,sha256=U2IcWt-cFWu1tomKiXdNrRmgK3OwAZSkhOClNDyeY0A,158
|
|
2714
2715
|
checkov/yaml_doc/registry.py,sha256=qpNeWr7CC63SWaT-_6qgx1pDJB3WSgsnSLwC6g7k34E,148
|
|
2715
2716
|
checkov/yaml_doc/runner.py,sha256=wqKfpQwMp5SHaAA1vhPWysE_x_4ovHhFZZWuUd5xufo,5552
|
|
2716
|
-
checkov-3.2.
|
|
2717
|
-
checkov-3.2.
|
|
2717
|
+
checkov-3.2.334.data/scripts/checkov,sha256=5DHGDk_bkcuYsKKhH0gx2PAwSYKgGyufRFnsgwFLdHU,231
|
|
2718
|
+
checkov-3.2.334.data/scripts/checkov.cmd,sha256=jkySNCkwm1dkSBC8eCfrIz67ydiTKth3wls9vQMR0kk,957
|
|
2718
2719
|
sast_integration_tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2719
2720
|
sast_integration_tests/test_checkov_sast_report.py,sha256=JiJeK28cwB5nWZbT1P9vWVhy60e1EDIrK_aSZrwaRMg,2361
|
|
2720
|
-
checkov-3.2.
|
|
2721
|
-
checkov-3.2.
|
|
2722
|
-
checkov-3.2.
|
|
2723
|
-
checkov-3.2.
|
|
2724
|
-
checkov-3.2.
|
|
2721
|
+
checkov-3.2.334.dist-info/LICENSE,sha256=6kUITFZ5KOxBFt9xcr66N0u_Z7yWwGo4Fx-vy0mjdRA,11348
|
|
2722
|
+
checkov-3.2.334.dist-info/METADATA,sha256=zic-GO0BwK5Zcby7EPxHeuRg--1iNM5vGCltK0JzaL8,26087
|
|
2723
|
+
checkov-3.2.334.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
|
|
2724
|
+
checkov-3.2.334.dist-info/top_level.txt,sha256=8TtaYYl8EDyycGLDTcoOJvih-3aoa9L4XZDUCrtnMwk,53
|
|
2725
|
+
checkov-3.2.334.dist-info/RECORD,,
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
from __future__ import annotations
|
|
2
|
-
|
|
3
|
-
from dataclasses import dataclass
|
|
4
|
-
from typing import Literal
|
|
5
|
-
|
|
6
|
-
from checkov.common.graph.graph_builder.graph_components.block_types import BlockType as CommonBlockType
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
@dataclass
|
|
10
|
-
class BlockType(CommonBlockType):
|
|
11
|
-
PROVIDER: Literal["provider"] = "provider"
|
|
12
|
-
FUNCTIONS: Literal["functions"] = "functions"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|