devsecops-engine-tools 1.11.1__py3-none-any.whl → 1.11.3__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.
Potentially problematic release.
This version of devsecops-engine-tools might be problematic. Click here for more details.
- devsecops_engine_tools/engine_core/src/applications/runner_engine_core.py +1 -1
- devsecops_engine_tools/engine_core/src/domain/usecases/handle_scan.py +2 -1
- devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/aws/secrets_manager.py +1 -1
- devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/defect_dojo/defect_dojo.py +2 -1
- devsecops_engine_tools/engine_sast/engine_iac/src/infrastructure/driven_adapters/kics/kics_tool.py +13 -14
- devsecops_engine_tools/engine_sast/engine_iac/src/infrastructure/driven_adapters/kubescape/kubescape_deserealizator.py +1 -1
- devsecops_engine_tools/engine_sast/engine_iac/src/infrastructure/driven_adapters/kubescape/kubescape_tool.py +6 -7
- devsecops_engine_tools/engine_sast/engine_secret/src/applications/runner_secret_scan.py +3 -2
- devsecops_engine_tools/engine_sast/engine_secret/src/domain/model/DeserializeConfigTool.py +3 -0
- devsecops_engine_tools/engine_sast/engine_secret/src/domain/model/gateway/tool_gateway.py +5 -4
- devsecops_engine_tools/engine_sast/engine_secret/src/domain/usecases/secret_scan.py +6 -5
- devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/driven_adapters/trufflehog/trufflehog_run.py +43 -5
- devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/entry_points/entry_point_tool.py +2 -2
- devsecops_engine_tools/engine_sca/engine_dependencies/src/applications/runner_dependencies_scan.py +21 -3
- devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/driven_adapters/dependency_check/__init__.py +0 -0
- devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/driven_adapters/dependency_check/dependency_check_deserialize.py +62 -0
- devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/driven_adapters/dependency_check/dependency_check_tool.py +120 -0
- devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/driven_adapters/xray_tool/xray_manager_scan.py +4 -98
- devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/helpers/get_artifacts.py +107 -0
- devsecops_engine_tools/engine_utilities/utils/utils.py +8 -0
- devsecops_engine_tools/version.py +1 -1
- {devsecops_engine_tools-1.11.1.dist-info → devsecops_engine_tools-1.11.3.dist-info}/METADATA +6 -2
- {devsecops_engine_tools-1.11.1.dist-info → devsecops_engine_tools-1.11.3.dist-info}/RECORD +26 -21
- {devsecops_engine_tools-1.11.1.dist-info → devsecops_engine_tools-1.11.3.dist-info}/WHEEL +0 -0
- {devsecops_engine_tools-1.11.1.dist-info → devsecops_engine_tools-1.11.3.dist-info}/entry_points.txt +0 -0
- {devsecops_engine_tools-1.11.1.dist-info → devsecops_engine_tools-1.11.3.dist-info}/top_level.txt +0 -0
|
@@ -144,7 +144,7 @@ def get_inputs_from_cli(args):
|
|
|
144
144
|
parser.add_argument(
|
|
145
145
|
"--token_external_checks",
|
|
146
146
|
required=False,
|
|
147
|
-
help="Token for downloading external checks from engine_iac if is necessary. Ej: github:token, ssh:privatekey:pass",
|
|
147
|
+
help="Token for downloading external checks from engine_iac or engine_secret if is necessary. Ej: github:token, ssh:privatekey:pass",
|
|
148
148
|
)
|
|
149
149
|
parser.add_argument(
|
|
150
150
|
"--xray_mode",
|
|
@@ -136,7 +136,8 @@ class HandleScan:
|
|
|
136
136
|
findings_list, input_core = runner_secret_scan(
|
|
137
137
|
dict_args,
|
|
138
138
|
config_tool["ENGINE_SECRET"]["TOOL"],
|
|
139
|
-
self.devops_platform_gateway
|
|
139
|
+
self.devops_platform_gateway,
|
|
140
|
+
secret_tool
|
|
140
141
|
)
|
|
141
142
|
if (
|
|
142
143
|
dict_args["use_vulnerability_management"] == "true"
|
devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/defect_dojo/defect_dojo.py
CHANGED
|
@@ -65,7 +65,8 @@ class DefectDojoPlatform(VulnerabilityManagementGateway):
|
|
|
65
65
|
"TRIVY": "Trivy Scan",
|
|
66
66
|
"KUBESCAPE": "Kubescape Scanner",
|
|
67
67
|
"KICS": "KICS Scanner",
|
|
68
|
-
"BEARER": "Bearer CLI"
|
|
68
|
+
"BEARER": "Bearer CLI",
|
|
69
|
+
"DEPENDENCY_CHECK": "Dependency Check Scan"
|
|
69
70
|
}
|
|
70
71
|
|
|
71
72
|
if any(
|
devsecops_engine_tools/engine_sast/engine_iac/src/infrastructure/driven_adapters/kics/kics_tool.py
CHANGED
|
@@ -11,7 +11,7 @@ from devsecops_engine_tools.engine_sast.engine_iac.src.infrastructure.driven_ada
|
|
|
11
11
|
)
|
|
12
12
|
from devsecops_engine_tools.engine_utilities.utils.logger_info import MyLogger
|
|
13
13
|
from devsecops_engine_tools.engine_utilities import settings
|
|
14
|
-
from devsecops_engine_tools.engine_utilities.
|
|
14
|
+
from devsecops_engine_tools.engine_utilities.utils.utils import Utils
|
|
15
15
|
|
|
16
16
|
logger = MyLogger.__call__(**settings.SETTING_LOGGER).get_logger()
|
|
17
17
|
|
|
@@ -28,7 +28,7 @@ class KicsTool(ToolGateway):
|
|
|
28
28
|
logger.error(f"An error ocurred downloading {file} {ex}")
|
|
29
29
|
|
|
30
30
|
def install_tool(self, file, url, command_prefix):
|
|
31
|
-
|
|
31
|
+
utils = Utils()
|
|
32
32
|
kics = f"./{command_prefix}/kics"
|
|
33
33
|
installed = subprocess.run(
|
|
34
34
|
["which", command_prefix],
|
|
@@ -38,7 +38,7 @@ class KicsTool(ToolGateway):
|
|
|
38
38
|
if installed.returncode == 1:
|
|
39
39
|
try:
|
|
40
40
|
self.download(file, url)
|
|
41
|
-
|
|
41
|
+
utils.unzip_file(file, command_prefix)
|
|
42
42
|
subprocess.run(["chmod", "+x", kics])
|
|
43
43
|
return kics
|
|
44
44
|
except Exception as e:
|
|
@@ -56,9 +56,9 @@ class KicsTool(ToolGateway):
|
|
|
56
56
|
return command_prefix
|
|
57
57
|
except:
|
|
58
58
|
try:
|
|
59
|
-
|
|
59
|
+
utils = Utils()
|
|
60
60
|
self.download(file, url)
|
|
61
|
-
|
|
61
|
+
utils.unzip_file(file, command_prefix)
|
|
62
62
|
return f"./{command_prefix}/kics"
|
|
63
63
|
|
|
64
64
|
except Exception as e:
|
|
@@ -81,34 +81,32 @@ class KicsTool(ToolGateway):
|
|
|
81
81
|
logger.error(f"An error ocurred loading KICS results {ex}")
|
|
82
82
|
return None
|
|
83
83
|
|
|
84
|
-
def select_operative_system(self, os_platform,
|
|
84
|
+
def select_operative_system(self, os_platform, config_tool, path_kics):
|
|
85
85
|
command_prefix = path_kics
|
|
86
86
|
if os_platform == "Linux":
|
|
87
87
|
kics_zip = "kics_linux.zip"
|
|
88
88
|
url_kics = config_tool[self.TOOL_KICS]["KICS_LINUX"]
|
|
89
|
-
|
|
89
|
+
return self.install_tool(kics_zip, url_kics, command_prefix)
|
|
90
90
|
elif os_platform == "Windows":
|
|
91
91
|
kics_zip = "kics_windows.zip"
|
|
92
92
|
url_kics = config_tool[self.TOOL_KICS]["KICS_WINDOWS"]
|
|
93
|
-
|
|
93
|
+
return self.install_tool_windows(kics_zip, url_kics, command_prefix)
|
|
94
94
|
elif os_platform == "Darwin":
|
|
95
95
|
kics_zip = "kics_macos.zip"
|
|
96
96
|
url_kics = config_tool[self.TOOL_KICS]["KICS_MAC"]
|
|
97
|
-
|
|
97
|
+
return self.install_tool(kics_zip, url_kics, command_prefix)
|
|
98
98
|
else:
|
|
99
99
|
logger.warning(f"{os_platform} is not supported.")
|
|
100
100
|
return [], None
|
|
101
101
|
|
|
102
|
-
self.execute_kics(folders_to_scan, command_prefix)
|
|
103
|
-
|
|
104
102
|
def get_assets(self, kics_version):
|
|
105
103
|
name_zip = "assets_compressed.zip"
|
|
106
104
|
assets_url = f"https://github.com/Checkmarx/kics/releases/download/v{kics_version}/extracted-info.zip"
|
|
107
105
|
self.download(name_zip, assets_url)
|
|
108
106
|
|
|
109
107
|
directory_assets = "kics_assets"
|
|
110
|
-
|
|
111
|
-
|
|
108
|
+
utils = Utils()
|
|
109
|
+
utils.unzip_file(name_zip, directory_assets)
|
|
112
110
|
|
|
113
111
|
def run_tool(
|
|
114
112
|
self, config_tool, folders_to_scan, **kwargs
|
|
@@ -120,7 +118,8 @@ class KicsTool(ToolGateway):
|
|
|
120
118
|
self.get_assets(kics_version)
|
|
121
119
|
|
|
122
120
|
os_platform = platform.system()
|
|
123
|
-
self.select_operative_system(os_platform,
|
|
121
|
+
command_prefix = self.select_operative_system(os_platform, config_tool, path_kics)
|
|
122
|
+
self.execute_kics(folders_to_scan, command_prefix)
|
|
124
123
|
|
|
125
124
|
data = self.load_results()
|
|
126
125
|
if data:
|
|
@@ -46,7 +46,7 @@ class KubescapeDeserealizator:
|
|
|
46
46
|
resource = resources.get(resource_id)
|
|
47
47
|
|
|
48
48
|
if resource:
|
|
49
|
-
relative_path = resource.get("source", {}).get("
|
|
49
|
+
relative_path = resource.get("source", {}).get("relativePath", "").replace("\\", "/")
|
|
50
50
|
severity_score = self.get_severity_score(frameworks, control_id)
|
|
51
51
|
|
|
52
52
|
result_extracted_data.append({
|
|
@@ -72,30 +72,28 @@ class KubescapeTool(ToolGateway):
|
|
|
72
72
|
logger.error("The JSON result is empty.")
|
|
73
73
|
return None
|
|
74
74
|
|
|
75
|
-
def select_operative_system(self, os_platform,
|
|
75
|
+
def select_operative_system(self, os_platform, base_url):
|
|
76
76
|
if os_platform == "Linux":
|
|
77
77
|
distro_name = distro.name()
|
|
78
78
|
if distro_name == "Ubuntu":
|
|
79
79
|
file = "kubescape-ubuntu-latest"
|
|
80
80
|
self.install_tool(file, base_url + file)
|
|
81
|
-
|
|
81
|
+
return f"./{file}"
|
|
82
82
|
else:
|
|
83
83
|
logger.warning(f"{distro_name} is not supported.")
|
|
84
84
|
return None
|
|
85
85
|
elif os_platform == "Windows":
|
|
86
86
|
file = "kubescape-windows-latest.exe"
|
|
87
87
|
self.install_tool_windows(file, base_url + file)
|
|
88
|
-
|
|
88
|
+
return f"./{file}"
|
|
89
89
|
elif os_platform == "Darwin":
|
|
90
90
|
file = "kubescape-macos-latest"
|
|
91
91
|
self.install_tool(file, base_url + file)
|
|
92
|
-
|
|
92
|
+
return f"./{file}"
|
|
93
93
|
else:
|
|
94
94
|
logger.warning(f"{os_platform} is not supported.")
|
|
95
95
|
return [], None
|
|
96
96
|
|
|
97
|
-
self.execute_kubescape(folders_to_scan, command_prefix)
|
|
98
|
-
|
|
99
97
|
def run_tool(self, config_tool, folders_to_scan, platform_to_scan, **kwargs):
|
|
100
98
|
|
|
101
99
|
if folders_to_scan and "k8s" in platform_to_scan:
|
|
@@ -103,7 +101,8 @@ class KubescapeTool(ToolGateway):
|
|
|
103
101
|
kubescape_version = config_tool["KUBESCAPE"]["VERSION"]
|
|
104
102
|
os_platform = platform.system()
|
|
105
103
|
base_url = f"https://github.com/kubescape/kubescape/releases/download/v{kubescape_version}/"
|
|
106
|
-
self.select_operative_system(os_platform,
|
|
104
|
+
command_prefix = self.select_operative_system(os_platform, base_url)
|
|
105
|
+
self.execute_kubescape(folders_to_scan, command_prefix)
|
|
107
106
|
|
|
108
107
|
json_name = "results_kubescape.json"
|
|
109
108
|
data = self.load_json(json_name)
|
|
@@ -11,7 +11,7 @@ from devsecops_engine_tools.engine_utilities.git_cli.infrastructure.git_run impo
|
|
|
11
11
|
GitRun
|
|
12
12
|
)
|
|
13
13
|
|
|
14
|
-
def runner_secret_scan(dict_args, tool, devops_platform_gateway):
|
|
14
|
+
def runner_secret_scan(dict_args, tool, devops_platform_gateway, secret_tool):
|
|
15
15
|
try:
|
|
16
16
|
tool_deserealizator = None
|
|
17
17
|
tool_gateway = None
|
|
@@ -25,7 +25,8 @@ def runner_secret_scan(dict_args, tool, devops_platform_gateway):
|
|
|
25
25
|
dict_args = dict_args,
|
|
26
26
|
tool=tool,
|
|
27
27
|
tool_deserealizator = tool_deserealizator,
|
|
28
|
-
git_gateway = git_gateway
|
|
28
|
+
git_gateway = git_gateway,
|
|
29
|
+
secret_tool = secret_tool
|
|
29
30
|
)
|
|
30
31
|
except Exception as e:
|
|
31
32
|
raise Exception(f"Error engine_secret : {str(e)}")
|
|
@@ -9,3 +9,6 @@ class DeserializeConfigTool:
|
|
|
9
9
|
self.exclude_path = json_data[tool]["EXCLUDE_PATH"]
|
|
10
10
|
self.number_threads = json_data[tool]["NUMBER_THREADS"]
|
|
11
11
|
self.target_branches = json_data["TARGET_BRANCHES"]
|
|
12
|
+
self.enable_custom_rules = json_data[tool]["ENABLE_CUSTOM_RULES"]
|
|
13
|
+
self.external_dir_owner = json_data[tool]["EXTERNAL_DIR_OWNER"]
|
|
14
|
+
self.external_dir_repo = json_data[tool]["EXTERNAL_DIR_REPOSITORY"]
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
from abc import ABCMeta, abstractmethod
|
|
2
|
-
|
|
2
|
+
from devsecops_engine_tools.engine_sast.engine_secret.src.domain.model.DeserializeConfigTool import DeserializeConfigTool
|
|
3
3
|
|
|
4
4
|
class ToolGateway(metaclass=ABCMeta):
|
|
5
5
|
@abstractmethod
|
|
@@ -8,9 +8,10 @@ class ToolGateway(metaclass=ABCMeta):
|
|
|
8
8
|
@abstractmethod
|
|
9
9
|
def run_tool_secret_scan(self,
|
|
10
10
|
files_pullrequest: dict,
|
|
11
|
-
exclude_path: dict,
|
|
12
11
|
agent_os: str,
|
|
13
12
|
agent_work_folder: str,
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
repository_name: str,
|
|
14
|
+
config_tool: DeserializeConfigTool,
|
|
15
|
+
secret_tool,
|
|
16
|
+
secret_external_checks) -> str:
|
|
16
17
|
"run tool secret scan"
|
|
@@ -28,9 +28,10 @@ class SecretScan:
|
|
|
28
28
|
self.tool_deserialize = tool_deserialize
|
|
29
29
|
self.git_gateway = git_gateway
|
|
30
30
|
|
|
31
|
-
def process(self, skip_tool, config_tool):
|
|
31
|
+
def process(self, skip_tool, config_tool, secret_tool, dict_args):
|
|
32
32
|
finding_list = []
|
|
33
33
|
file_path_findings = ""
|
|
34
|
+
secret_external_checks=dict_args["token_external_checks"]
|
|
34
35
|
if skip_tool == False:
|
|
35
36
|
self.tool_gateway.install_tool(self.devops_platform_gateway.get_variable("os"), self.devops_platform_gateway.get_variable("temp_directory"))
|
|
36
37
|
files_pullrequest = self.git_gateway.get_files_pull_request(
|
|
@@ -45,12 +46,12 @@ class SecretScan:
|
|
|
45
46
|
self.devops_platform_gateway.get_variable("repository_provider"))
|
|
46
47
|
findings, file_path_findings = self.tool_gateway.run_tool_secret_scan(
|
|
47
48
|
files_pullrequest,
|
|
48
|
-
config_tool.exclude_path,
|
|
49
49
|
self.devops_platform_gateway.get_variable("os"),
|
|
50
50
|
self.devops_platform_gateway.get_variable("path_directory"),
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
51
|
+
self.devops_platform_gateway.get_variable("repository"),
|
|
52
|
+
config_tool,
|
|
53
|
+
secret_tool,
|
|
54
|
+
secret_external_checks)
|
|
54
55
|
finding_list = self.tool_deserialize.get_list_vulnerability(
|
|
55
56
|
findings,
|
|
56
57
|
self.devops_platform_gateway.get_variable("os"),
|
|
@@ -7,6 +7,13 @@ import concurrent.futures
|
|
|
7
7
|
from devsecops_engine_tools.engine_sast.engine_secret.src.domain.model.gateway.tool_gateway import (
|
|
8
8
|
ToolGateway,
|
|
9
9
|
)
|
|
10
|
+
from devsecops_engine_tools.engine_utilities.github.infrastructure.github_api import (
|
|
11
|
+
GithubApi,
|
|
12
|
+
)
|
|
13
|
+
from devsecops_engine_tools.engine_utilities.utils.logger_info import MyLogger
|
|
14
|
+
from devsecops_engine_tools.engine_utilities import settings
|
|
15
|
+
|
|
16
|
+
logger = MyLogger.__call__(**settings.SETTING_LOGGER).get_logger()
|
|
10
17
|
|
|
11
18
|
result = []
|
|
12
19
|
|
|
@@ -40,20 +47,34 @@ class TrufflehogRun(ToolGateway):
|
|
|
40
47
|
def run_tool_secret_scan(
|
|
41
48
|
self,
|
|
42
49
|
files_commits,
|
|
43
|
-
exclude_paths,
|
|
44
50
|
agent_os,
|
|
45
51
|
agent_work_folder,
|
|
46
|
-
num_threads,
|
|
47
52
|
repository_name,
|
|
53
|
+
config_tool,
|
|
54
|
+
secret_tool,
|
|
55
|
+
secret_external_checks
|
|
48
56
|
):
|
|
49
57
|
trufflehog_command = "trufflehog"
|
|
50
58
|
if "Windows" in agent_os:
|
|
51
59
|
trufflehog_command = "C:/Trufflehog/bin/trufflehog.exe"
|
|
52
60
|
with open(f"{agent_work_folder}/excludedPath.txt", "w") as file:
|
|
53
|
-
file.write("\n".join(
|
|
61
|
+
file.write("\n".join(config_tool.exclude_path))
|
|
54
62
|
exclude_path = f"{agent_work_folder}/excludedPath.txt"
|
|
55
63
|
include_paths = self.config_include_path(files_commits, agent_work_folder)
|
|
56
|
-
|
|
64
|
+
enable_custom_rules = config_tool.enable_custom_rules.lower()
|
|
65
|
+
secret = None
|
|
66
|
+
|
|
67
|
+
if secret_tool is not None:
|
|
68
|
+
secret = secret_tool["github_token"] if "github" in secret_tool else None
|
|
69
|
+
elif secret_external_checks is not None:
|
|
70
|
+
secret = secret_external_checks.split("github:")[1] if "github" in secret_external_checks else None
|
|
71
|
+
|
|
72
|
+
if enable_custom_rules == "true" and secret is not None:
|
|
73
|
+
self.configurate_external_checks(config_tool, secret)
|
|
74
|
+
else: #In case that remote config from tool is enable but in the args dont send any type of secrets. So dont modified command
|
|
75
|
+
enable_custom_rules == "false"
|
|
76
|
+
|
|
77
|
+
with concurrent.futures.ThreadPoolExecutor(max_workers=config_tool.number_threads) as executor:
|
|
57
78
|
results = executor.map(
|
|
58
79
|
self.run_trufflehog,
|
|
59
80
|
[trufflehog_command] * len(include_paths),
|
|
@@ -61,6 +82,7 @@ class TrufflehogRun(ToolGateway):
|
|
|
61
82
|
[exclude_path] * len(include_paths),
|
|
62
83
|
include_paths,
|
|
63
84
|
[repository_name] * len(include_paths),
|
|
85
|
+
[enable_custom_rules],
|
|
64
86
|
)
|
|
65
87
|
findings, file_findings = self.create_file(self.decode_output(results), agent_work_folder)
|
|
66
88
|
return findings, file_findings
|
|
@@ -90,8 +112,13 @@ class TrufflehogRun(ToolGateway):
|
|
|
90
112
|
exclude_path,
|
|
91
113
|
include_path,
|
|
92
114
|
repository_name,
|
|
115
|
+
enable_custom_rules
|
|
93
116
|
):
|
|
94
117
|
command = f"{trufflehog_command} filesystem {agent_work_folder + '/' + repository_name} --include-paths {include_path} --exclude-paths {exclude_path} --no-verification --json"
|
|
118
|
+
|
|
119
|
+
if enable_custom_rules == "true":
|
|
120
|
+
command = command.replace("--no-verification --json", "--config /tmp/rules/trufflehog/custom-rules.yaml --no-verification --json")
|
|
121
|
+
|
|
95
122
|
result = subprocess.run(command, capture_output=True, shell=True, text=True)
|
|
96
123
|
return result.stdout.strip()
|
|
97
124
|
|
|
@@ -115,4 +142,15 @@ class TrufflehogRun(ToolGateway):
|
|
|
115
142
|
find["SourceMetadata"]["Data"]["Filesystem"]["file"] = where_text
|
|
116
143
|
json_str = json.dumps(find)
|
|
117
144
|
file.write(json_str + '\n')
|
|
118
|
-
return findings, file_findings
|
|
145
|
+
return findings, file_findings
|
|
146
|
+
|
|
147
|
+
def configurate_external_checks(self, config_tool, secret):
|
|
148
|
+
try:
|
|
149
|
+
github_api = GithubApi(secret)
|
|
150
|
+
github_api.download_latest_release_assets(
|
|
151
|
+
config_tool.external_dir_owner,
|
|
152
|
+
config_tool.external_dir_repo,
|
|
153
|
+
"/tmp",
|
|
154
|
+
)
|
|
155
|
+
except Exception as ex:
|
|
156
|
+
logger.error(f"An error ocurred download external checks {ex}")
|
devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/entry_points/entry_point_tool.py
CHANGED
|
@@ -4,13 +4,13 @@ from devsecops_engine_tools.engine_sast.engine_secret.src.domain.usecases.set_in
|
|
|
4
4
|
SetInputCore,
|
|
5
5
|
)
|
|
6
6
|
|
|
7
|
-
def engine_secret_scan(devops_platform_gateway, tool_gateway, dict_args, tool, tool_deserealizator, git_gateway):
|
|
7
|
+
def engine_secret_scan(devops_platform_gateway, tool_gateway, dict_args, tool, tool_deserealizator, git_gateway, secret_tool):
|
|
8
8
|
exclusions = devops_platform_gateway.get_remote_config(
|
|
9
9
|
dict_args["remote_config_repo"], "engine_sast/engine_secret/Exclusions.json"
|
|
10
10
|
)
|
|
11
11
|
secret_scan = SecretScan(tool_gateway, devops_platform_gateway, tool_deserealizator, git_gateway)
|
|
12
12
|
config_tool = secret_scan.complete_config_tool(dict_args, tool)
|
|
13
13
|
skip_tool = secret_scan.skip_from_exclusion(exclusions)
|
|
14
|
-
finding_list, file_path_findings = secret_scan.process(skip_tool, config_tool)
|
|
14
|
+
finding_list, file_path_findings = secret_scan.process(skip_tool, config_tool, secret_tool, dict_args)
|
|
15
15
|
input_core = SetInputCore(devops_platform_gateway, dict_args, tool, config_tool)
|
|
16
16
|
return finding_list, input_core.set_input_core(file_path_findings)
|
devsecops_engine_tools/engine_sca/engine_dependencies/src/applications/runner_dependencies_scan.py
CHANGED
|
@@ -4,6 +4,12 @@ from devsecops_engine_tools.engine_sca.engine_dependencies.src.infrastructure.dr
|
|
|
4
4
|
from devsecops_engine_tools.engine_sca.engine_dependencies.src.infrastructure.driven_adapters.xray_tool.xray_deserialize_output import (
|
|
5
5
|
XrayDeserializator,
|
|
6
6
|
)
|
|
7
|
+
from devsecops_engine_tools.engine_sca.engine_dependencies.src.infrastructure.driven_adapters.dependency_check.dependency_check_tool import (
|
|
8
|
+
DependencyCheckTool,
|
|
9
|
+
)
|
|
10
|
+
from devsecops_engine_tools.engine_sca.engine_dependencies.src.infrastructure.driven_adapters.dependency_check.dependency_check_deserialize import (
|
|
11
|
+
DependencyCheckDeserialize,
|
|
12
|
+
)
|
|
7
13
|
from devsecops_engine_tools.engine_sca.engine_dependencies.src.infrastructure.entry_points.entry_point_tool import (
|
|
8
14
|
init_engine_dependencies,
|
|
9
15
|
)
|
|
@@ -11,9 +17,21 @@ from devsecops_engine_tools.engine_sca.engine_dependencies.src.infrastructure.en
|
|
|
11
17
|
|
|
12
18
|
def runner_engine_dependencies(dict_args, config_tool, secret_tool, devops_platform_gateway):
|
|
13
19
|
try:
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
20
|
+
tools_mapping = {
|
|
21
|
+
"XRAY": {
|
|
22
|
+
"tool_run": XrayScan,
|
|
23
|
+
"tool_deserializator": XrayDeserializator
|
|
24
|
+
},
|
|
25
|
+
"DEPENDENCY_CHECK": {
|
|
26
|
+
"tool_run": DependencyCheckTool,
|
|
27
|
+
"tool_deserializator": DependencyCheckDeserialize
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
selected_tool = config_tool["ENGINE_DEPENDENCIES"]["TOOL"]
|
|
32
|
+
tool_run = tools_mapping[selected_tool]["tool_run"]()
|
|
33
|
+
tool_deserializator = tools_mapping[selected_tool]["tool_deserializator"]()
|
|
34
|
+
|
|
17
35
|
|
|
18
36
|
return init_engine_dependencies(
|
|
19
37
|
tool_run,
|
|
File without changes
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
from devsecops_engine_tools.engine_sca.engine_dependencies.src.domain.model.gateways.deserializator_gateway import (
|
|
2
|
+
DeserializatorGateway,
|
|
3
|
+
)
|
|
4
|
+
from devsecops_engine_tools.engine_core.src.domain.model.finding import (
|
|
5
|
+
Finding,
|
|
6
|
+
Category,
|
|
7
|
+
)
|
|
8
|
+
from dataclasses import dataclass
|
|
9
|
+
from datetime import datetime
|
|
10
|
+
import json
|
|
11
|
+
import os
|
|
12
|
+
from devsecops_engine_tools.engine_utilities.utils.logger_info import MyLogger
|
|
13
|
+
from devsecops_engine_tools.engine_utilities import settings
|
|
14
|
+
|
|
15
|
+
logger = MyLogger.__call__(**settings.SETTING_LOGGER).get_logger()
|
|
16
|
+
|
|
17
|
+
@dataclass
|
|
18
|
+
class DependencyCheckDeserialize(DeserializatorGateway):
|
|
19
|
+
|
|
20
|
+
def get_list_findings(self, dependencies_scanned_file) -> "list[Finding]":
|
|
21
|
+
filename, extension = os.path.splitext(dependencies_scanned_file)
|
|
22
|
+
if extension.lower() != ".json":
|
|
23
|
+
dependencies_scanned_file = f"{filename}.json"
|
|
24
|
+
|
|
25
|
+
data_result = self.load_results(dependencies_scanned_file)
|
|
26
|
+
|
|
27
|
+
list_open_vulnerabilities = []
|
|
28
|
+
for dependency in data_result.get("dependencies", []):
|
|
29
|
+
for vulnerability in dependency.get("vulnerabilities", []):
|
|
30
|
+
vulnerable_software = vulnerability.get("vulnerableSoftware", [])
|
|
31
|
+
fix = (
|
|
32
|
+
vulnerable_software[0]
|
|
33
|
+
.get("software", {})
|
|
34
|
+
.get("versionEndExcluding", None)
|
|
35
|
+
if vulnerable_software
|
|
36
|
+
else None
|
|
37
|
+
)
|
|
38
|
+
finding_open = Finding(
|
|
39
|
+
id=vulnerability["name"][:20],
|
|
40
|
+
cvss=str(vulnerability.get("cvssv3", {})),
|
|
41
|
+
where=dependency.get("fileName").split(':')[-1].strip(),
|
|
42
|
+
description=vulnerability["description"][:170].replace("\n\n", " "),
|
|
43
|
+
severity=vulnerability["severity"].lower(),
|
|
44
|
+
identification_date=datetime.now().strftime("%d%m%Y"),
|
|
45
|
+
published_date_cve=None,
|
|
46
|
+
module="engine_dependencies",
|
|
47
|
+
category=Category.VULNERABILITY,
|
|
48
|
+
requirements=fix,
|
|
49
|
+
tool="DEPENDENCY_CHECK"
|
|
50
|
+
)
|
|
51
|
+
list_open_vulnerabilities.append(finding_open)
|
|
52
|
+
|
|
53
|
+
return list_open_vulnerabilities
|
|
54
|
+
|
|
55
|
+
def load_results(self, dependencies_scanned_file):
|
|
56
|
+
try:
|
|
57
|
+
with open(dependencies_scanned_file) as f:
|
|
58
|
+
data = json.load(f)
|
|
59
|
+
return data
|
|
60
|
+
except Exception as ex:
|
|
61
|
+
logger.error(f"An error ocurred loading dependency-check results {ex}")
|
|
62
|
+
return None
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
from devsecops_engine_tools.engine_sca.engine_dependencies.src.domain.model.gateways.tool_gateway import (
|
|
2
|
+
ToolGateway,
|
|
3
|
+
)
|
|
4
|
+
|
|
5
|
+
import requests
|
|
6
|
+
import subprocess
|
|
7
|
+
import os
|
|
8
|
+
import platform
|
|
9
|
+
import shutil
|
|
10
|
+
|
|
11
|
+
from devsecops_engine_tools.engine_utilities.utils.utils import Utils
|
|
12
|
+
from devsecops_engine_tools.engine_sca.engine_dependencies.src.infrastructure.helpers.get_artifacts import GetArtifacts
|
|
13
|
+
from devsecops_engine_tools.engine_utilities.utils.logger_info import MyLogger
|
|
14
|
+
from devsecops_engine_tools.engine_utilities import settings
|
|
15
|
+
|
|
16
|
+
logger = MyLogger.__call__(**settings.SETTING_LOGGER).get_logger()
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class DependencyCheckTool(ToolGateway):
|
|
20
|
+
def download_tool(self, cli_version):
|
|
21
|
+
try:
|
|
22
|
+
url = f"https://github.com/jeremylong/DependencyCheck/releases/download/v{cli_version}/dependency-check-{cli_version}-release.zip"
|
|
23
|
+
response = requests.get(url, allow_redirects=True)
|
|
24
|
+
home_directory = os.path.expanduser("~")
|
|
25
|
+
zip_name = os.path.join(home_directory, f"dependency_check_{cli_version}.zip")
|
|
26
|
+
with open(zip_name, "wb") as f:
|
|
27
|
+
f.write(response.content)
|
|
28
|
+
|
|
29
|
+
utils = Utils()
|
|
30
|
+
utils.unzip_file(zip_name, home_directory)
|
|
31
|
+
except Exception as ex:
|
|
32
|
+
logger.error(f"An error ocurred downloading dependency-check {ex}")
|
|
33
|
+
|
|
34
|
+
def install_tool(self, cli_version, is_windows=False):
|
|
35
|
+
command_prefix = "dependency-check.bat" if is_windows else "dependency-check.sh"
|
|
36
|
+
|
|
37
|
+
installed = shutil.which(command_prefix)
|
|
38
|
+
if installed:
|
|
39
|
+
return command_prefix
|
|
40
|
+
|
|
41
|
+
home_directory = os.path.expanduser("~")
|
|
42
|
+
bin_route = os.path.join(home_directory, f"dependency-check/bin/{command_prefix}")
|
|
43
|
+
|
|
44
|
+
if shutil.which(bin_route):
|
|
45
|
+
return bin_route
|
|
46
|
+
|
|
47
|
+
self.download_tool(cli_version)
|
|
48
|
+
|
|
49
|
+
try:
|
|
50
|
+
if os.path.exists(bin_route):
|
|
51
|
+
if not is_windows:
|
|
52
|
+
subprocess.run(["chmod", "+x", bin_route], check=True)
|
|
53
|
+
return bin_route
|
|
54
|
+
except Exception as e:
|
|
55
|
+
logger.error(f"Error installing OWASP dependency check: {e}")
|
|
56
|
+
return None
|
|
57
|
+
|
|
58
|
+
def scan_dependencies(self, command_prefix, file_to_scan, token):
|
|
59
|
+
try:
|
|
60
|
+
command = [command_prefix, "--format", "JSON", "--format", "XML", "--nvdApiKey", token, "--scan", file_to_scan,]
|
|
61
|
+
|
|
62
|
+
if not token:
|
|
63
|
+
print("¡¡Remember!!, it is recommended to use the API key for faster vulnerability database downloads.")
|
|
64
|
+
command = [command_prefix, "--format", "JSON", "--format", "XML", "--scan", file_to_scan,]
|
|
65
|
+
|
|
66
|
+
subprocess.run(command, capture_output=True, check=True)
|
|
67
|
+
except subprocess.CalledProcessError as error:
|
|
68
|
+
logger.error(f"Error executing OWASP dependency check scan: {error}")
|
|
69
|
+
|
|
70
|
+
def select_operative_system(self, cli_version):
|
|
71
|
+
os_platform = platform.system()
|
|
72
|
+
|
|
73
|
+
if os_platform in ["Linux", "Darwin"]:
|
|
74
|
+
return self.install_tool(cli_version, is_windows=False)
|
|
75
|
+
elif os_platform == "Windows":
|
|
76
|
+
return self.install_tool(cli_version, is_windows=True)
|
|
77
|
+
else:
|
|
78
|
+
logger.warning(f"{os_platform} is not supported.")
|
|
79
|
+
return None
|
|
80
|
+
|
|
81
|
+
def search_result(self):
|
|
82
|
+
try:
|
|
83
|
+
file_result = os.path.join(os.getcwd(), "dependency-check-report.xml")
|
|
84
|
+
return file_result
|
|
85
|
+
except Exception as ex:
|
|
86
|
+
logger.error(f"An error ocurred search dependency-check results {ex}")
|
|
87
|
+
return None
|
|
88
|
+
|
|
89
|
+
def is_java_installed(self):
|
|
90
|
+
return shutil.which("java") is not None
|
|
91
|
+
|
|
92
|
+
def run_tool_dependencies_sca(
|
|
93
|
+
self,
|
|
94
|
+
remote_config,
|
|
95
|
+
dict_args,
|
|
96
|
+
exclusion,
|
|
97
|
+
pipeline_name,
|
|
98
|
+
to_scan,
|
|
99
|
+
token,
|
|
100
|
+
token_engine_dependencies
|
|
101
|
+
):
|
|
102
|
+
if not self.is_java_installed():
|
|
103
|
+
logger.error("Java is not installed, please install it to run dependency check")
|
|
104
|
+
return None
|
|
105
|
+
|
|
106
|
+
cli_version = remote_config["DEPENDENCY_CHECK"]["CLI_VERSION"]
|
|
107
|
+
|
|
108
|
+
get_artifacts = GetArtifacts()
|
|
109
|
+
|
|
110
|
+
pattern = get_artifacts.excluded_files(remote_config, pipeline_name, exclusion, "DEPENDENCY_CHECK")
|
|
111
|
+
to_scan = get_artifacts.find_artifacts(
|
|
112
|
+
to_scan, pattern, remote_config["DEPENDENCY_CHECK"]["PACKAGES_TO_SCAN"]
|
|
113
|
+
)
|
|
114
|
+
|
|
115
|
+
if not to_scan:
|
|
116
|
+
return None
|
|
117
|
+
|
|
118
|
+
command_prefix = self.select_operative_system(cli_version)
|
|
119
|
+
self.scan_dependencies(command_prefix, to_scan, token_engine_dependencies)
|
|
120
|
+
return self.search_result()
|
|
@@ -8,9 +8,8 @@ import requests
|
|
|
8
8
|
import re
|
|
9
9
|
import os
|
|
10
10
|
import json
|
|
11
|
-
import shutil
|
|
12
|
-
import tarfile
|
|
13
11
|
|
|
12
|
+
from devsecops_engine_tools.engine_sca.engine_dependencies.src.infrastructure.helpers.get_artifacts import GetArtifacts
|
|
14
13
|
from devsecops_engine_tools.engine_utilities.utils.logger_info import MyLogger
|
|
15
14
|
from devsecops_engine_tools.engine_utilities import settings
|
|
16
15
|
|
|
@@ -18,100 +17,6 @@ logger = MyLogger.__call__(**settings.SETTING_LOGGER).get_logger()
|
|
|
18
17
|
|
|
19
18
|
|
|
20
19
|
class XrayScan(ToolGateway):
|
|
21
|
-
def excluded_files(self, remote_config, pipeline_name, exclusions):
|
|
22
|
-
pattern = remote_config["XRAY"]["REGEX_EXPRESSION_EXTENSIONS"]
|
|
23
|
-
if pipeline_name in exclusions:
|
|
24
|
-
for ex in exclusions[pipeline_name]["XRAY"]:
|
|
25
|
-
if ex.get("SKIP_FILES", 0):
|
|
26
|
-
exclusion = ex.get("SKIP_FILES")
|
|
27
|
-
if exclusion.get("files", 0):
|
|
28
|
-
excluded_file_types = exclusion["files"]
|
|
29
|
-
pattern2 = pattern
|
|
30
|
-
for ext in excluded_file_types:
|
|
31
|
-
pattern2 = (
|
|
32
|
-
pattern2.replace("|" + ext, "")
|
|
33
|
-
.replace(ext + "|", "")
|
|
34
|
-
.replace(ext, "")
|
|
35
|
-
)
|
|
36
|
-
pattern = pattern2
|
|
37
|
-
|
|
38
|
-
return pattern
|
|
39
|
-
|
|
40
|
-
def find_packages(self, pattern, packages, working_dir):
|
|
41
|
-
packages_list = []
|
|
42
|
-
files_list = []
|
|
43
|
-
extension_pattern = re.compile(pattern, re.IGNORECASE)
|
|
44
|
-
for root, dirs, files in os.walk(working_dir):
|
|
45
|
-
components = root.split(os.path.sep)
|
|
46
|
-
flag = 0
|
|
47
|
-
for package in packages:
|
|
48
|
-
if not (package in components):
|
|
49
|
-
flag = 1
|
|
50
|
-
if package in dirs:
|
|
51
|
-
packages_list.append(os.path.join(root, package))
|
|
52
|
-
if flag:
|
|
53
|
-
for file in files:
|
|
54
|
-
if extension_pattern.search(file):
|
|
55
|
-
files_list.append(os.path.join(root, file))
|
|
56
|
-
return packages_list, files_list
|
|
57
|
-
|
|
58
|
-
def compress_and_mv(self, tar_path, package):
|
|
59
|
-
try:
|
|
60
|
-
with tarfile.open(tar_path, "w") as tar:
|
|
61
|
-
tar.add(
|
|
62
|
-
package,
|
|
63
|
-
arcname=os.path.basename(package),
|
|
64
|
-
filter=lambda x: None if "/.bin/" in x.name else x,
|
|
65
|
-
)
|
|
66
|
-
|
|
67
|
-
except subprocess.CalledProcessError as e:
|
|
68
|
-
logger.error(f"Error during {package} compression: {e}")
|
|
69
|
-
|
|
70
|
-
def move_files(self, dir_to_scan_path, finded_files):
|
|
71
|
-
for file in finded_files:
|
|
72
|
-
target = os.path.join(dir_to_scan_path, os.path.basename(file))
|
|
73
|
-
shutil.copy2(file, target)
|
|
74
|
-
logger.debug(f"File to scan: {file}")
|
|
75
|
-
|
|
76
|
-
def find_artifacts(self, to_scan, pattern, packages):
|
|
77
|
-
dir_to_scan_path = os.path.join(to_scan, "dependencies_to_scan")
|
|
78
|
-
if os.path.exists(dir_to_scan_path):
|
|
79
|
-
shutil.rmtree(dir_to_scan_path)
|
|
80
|
-
os.makedirs(dir_to_scan_path)
|
|
81
|
-
|
|
82
|
-
packages_list, files_list = self.find_packages(pattern, packages, to_scan)
|
|
83
|
-
|
|
84
|
-
for package in packages_list:
|
|
85
|
-
tar_path = os.path.join(
|
|
86
|
-
dir_to_scan_path,
|
|
87
|
-
"pkg"
|
|
88
|
-
+ str(packages_list.index(package) + 1)
|
|
89
|
-
+ "_"
|
|
90
|
-
+ os.path.basename(package)
|
|
91
|
-
+ ".tar",
|
|
92
|
-
)
|
|
93
|
-
self.compress_and_mv(tar_path, package)
|
|
94
|
-
|
|
95
|
-
if len(files_list):
|
|
96
|
-
self.move_files(dir_to_scan_path, files_list)
|
|
97
|
-
|
|
98
|
-
files = os.listdir(dir_to_scan_path)
|
|
99
|
-
files = [
|
|
100
|
-
file
|
|
101
|
-
for file in files
|
|
102
|
-
if os.path.isfile(os.path.join(dir_to_scan_path, file))
|
|
103
|
-
]
|
|
104
|
-
file_to_scan = None
|
|
105
|
-
if files:
|
|
106
|
-
file_to_scan = os.path.join(dir_to_scan_path, "file_to_scan.tar")
|
|
107
|
-
self.compress_and_mv(file_to_scan, dir_to_scan_path)
|
|
108
|
-
files_string = ", ".join(files)
|
|
109
|
-
logger.debug(f"Files to scan: {files_string}")
|
|
110
|
-
print(f"Files to scan: {files_string}")
|
|
111
|
-
else:
|
|
112
|
-
logger.warning("No artifacts found")
|
|
113
|
-
|
|
114
|
-
return file_to_scan
|
|
115
20
|
|
|
116
21
|
def install_tool_linux(self, prefix, version):
|
|
117
22
|
installed = subprocess.run(
|
|
@@ -241,8 +146,9 @@ class XrayScan(ToolGateway):
|
|
|
241
146
|
):
|
|
242
147
|
token = secret_tool["token_xray"] if secret_tool else token_engine_dependencies
|
|
243
148
|
if dict_args["xray_mode"] == "scan":
|
|
244
|
-
|
|
245
|
-
|
|
149
|
+
get_artifacts = GetArtifacts()
|
|
150
|
+
pattern = get_artifacts.excluded_files(remote_config, pipeline_name, exclusion, "XRAY")
|
|
151
|
+
to_scan = get_artifacts.find_artifacts(
|
|
246
152
|
to_scan, pattern, remote_config["XRAY"]["PACKAGES_TO_SCAN"]
|
|
247
153
|
)
|
|
248
154
|
cwd = os.getcwd()
|
devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/helpers/get_artifacts.py
ADDED
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import re
|
|
3
|
+
import tarfile
|
|
4
|
+
import subprocess
|
|
5
|
+
import shutil
|
|
6
|
+
|
|
7
|
+
from devsecops_engine_tools.engine_utilities.utils.logger_info import MyLogger
|
|
8
|
+
from devsecops_engine_tools.engine_utilities import settings
|
|
9
|
+
|
|
10
|
+
logger = MyLogger.__call__(**settings.SETTING_LOGGER).get_logger()
|
|
11
|
+
|
|
12
|
+
class GetArtifacts:
|
|
13
|
+
|
|
14
|
+
def excluded_files(self, remote_config, pipeline_name, exclusions, tool):
|
|
15
|
+
pattern = remote_config[tool]["REGEX_EXPRESSION_EXTENSIONS"]
|
|
16
|
+
if pipeline_name in exclusions:
|
|
17
|
+
for ex in exclusions[pipeline_name][tool]:
|
|
18
|
+
if ex.get("SKIP_FILES", 0):
|
|
19
|
+
exclusion = ex.get("SKIP_FILES")
|
|
20
|
+
if exclusion.get("files", 0):
|
|
21
|
+
excluded_file_types = exclusion["files"]
|
|
22
|
+
pattern2 = pattern
|
|
23
|
+
for ext in excluded_file_types:
|
|
24
|
+
pattern2 = (
|
|
25
|
+
pattern2.replace("|" + ext, "")
|
|
26
|
+
.replace(ext + "|", "")
|
|
27
|
+
.replace(ext, "")
|
|
28
|
+
)
|
|
29
|
+
pattern = pattern2
|
|
30
|
+
|
|
31
|
+
return pattern
|
|
32
|
+
|
|
33
|
+
def find_packages(self, pattern, packages, working_dir):
|
|
34
|
+
packages_list = []
|
|
35
|
+
files_list = []
|
|
36
|
+
extension_pattern = re.compile(pattern, re.IGNORECASE)
|
|
37
|
+
for root, dirs, files in os.walk(working_dir):
|
|
38
|
+
components = root.split(os.path.sep)
|
|
39
|
+
flag = 0
|
|
40
|
+
for package in packages:
|
|
41
|
+
if not (package in components):
|
|
42
|
+
flag = 1
|
|
43
|
+
if package in dirs:
|
|
44
|
+
packages_list.append(os.path.join(root, package))
|
|
45
|
+
if flag:
|
|
46
|
+
for file in files:
|
|
47
|
+
if extension_pattern.search(file):
|
|
48
|
+
files_list.append(os.path.join(root, file))
|
|
49
|
+
return packages_list, files_list
|
|
50
|
+
|
|
51
|
+
def compress_and_mv(self, tar_path, package):
|
|
52
|
+
try:
|
|
53
|
+
with tarfile.open(tar_path, "w") as tar:
|
|
54
|
+
tar.add(
|
|
55
|
+
package,
|
|
56
|
+
arcname=os.path.basename(package),
|
|
57
|
+
filter=lambda x: None if "/.bin/" in x.name else x,
|
|
58
|
+
)
|
|
59
|
+
|
|
60
|
+
except subprocess.CalledProcessError as e:
|
|
61
|
+
logger.error(f"Error during {package} compression: {e}")
|
|
62
|
+
|
|
63
|
+
def move_files(self, dir_to_scan_path, finded_files):
|
|
64
|
+
for file in finded_files:
|
|
65
|
+
target = os.path.join(dir_to_scan_path, os.path.basename(file))
|
|
66
|
+
shutil.copy2(file, target)
|
|
67
|
+
logger.debug(f"File to scan: {file}")
|
|
68
|
+
|
|
69
|
+
def find_artifacts(self, to_scan, pattern, packages):
|
|
70
|
+
dir_to_scan_path = os.path.join(to_scan, "dependencies_to_scan")
|
|
71
|
+
if os.path.exists(dir_to_scan_path):
|
|
72
|
+
shutil.rmtree(dir_to_scan_path)
|
|
73
|
+
os.makedirs(dir_to_scan_path)
|
|
74
|
+
|
|
75
|
+
packages_list, files_list = self.find_packages(pattern, packages, to_scan)
|
|
76
|
+
|
|
77
|
+
for package in packages_list:
|
|
78
|
+
tar_path = os.path.join(
|
|
79
|
+
dir_to_scan_path,
|
|
80
|
+
"pkg"
|
|
81
|
+
+ str(packages_list.index(package) + 1)
|
|
82
|
+
+ "_"
|
|
83
|
+
+ os.path.basename(package)
|
|
84
|
+
+ ".tar",
|
|
85
|
+
)
|
|
86
|
+
self.compress_and_mv(tar_path, package)
|
|
87
|
+
|
|
88
|
+
if len(files_list):
|
|
89
|
+
self.move_files(dir_to_scan_path, files_list)
|
|
90
|
+
|
|
91
|
+
files = os.listdir(dir_to_scan_path)
|
|
92
|
+
files = [
|
|
93
|
+
file
|
|
94
|
+
for file in files
|
|
95
|
+
if os.path.isfile(os.path.join(dir_to_scan_path, file))
|
|
96
|
+
]
|
|
97
|
+
file_to_scan = None
|
|
98
|
+
if files:
|
|
99
|
+
file_to_scan = os.path.join(dir_to_scan_path, "file_to_scan.tar")
|
|
100
|
+
self.compress_and_mv(file_to_scan, dir_to_scan_path)
|
|
101
|
+
files_string = ", ".join(files)
|
|
102
|
+
logger.debug(f"Files to scan: {files_string}")
|
|
103
|
+
print(f"Files to scan: {files_string}")
|
|
104
|
+
else:
|
|
105
|
+
logger.warning("No artifacts found")
|
|
106
|
+
|
|
107
|
+
return file_to_scan
|
|
@@ -1 +1 @@
|
|
|
1
|
-
version = '1.11.
|
|
1
|
+
version = '1.11.3'
|
{devsecops_engine_tools-1.11.1.dist-info → devsecops_engine_tools-1.11.3.dist-info}/METADATA
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: devsecops-engine-tools
|
|
3
|
-
Version: 1.11.
|
|
3
|
+
Version: 1.11.3
|
|
4
4
|
Summary: Tool for DevSecOps strategy
|
|
5
5
|
Home-page: https://github.com/bancolombia/devsecops-engine-tools
|
|
6
6
|
Author: Bancolombia DevSecOps Team
|
|
@@ -144,10 +144,14 @@ devsecops-engine-tools --platform_devops ["local","azure","github"] --remote_con
|
|
|
144
144
|
<td>Free</td>
|
|
145
145
|
</tr>
|
|
146
146
|
<tr>
|
|
147
|
-
<td>ENGINE_DEPENDENCIES</td>
|
|
147
|
+
<td rowspan="2">ENGINE_DEPENDENCIES</td>
|
|
148
148
|
<td><a href="https://jfrog.com/help/r/get-started-with-the-jfrog-platform/jfrog-xray">XRAY</a></td>
|
|
149
149
|
<td>Paid</td>
|
|
150
150
|
</tr>
|
|
151
|
+
<tr>
|
|
152
|
+
<td><a href="https://owasp.org/www-project-dependency-check/">DEPENDENCY CHECK</a></td>
|
|
153
|
+
<td>Free</td>
|
|
154
|
+
</tr>
|
|
151
155
|
<tr>
|
|
152
156
|
<td>ENGINE_CODE</td>
|
|
153
157
|
<td><a href="https://docs.bearer.com/quickstart/">BEARER</a></td>
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
devsecops_engine_tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
|
-
devsecops_engine_tools/version.py,sha256=
|
|
2
|
+
devsecops_engine_tools/version.py,sha256=CQyukqEY45E5SVb6nqvuhPs1-ZsVh_xiHbOu1JbPvIs,19
|
|
3
3
|
devsecops_engine_tools/engine_core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
4
4
|
devsecops_engine_tools/engine_core/src/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
5
5
|
devsecops_engine_tools/engine_core/src/applications/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
6
|
-
devsecops_engine_tools/engine_core/src/applications/runner_engine_core.py,sha256=
|
|
6
|
+
devsecops_engine_tools/engine_core/src/applications/runner_engine_core.py,sha256=HIxw71J4LILlgHoDLT_snIVImTUSKSZ7kz4SfUxNDEw,7196
|
|
7
7
|
devsecops_engine_tools/engine_core/src/deployment/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
8
8
|
devsecops_engine_tools/engine_core/src/deployment/infrastructure/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
9
9
|
devsecops_engine_tools/engine_core/src/domain/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -27,17 +27,17 @@ devsecops_engine_tools/engine_core/src/domain/model/gateway/vulnerability_manage
|
|
|
27
27
|
devsecops_engine_tools/engine_core/src/domain/usecases/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
28
28
|
devsecops_engine_tools/engine_core/src/domain/usecases/break_build.py,sha256=JP-i5SFaMN7Yi4uDCe_AE1kJ197g1IJGcwQdq-RYbk4,16198
|
|
29
29
|
devsecops_engine_tools/engine_core/src/domain/usecases/handle_risk.py,sha256=Au_ZXqwDi3CbVpQWAd29oruDAcZ1RX4e7OABSa_aRyA,7093
|
|
30
|
-
devsecops_engine_tools/engine_core/src/domain/usecases/handle_scan.py,sha256=
|
|
30
|
+
devsecops_engine_tools/engine_core/src/domain/usecases/handle_scan.py,sha256=yrPQdNvFNDeS4g4UxdxFDj-yw17K_OZ3T-HDEiePknE,7041
|
|
31
31
|
devsecops_engine_tools/engine_core/src/domain/usecases/metrics_manager.py,sha256=Xi0iNnPrFgqd2cBdAA5E_tgouhxs-BTo016aolnGgv8,2413
|
|
32
32
|
devsecops_engine_tools/engine_core/src/infrastructure/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
33
33
|
devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
34
34
|
devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/aws/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
35
35
|
devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/aws/s3_manager.py,sha256=-9gFDcvOIiXDIv4TUXR9zP83GBgR3v-xgp3QgcoaCo4,1926
|
|
36
|
-
devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/aws/secrets_manager.py,sha256=
|
|
36
|
+
devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/aws/secrets_manager.py,sha256=YcioUKsI_heIIcN8ITSoiebxMhUyo6G3cQ7BLOodV2U,1659
|
|
37
37
|
devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/azure/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
38
38
|
devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/azure/azure_devops.py,sha256=blI4ZrquRE4y6DJ7N2YRx1nL0wrAXvdpx0fLSUf5qwA,4831
|
|
39
39
|
devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/defect_dojo/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
40
|
-
devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/defect_dojo/defect_dojo.py,sha256=
|
|
40
|
+
devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/defect_dojo/defect_dojo.py,sha256=Ci4QY8zzdJR2RgZOCwoL2oPEcZ-NPesTVVQMR6epb2Y,16558
|
|
41
41
|
devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/github/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
42
42
|
devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/github/github_actions.py,sha256=pxlgjhX4-Dssn-XHKK8AdCOj6Ry6VcQtoDf5q8CxTks,3731
|
|
43
43
|
devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/printer_pretty_table/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -126,10 +126,10 @@ devsecops_engine_tools/engine_sast/engine_iac/src/infrastructure/driven_adapters
|
|
|
126
126
|
devsecops_engine_tools/engine_sast/engine_iac/src/infrastructure/driven_adapters/checkov/checkov_tool.py,sha256=B7M8NoGSfrWaQCjQIvc9zZ0GLWNWpK9mGqhsC5gepow,10822
|
|
127
127
|
devsecops_engine_tools/engine_sast/engine_iac/src/infrastructure/driven_adapters/kics/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
128
128
|
devsecops_engine_tools/engine_sast/engine_iac/src/infrastructure/driven_adapters/kics/kics_deserealizator.py,sha256=b1X5GWz2snJtsKZcGEsILNc178hv9p-lg-el0Jc-_Eo,2084
|
|
129
|
-
devsecops_engine_tools/engine_sast/engine_iac/src/infrastructure/driven_adapters/kics/kics_tool.py,sha256=
|
|
129
|
+
devsecops_engine_tools/engine_sast/engine_iac/src/infrastructure/driven_adapters/kics/kics_tool.py,sha256=8lda0A7huVSWgq2zMAN92vQv4ug0HiQMATGdXV5lgyA,5202
|
|
130
130
|
devsecops_engine_tools/engine_sast/engine_iac/src/infrastructure/driven_adapters/kubescape/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
131
|
-
devsecops_engine_tools/engine_sast/engine_iac/src/infrastructure/driven_adapters/kubescape/kubescape_deserealizator.py,sha256=
|
|
132
|
-
devsecops_engine_tools/engine_sast/engine_iac/src/infrastructure/driven_adapters/kubescape/kubescape_tool.py,sha256=
|
|
131
|
+
devsecops_engine_tools/engine_sast/engine_iac/src/infrastructure/driven_adapters/kubescape/kubescape_deserealizator.py,sha256=bGOGmsIpJcQzTMxptJPwZCA9_2Woaua3pXmMs4kTnX8,2893
|
|
132
|
+
devsecops_engine_tools/engine_sast/engine_iac/src/infrastructure/driven_adapters/kubescape/kubescape_tool.py,sha256=N17glvzoUkGQJ_1icqznpORXuKJRKEq8Ye1IleN5o1g,4544
|
|
133
133
|
devsecops_engine_tools/engine_sast/engine_iac/src/infrastructure/entry_points/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
134
134
|
devsecops_engine_tools/engine_sast/engine_iac/src/infrastructure/entry_points/entry_point_tool.py,sha256=60iaHYZZp5uTngD7a8vsQaQYsTfBzP_kp0xflfPNnk4,305
|
|
135
135
|
devsecops_engine_tools/engine_sast/engine_iac/src/infrastructure/helpers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -137,25 +137,25 @@ devsecops_engine_tools/engine_sast/engine_iac/src/infrastructure/helpers/file_ge
|
|
|
137
137
|
devsecops_engine_tools/engine_sast/engine_secret/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
138
138
|
devsecops_engine_tools/engine_sast/engine_secret/src/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
139
139
|
devsecops_engine_tools/engine_sast/engine_secret/src/applications/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
140
|
-
devsecops_engine_tools/engine_sast/engine_secret/src/applications/runner_secret_scan.py,sha256=
|
|
140
|
+
devsecops_engine_tools/engine_sast/engine_secret/src/applications/runner_secret_scan.py,sha256=Th6koLvl0fn5SUAXTZ4cy9PEPKMjYpbB9A2S5rSYWxU,1394
|
|
141
141
|
devsecops_engine_tools/engine_sast/engine_secret/src/deployment/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
142
142
|
devsecops_engine_tools/engine_sast/engine_secret/src/deployment/infrastructure/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
143
143
|
devsecops_engine_tools/engine_sast/engine_secret/src/domain/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
144
|
-
devsecops_engine_tools/engine_sast/engine_secret/src/domain/model/DeserializeConfigTool.py,sha256=
|
|
144
|
+
devsecops_engine_tools/engine_sast/engine_secret/src/domain/model/DeserializeConfigTool.py,sha256=BSRubkd0WGZbhHleFl4PIPLScCTTUI8KnXO6B_xsyeo,828
|
|
145
145
|
devsecops_engine_tools/engine_sast/engine_secret/src/domain/model/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
146
146
|
devsecops_engine_tools/engine_sast/engine_secret/src/domain/model/gateway/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
147
147
|
devsecops_engine_tools/engine_sast/engine_secret/src/domain/model/gateway/gateway_deserealizator.py,sha256=4fYPengHW3K0uVP6wHgOiNu-gRb08m78E7QZayZ2LC4,441
|
|
148
|
-
devsecops_engine_tools/engine_sast/engine_secret/src/domain/model/gateway/tool_gateway.py,sha256=
|
|
148
|
+
devsecops_engine_tools/engine_sast/engine_secret/src/domain/model/gateway/tool_gateway.py,sha256=KncnzIAmjmnt3qNWiRY0bnEvk_L68V16xQIILsWjhUg,778
|
|
149
149
|
devsecops_engine_tools/engine_sast/engine_secret/src/domain/usecases/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
150
|
-
devsecops_engine_tools/engine_sast/engine_secret/src/domain/usecases/secret_scan.py,sha256=
|
|
150
|
+
devsecops_engine_tools/engine_sast/engine_secret/src/domain/usecases/secret_scan.py,sha256=si5QB_2fB3XpigVlEZlSi1OICL0d8KFusYT3CxKFupM,3990
|
|
151
151
|
devsecops_engine_tools/engine_sast/engine_secret/src/domain/usecases/set_input_core.py,sha256=k0LZd9PJpqEDns6DLYRGu9DzpRZeFsxAnowcjP5Rml4,2838
|
|
152
152
|
devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
153
153
|
devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/driven_adapters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
154
154
|
devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/driven_adapters/trufflehog/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
155
155
|
devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/driven_adapters/trufflehog/trufflehog_deserealizator.py,sha256=WpFFswOmP38cLvfZHCrPDiRtdwH86n1CqVNS3K4s6uA,1968
|
|
156
|
-
devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/driven_adapters/trufflehog/trufflehog_run.py,sha256=
|
|
156
|
+
devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/driven_adapters/trufflehog/trufflehog_run.py,sha256=TgOoh-VvBjO6ZfiJxwskSJbXc_aBuQZ6JGOZ81X4DPw,7131
|
|
157
157
|
devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/entry_points/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
158
|
-
devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/entry_points/entry_point_tool.py,sha256=
|
|
158
|
+
devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/entry_points/entry_point_tool.py,sha256=TAEZ2HquyM_0ZWMh5_8-qE0OI5EMG0VfyOlypZswbLI,1019
|
|
159
159
|
devsecops_engine_tools/engine_sca/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
160
160
|
devsecops_engine_tools/engine_sca/engine_container/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
161
161
|
devsecops_engine_tools/engine_sca/engine_container/src/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -189,7 +189,7 @@ devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/helpers/__
|
|
|
189
189
|
devsecops_engine_tools/engine_sca/engine_dependencies/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
190
190
|
devsecops_engine_tools/engine_sca/engine_dependencies/src/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
191
191
|
devsecops_engine_tools/engine_sca/engine_dependencies/src/applications/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
192
|
-
devsecops_engine_tools/engine_sca/engine_dependencies/src/applications/runner_dependencies_scan.py,sha256=
|
|
192
|
+
devsecops_engine_tools/engine_sca/engine_dependencies/src/applications/runner_dependencies_scan.py,sha256=xOdEmGIwBZNbD-C7f1h-tPP1uaVJ59F6z2a-BB9KAgc,1871
|
|
193
193
|
devsecops_engine_tools/engine_sca/engine_dependencies/src/deployment/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
194
194
|
devsecops_engine_tools/engine_sca/engine_dependencies/src/deployment/infrastructure/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
195
195
|
devsecops_engine_tools/engine_sca/engine_dependencies/src/domain/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -203,12 +203,16 @@ devsecops_engine_tools/engine_sca/engine_dependencies/src/domain/usecases/handle
|
|
|
203
203
|
devsecops_engine_tools/engine_sca/engine_dependencies/src/domain/usecases/set_input_core.py,sha256=ZMr9l1h9-JdoT7QlLN8K9VTP2VP0B_5TZGMUQ6KyIYo,2525
|
|
204
204
|
devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
205
205
|
devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/driven_adapters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
206
|
+
devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/driven_adapters/dependency_check/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
207
|
+
devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/driven_adapters/dependency_check/dependency_check_deserialize.py,sha256=kFBTOYSQlXdUL05NyiDHVEpQbWxpwbr3El9Fn8tTpN0,2584
|
|
208
|
+
devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/driven_adapters/dependency_check/dependency_check_tool.py,sha256=auTknpEMwGgmEmg-OmsOZf8-H6W0O56VQD8DZNiT9HM,4600
|
|
206
209
|
devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/driven_adapters/xray_tool/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
207
210
|
devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/driven_adapters/xray_tool/xray_deserialize_output.py,sha256=Vm0pj1i6a34xXouXUU95Y04hzR--9tcMQuycR7IMUnQ,2221
|
|
208
|
-
devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/driven_adapters/xray_tool/xray_manager_scan.py,sha256=
|
|
211
|
+
devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/driven_adapters/xray_tool/xray_manager_scan.py,sha256=F6XmJNowQQCbfe_aRxals7xzw9XK9QRMCWmqYkqXFxQ,7109
|
|
209
212
|
devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/entry_points/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
210
213
|
devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/entry_points/entry_point_tool.py,sha256=qau5EXjyvKuXkcDPxVdc5B4lhwqv6VhcSBsAjFjNlCM,2536
|
|
211
214
|
devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/helpers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
215
|
+
devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/helpers/get_artifacts.py,sha256=EdEVr7hDyl0TSrSOBtfUVwk3ugkGTpBR5rLpIZnkp8I,4016
|
|
212
216
|
devsecops_engine_tools/engine_utilities/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
213
217
|
devsecops_engine_tools/engine_utilities/settings.py,sha256=CPnDndwVeRgQNml3HVzvytVruDd8dTd1ICHbkMDSgTM,2144
|
|
214
218
|
devsecops_engine_tools/engine_utilities/azuredevops/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -281,8 +285,9 @@ devsecops_engine_tools/engine_utilities/utils/logger_info.py,sha256=4Mz8Bwlm9Mku
|
|
|
281
285
|
devsecops_engine_tools/engine_utilities/utils/name_conversion.py,sha256=ADJrRGaxYSDe0ZRh6VHRf53H4sXPcb-vNP_i81PUn3I,307
|
|
282
286
|
devsecops_engine_tools/engine_utilities/utils/printers.py,sha256=amYAr9YQfYgR6jK9a2l26z3oovFPQ3FAKmhq6BKhEBA,623
|
|
283
287
|
devsecops_engine_tools/engine_utilities/utils/session_manager.py,sha256=yNtlT-8Legz1sHbGPH8LNYjL-LgDUE0zXG2rYjiab7U,290
|
|
284
|
-
devsecops_engine_tools
|
|
285
|
-
devsecops_engine_tools-1.11.
|
|
286
|
-
devsecops_engine_tools-1.11.
|
|
287
|
-
devsecops_engine_tools-1.11.
|
|
288
|
-
devsecops_engine_tools-1.11.
|
|
288
|
+
devsecops_engine_tools/engine_utilities/utils/utils.py,sha256=esLnDBxP9MQBvV8noVohTrdWSVuljTKRpZgrn2kaD_c,192
|
|
289
|
+
devsecops_engine_tools-1.11.3.dist-info/METADATA,sha256=VRkwEUbIInau_l_QoB8XRTWq-W7ifGIqV1HByRv6gD8,10854
|
|
290
|
+
devsecops_engine_tools-1.11.3.dist-info/WHEEL,sha256=R0nc6qTxuoLk7ShA2_Y-UWkN8ZdfDBG2B6Eqpz2WXbs,91
|
|
291
|
+
devsecops_engine_tools-1.11.3.dist-info/entry_points.txt,sha256=9IjXF_7Zpgowq_SY6OSmsA9vZze18a8_AeHwkQVrgKk,131
|
|
292
|
+
devsecops_engine_tools-1.11.3.dist-info/top_level.txt,sha256=ge6y0X_xBAU1aG3EMWFtl9djbVyg5BxuSp2r2Lg6EQU,23
|
|
293
|
+
devsecops_engine_tools-1.11.3.dist-info/RECORD,,
|
|
File without changes
|
{devsecops_engine_tools-1.11.1.dist-info → devsecops_engine_tools-1.11.3.dist-info}/entry_points.txt
RENAMED
|
File without changes
|
{devsecops_engine_tools-1.11.1.dist-info → devsecops_engine_tools-1.11.3.dist-info}/top_level.txt
RENAMED
|
File without changes
|