devsecops-engine-tools 1.21.0__py3-none-any.whl → 1.23.1__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.

Files changed (32) hide show
  1. devsecops_engine_tools/engine_core/src/applications/runner_engine_core.py +11 -2
  2. devsecops_engine_tools/engine_core/src/domain/model/gateway/devops_platform_gateway.py +1 -1
  3. devsecops_engine_tools/engine_core/src/domain/usecases/handle_risk.py +3 -3
  4. devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/azure/azure_devops.py +3 -2
  5. devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/github/github_actions.py +5 -8
  6. devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/runtime_local/runtime_local.py +4 -2
  7. devsecops_engine_tools/engine_core/src/infrastructure/entry_points/entry_point_core.py +1 -1
  8. devsecops_engine_tools/engine_risk/src/domain/usecases/get_exclusions.py +2 -2
  9. devsecops_engine_tools/engine_risk/src/infrastructure/entry_points/entry_point_risk.py +2 -2
  10. devsecops_engine_tools/engine_sast/engine_code/src/domain/usecases/code_scan.py +1 -1
  11. devsecops_engine_tools/engine_sast/engine_iac/src/domain/usecases/iac_scan.py +2 -2
  12. devsecops_engine_tools/engine_sast/engine_iac/src/infrastructure/driven_adapters/checkov/checkov_tool.py +5 -70
  13. devsecops_engine_tools/engine_sast/engine_secret/src/domain/model/DeserializeConfigTool.py +2 -0
  14. devsecops_engine_tools/engine_sast/engine_secret/src/domain/usecases/secret_scan.py +1 -1
  15. devsecops_engine_tools/engine_sast/engine_secret/src/domain/usecases/set_input_core.py +1 -1
  16. devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/driven_adapters/trufflehog/trufflehog_run.py +10 -3
  17. devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/entry_points/entry_point_tool.py +1 -1
  18. devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/entry_points/entry_point_tool.py +2 -2
  19. devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/entry_points/entry_point_tool.py +2 -0
  20. devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/helpers/get_artifacts.py +3 -1
  21. devsecops_engine_tools/engine_utilities/azuredevops/infrastructure/azure_devops_api.py +7 -1
  22. devsecops_engine_tools/engine_utilities/github/infrastructure/github_api.py +19 -20
  23. devsecops_engine_tools/engine_utilities/sonarqube/src/applications/runner_report_sonar.py +9 -0
  24. devsecops_engine_tools/engine_utilities/sonarqube/src/domain/usecases/report_sonar.py +4 -2
  25. devsecops_engine_tools/engine_utilities/sonarqube/src/infrastructure/entry_points/entry_point_report_sonar.py +1 -1
  26. devsecops_engine_tools/engine_utilities/utils/utils.py +93 -0
  27. devsecops_engine_tools/version.py +1 -1
  28. {devsecops_engine_tools-1.21.0.dist-info → devsecops_engine_tools-1.23.1.dist-info}/METADATA +2 -2
  29. {devsecops_engine_tools-1.21.0.dist-info → devsecops_engine_tools-1.23.1.dist-info}/RECORD +32 -32
  30. {devsecops_engine_tools-1.21.0.dist-info → devsecops_engine_tools-1.23.1.dist-info}/WHEEL +0 -0
  31. {devsecops_engine_tools-1.21.0.dist-info → devsecops_engine_tools-1.23.1.dist-info}/entry_points.txt +0 -0
  32. {devsecops_engine_tools-1.21.0.dist-info → devsecops_engine_tools-1.23.1.dist-info}/top_level.txt +0 -0
@@ -69,7 +69,15 @@ def get_inputs_from_cli(args):
69
69
  "--remote_config_repo",
70
70
  type=str,
71
71
  required=True,
72
- help="Name or Folder Path of Config Repo",
72
+ help="Name or Folder Path of Remote Config Repo",
73
+ )
74
+ parser.add_argument(
75
+ "-rcb",
76
+ "--remote_config_branch",
77
+ type=str,
78
+ required=False,
79
+ default="",
80
+ help="Name of the branch of Remote Config Repo",
73
81
  )
74
82
  parser.add_argument(
75
83
  "-t",
@@ -144,7 +152,7 @@ def get_inputs_from_cli(args):
144
152
  parser.add_argument(
145
153
  "--token_external_checks",
146
154
  required=False,
147
- help="Token for downloading external checks from engine_iac or engine_secret if is necessary. Ej: github:token, ssh:privatekey:pass",
155
+ help="Token for downloading external checks from engine_iac or engine_secret if is necessary. Ej: github_token:token, github_app:private_key, ssh:privatekey:pass",
148
156
  )
149
157
  parser.add_argument(
150
158
  "--xray_mode",
@@ -162,6 +170,7 @@ def get_inputs_from_cli(args):
162
170
  return {
163
171
  "platform_devops": args.platform_devops,
164
172
  "remote_config_repo": args.remote_config_repo,
173
+ "remote_config_branch": args.remote_config_branch,
165
174
  "tool": args.tool,
166
175
  "folder_path": args.folder_path,
167
176
  "platform": args.platform,
@@ -3,7 +3,7 @@ from abc import ABCMeta, abstractmethod
3
3
 
4
4
  class DevopsPlatformGateway(metaclass=ABCMeta):
5
5
  @abstractmethod
6
- def get_remote_config(self, repository, path):
6
+ def get_remote_config(self, repository, path, branch):
7
7
  "get_remote_config"
8
8
 
9
9
  @abstractmethod
@@ -86,7 +86,7 @@ class HandleRisk:
86
86
 
87
87
  def _exclude_services(self, dict_args, pipeline_name, service_list):
88
88
  risk_exclusions = self.devops_platform_gateway.get_remote_config(
89
- dict_args["remote_config_repo"], "engine_risk/Exclusions.json"
89
+ dict_args["remote_config_repo"], "engine_risk/Exclusions.json", dict_args["remote_config_branch"]
90
90
  )
91
91
  if (
92
92
  pipeline_name in risk_exclusions
@@ -129,10 +129,10 @@ class HandleRisk:
129
129
 
130
130
  def process(self, dict_args: any, remote_config: any):
131
131
  risk_config = self.devops_platform_gateway.get_remote_config(
132
- dict_args["remote_config_repo"], "engine_risk/ConfigTool.json"
132
+ dict_args["remote_config_repo"], "engine_risk/ConfigTool.json", dict_args["remote_config_branch"]
133
133
  )
134
134
  risk_exclusions = self.devops_platform_gateway.get_remote_config(
135
- dict_args["remote_config_repo"], "engine_risk/Exclusions.json"
135
+ dict_args["remote_config_repo"], "engine_risk/Exclusions.json", dict_args["remote_config_branch"]
136
136
  )
137
137
  pipeline_name = self.devops_platform_gateway.get_variable("pipeline_name")
138
138
 
@@ -23,7 +23,8 @@ logger = MyLogger.__call__(**settings.SETTING_LOGGER).get_logger()
23
23
 
24
24
  @dataclass
25
25
  class AzureDevops(DevopsPlatformGateway):
26
- def get_remote_config(self, repository, path):
26
+ def get_remote_config(self, repository, path, branch=""):
27
+
27
28
  base_compact_remote_config_url = (
28
29
  f"https://{SystemVariables.System_TeamFoundationCollectionUri.value().rstrip('/').split('/')[-1].replace('.visualstudio.com','')}"
29
30
  f".visualstudio.com/{SystemVariables.System_TeamProject.value()}/_git/"
@@ -34,7 +35,7 @@ class AzureDevops(DevopsPlatformGateway):
34
35
  compact_remote_config_url=base_compact_remote_config_url,
35
36
  )
36
37
  connection = utils_azure.get_azure_connection()
37
- return utils_azure.get_remote_json_config(connection=connection)
38
+ return utils_azure.get_remote_json_config(connection=connection, branch=branch)
38
39
 
39
40
  def message(self, type, message):
40
41
  if type == "succeeded":
@@ -22,18 +22,15 @@ class GithubActions(DevopsPlatformGateway):
22
22
  ICON_FAIL = "\u2718"
23
23
  ICON_SUCCESS = "\u2714"
24
24
 
25
- def get_remote_config(self, repository, path):
25
+ def get_remote_config(self, repository, path, branch=""):
26
26
 
27
27
  github_repository = SystemVariables.github_repository.value()
28
28
  split = github_repository.split("/")
29
29
  owner = split[0]
30
30
 
31
- utils_github = GithubApi(
32
- personal_access_token=SystemVariables.github_access_token.value()
33
- )
34
-
35
- git_client = utils_github.get_github_connection()
36
- json_config = utils_github.get_remote_json_config(git_client, owner, repository, path)
31
+ utils_github = GithubApi()
32
+ git_client = utils_github.get_github_connection(SystemVariables.github_access_token.value())
33
+ json_config = utils_github.get_remote_json_config(git_client, owner, repository, path, branch)
37
34
 
38
35
  return json_config
39
36
 
@@ -92,4 +89,4 @@ class GithubActions(DevopsPlatformGateway):
92
89
  try:
93
90
  return variable_map.get(variable).value()
94
91
  except ValueError:
95
- return None
92
+ return None
@@ -18,8 +18,10 @@ class RuntimeLocal(DevopsPlatformGateway):
18
18
  ICON_SUCCESS = "\u2714"
19
19
 
20
20
 
21
- def get_remote_config(self, repository, path):
22
- with open(f"{repository}/{path}") as f:
21
+ def get_remote_config(self, repository, path, branch=""):
22
+ remote_config_path = f"{repository}/{path}"
23
+
24
+ with open(remote_config_path) as f:
23
25
  return json.load(f)
24
26
 
25
27
  def message(self, type, message):
@@ -24,7 +24,7 @@ def init_engine_core(
24
24
  args: any
25
25
  ):
26
26
  config_tool = devops_platform_gateway.get_remote_config(
27
- args["remote_config_repo"], "/engine_core/ConfigTool.json"
27
+ args["remote_config_repo"], "/engine_core/ConfigTool.json", args["remote_config_branch"]
28
28
  )
29
29
  Printers.print_logo_tool(config_tool["BANNER"])
30
30
 
@@ -22,7 +22,7 @@ class GetExclusions:
22
22
 
23
23
  def process(self):
24
24
  core_config = self.devops_platform_gateway.get_remote_config(
25
- self.dict_args["remote_config_repo"], "engine_core/ConfigTool.json"
25
+ self.dict_args["remote_config_repo"], "engine_core/ConfigTool.json", self.dict_args["remote_config_branch"]
26
26
  )
27
27
  unique_tags = self._get_unique_tags()
28
28
  exclusions = []
@@ -42,7 +42,7 @@ class GetExclusions:
42
42
 
43
43
  def _get_exclusions_by_practice(self, core_config, practice, path):
44
44
  exclusions_config = self.devops_platform_gateway.get_remote_config(
45
- self.dict_args["remote_config_repo"], path
45
+ self.dict_args["remote_config_repo"], path, self.dict_args["remote_config_branch"]
46
46
  )
47
47
  tool = core_config[practice.upper()]["TOOL"]
48
48
  return self._get_exclusions(exclusions_config, tool)
@@ -31,10 +31,10 @@ def init_engine_risk(
31
31
  vm_exclusions,
32
32
  ):
33
33
  remote_config = devops_platform_gateway.get_remote_config(
34
- dict_args["remote_config_repo"], "engine_risk/ConfigTool.json"
34
+ dict_args["remote_config_repo"], "engine_risk/ConfigTool.json", dict_args["remote_config_branch"]
35
35
  )
36
36
  risk_exclusions = devops_platform_gateway.get_remote_config(
37
- dict_args["remote_config_repo"], "engine_risk/Exclusions.json"
37
+ dict_args["remote_config_repo"], "engine_risk/Exclusions.json", dict_args["remote_config_branch"]
38
38
  )
39
39
  pipeline_name = devops_platform_gateway.get_variable("pipeline_name")
40
40
 
@@ -33,7 +33,7 @@ class CodeScan:
33
33
 
34
34
  def set_config_tool(self, dict_args):
35
35
  init_config_tool = self.devops_platform_gateway.get_remote_config(
36
- dict_args["remote_config_repo"], "engine_sast/engine_code/ConfigTool.json"
36
+ dict_args["remote_config_repo"], "engine_sast/engine_code/ConfigTool.json", dict_args["remote_config_branch"]
37
37
  )
38
38
  scope_pipeline = self.devops_platform_gateway.get_variable("pipeline_name")
39
39
  return ConfigTool(json_data=init_config_tool, scope=scope_pipeline)
@@ -28,11 +28,11 @@ class IacScan:
28
28
 
29
29
  def process(self, dict_args, secret_tool, tool, env):
30
30
  config_tool_iac = self.devops_platform_gateway.get_remote_config(
31
- dict_args["remote_config_repo"], "engine_sast/engine_iac/ConfigTool.json"
31
+ dict_args["remote_config_repo"], "engine_sast/engine_iac/ConfigTool.json", dict_args["remote_config_branch"]
32
32
  )
33
33
 
34
34
  exclusions = self.devops_platform_gateway.get_remote_config(
35
- dict_args["remote_config_repo"], "engine_sast/engine_iac/Exclusions.json"
35
+ dict_args["remote_config_repo"], "engine_sast/engine_iac/Exclusions.json", dict_args["remote_config_branch"]
36
36
  )
37
37
 
38
38
  config_tool_core, folders_to_scan, skip_tool = self.complete_config_tool(
@@ -19,22 +19,15 @@ from devsecops_engine_tools.engine_sast.engine_iac.src.infrastructure.driven_ada
19
19
  from devsecops_engine_tools.engine_sast.engine_iac.src.infrastructure.helpers.file_generator_tool import (
20
20
  generate_file_from_tool,
21
21
  )
22
- from devsecops_engine_tools.engine_utilities.github.infrastructure.github_api import (
23
- GithubApi,
24
- )
25
- from devsecops_engine_tools.engine_utilities.ssh.managment_private_key import (
26
- create_ssh_private_file,
27
- add_ssh_private_key,
28
- decode_base64,
29
- config_knowns_hosts,
30
- )
31
22
  from devsecops_engine_tools.engine_utilities.utils.logger_info import MyLogger
32
23
  from devsecops_engine_tools.engine_utilities import settings
24
+ from devsecops_engine_tools.engine_utilities.utils.utils import Utils
33
25
 
34
26
  logger = MyLogger.__call__(**settings.SETTING_LOGGER).get_logger()
35
27
 
36
28
 
37
29
  class CheckovTool(ToolGateway):
30
+
38
31
  CHECKOV_CONFIG_FILE = "checkov_config.yaml"
39
32
  TOOL_CHECKOV = "CHECKOV"
40
33
  framework_mapping = {
@@ -62,43 +55,6 @@ class CheckovTool(ToolGateway):
62
55
  yaml.dump(checkov_config.dict_confg_file, file)
63
56
  file.close()
64
57
 
65
- def configurate_external_checks(self, config_tool, secret):
66
- agent_env = None
67
- try:
68
- if secret is None:
69
- logger.warning("The secret is not configured for external controls")
70
-
71
- # Create configuration git external checks
72
- elif config_tool[self.TOOL_CHECKOV][
73
- "USE_EXTERNAL_CHECKS_GIT"
74
- ] == "True" and platform.system() in (
75
- "Linux",
76
- "Darwin",
77
- ):
78
- config_knowns_hosts(
79
- config_tool[self.TOOL_CHECKOV]["EXTERNAL_GIT_SSH_HOST"],
80
- config_tool[self.TOOL_CHECKOV][
81
- "EXTERNAL_GIT_PUBLIC_KEY_FINGERPRINT"
82
- ],
83
- )
84
- ssh_key_content = decode_base64(secret["repository_ssh_private_key"])
85
- ssh_key_file_path = "/tmp/ssh_key_file"
86
- create_ssh_private_file(ssh_key_file_path, ssh_key_content)
87
- ssh_key_password = decode_base64(secret["repository_ssh_password"])
88
- agent_env = add_ssh_private_key(ssh_key_file_path, ssh_key_password)
89
-
90
- # Create configuration dir external checks
91
- elif config_tool[self.TOOL_CHECKOV]["USE_EXTERNAL_CHECKS_DIR"] == "True":
92
- github_api = GithubApi(secret["github_token"])
93
- github_api.download_latest_release_assets(
94
- config_tool[self.TOOL_CHECKOV]["EXTERNAL_DIR_OWNER"],
95
- config_tool[self.TOOL_CHECKOV]["EXTERNAL_DIR_REPOSITORY"],
96
- "/tmp",
97
- )
98
-
99
- except Exception as ex:
100
- logger.error(f"An error ocurred configuring external checks {ex}")
101
- return agent_env
102
58
 
103
59
  def retryable_install_package(self, package: str, version: str) -> bool:
104
60
  MAX_RETRIES = 3
@@ -258,29 +214,8 @@ class CheckovTool(ToolGateway):
258
214
  secret_tool,
259
215
  secret_external_checks,
260
216
  ):
261
- secret = None
262
- if secret_tool is not None:
263
- secret = secret_tool
264
- elif secret_external_checks is not None:
265
- secret = {
266
- "github_token": (
267
- secret_external_checks.split("github:")[1]
268
- if "github" in secret_external_checks
269
- else None
270
- ),
271
- "repository_ssh_private_key": (
272
- secret_external_checks.split("ssh:")[1].split(":")[0]
273
- if "ssh" in secret_external_checks
274
- else None
275
- ),
276
- "repository_ssh_password": (
277
- secret_external_checks.split("ssh:")[1].split(":")[1]
278
- if "ssh" in secret_external_checks
279
- else None
280
- ),
281
- }
282
-
283
- agent_env = self.configurate_external_checks(config_tool, secret)
217
+ util = Utils()
218
+ agent_env = util.configurate_external_checks(self.TOOL_CHECKOV,config_tool, secret_tool,secret_external_checks)
284
219
 
285
220
  checkov_install = self.retryable_install_package(
286
221
  "checkov", config_tool[self.TOOL_CHECKOV]["VERSION"]
@@ -310,4 +245,4 @@ class CheckovTool(ToolGateway):
310
245
  ),
311
246
  )
312
247
  else:
313
- return [], None
248
+ return [], None
@@ -12,5 +12,7 @@ class DeserializeConfigTool:
12
12
  self.enable_custom_rules = json_data[tool]["ENABLE_CUSTOM_RULES"]
13
13
  self.external_dir_owner = json_data[tool]["EXTERNAL_DIR_OWNER"]
14
14
  self.external_dir_repo = json_data[tool]["EXTERNAL_DIR_REPOSITORY"]
15
+ self.app_id_github = json_data[tool]["APP_ID_GITHUB"]
16
+ self.installation_id_github = json_data[tool]["INSTALLATION_ID_GITHUB"]
15
17
  self.tool_version = json_data[tool]["VERSION"]
16
18
  self.extradata_rules = json_data[tool]["RULES"]
@@ -67,7 +67,7 @@ class SecretScan:
67
67
  def complete_config_tool(self, dict_args, tool):
68
68
  tool = str(tool).lower()
69
69
  init_config_tool = self.devops_platform_gateway.get_remote_config(
70
- dict_args["remote_config_repo"], "engine_sast/engine_secret/ConfigTool.json"
70
+ dict_args["remote_config_repo"], "engine_sast/engine_secret/ConfigTool.json", dict_args["remote_config_branch"]
71
71
  )
72
72
  config_tool = DeserializeConfigTool(json_data=init_config_tool, tool=tool)
73
73
  config_tool.scope_pipeline = self.devops_platform_gateway.get_variable("pipeline_name")
@@ -30,7 +30,7 @@ class SetInputCore:
30
30
  dict: Remote configuration.
31
31
  """
32
32
  return self.tool_remote.get_remote_config(
33
- self.dict_args["remote_config_repo"], file_path
33
+ self.dict_args["remote_config_repo"], file_path, self.dict_args["remote_config_branch"]
34
34
  )
35
35
 
36
36
  def get_variable(self, variable):
@@ -73,9 +73,15 @@ class TrufflehogRun(ToolGateway):
73
73
  include_paths = self.config_include_path(files_commits, agent_work_folder, agent_os)
74
74
  enable_custom_rules = config_tool.enable_custom_rules.lower()
75
75
  secret = None
76
-
76
+ github_api = GithubApi()
77
+
77
78
  if secret_tool is not None:
78
- secret = secret_tool["github_token"] if "github_token" in secret_tool else None
79
+ secret_tmp = secret_tool
80
+ secret = github_api.get_installation_access_token(
81
+ secret_tmp["github_token"],
82
+ config_tool.app_id_github,
83
+ config_tool.installation_id_github
84
+ )
79
85
  elif secret_external_checks is not None:
80
86
  secret = secret_external_checks.split("github:")[1] if "github" in secret_external_checks else None
81
87
 
@@ -161,10 +167,11 @@ class TrufflehogRun(ToolGateway):
161
167
 
162
168
  def configurate_external_checks(self, config_tool, secret):
163
169
  try:
164
- github_api = GithubApi(secret)
170
+ github_api = GithubApi()
165
171
  github_api.download_latest_release_assets(
166
172
  config_tool.external_dir_owner,
167
173
  config_tool.external_dir_repo,
174
+ secret,
168
175
  "/tmp",
169
176
  )
170
177
  except Exception as ex:
@@ -6,7 +6,7 @@ from devsecops_engine_tools.engine_sast.engine_secret.src.domain.usecases.set_in
6
6
 
7
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
- dict_args["remote_config_repo"], "engine_sast/engine_secret/Exclusions.json"
9
+ dict_args["remote_config_repo"], "engine_sast/engine_secret/Exclusions.json", dict_args["remote_config_branch"]
10
10
  )
11
11
  secret_scan = SecretScan(tool_gateway, devops_platform_gateway, tool_deserealizator, git_gateway)
12
12
  config_tool, skip_tool_isp = secret_scan.complete_config_tool(dict_args, tool)
@@ -23,10 +23,10 @@ def init_engine_sca_rm(
23
23
  tool,
24
24
  ):
25
25
  remote_config = tool_remote.get_remote_config(
26
- dict_args["remote_config_repo"], "engine_sca/engine_container/ConfigTool.json"
26
+ dict_args["remote_config_repo"], "engine_sca/engine_container/ConfigTool.json", dict_args["remote_config_branch"]
27
27
  )
28
28
  exclusions = tool_remote.get_remote_config(
29
- dict_args["remote_config_repo"], "engine_sca/engine_container/Exclusions.json"
29
+ dict_args["remote_config_repo"], "engine_sca/engine_container/Exclusions.json", dict_args["remote_config_branch"]
30
30
  )
31
31
  pipeline_name = tool_remote.get_variable("pipeline_name")
32
32
  handle_remote_config_patterns = HandleRemoteConfigPatterns(
@@ -23,10 +23,12 @@ def init_engine_dependencies(
23
23
  remote_config = tool_remote.get_remote_config(
24
24
  dict_args["remote_config_repo"],
25
25
  "engine_sca/engine_dependencies/ConfigTool.json",
26
+ dict_args["remote_config_branch"]
26
27
  )
27
28
  exclusions = tool_remote.get_remote_config(
28
29
  dict_args["remote_config_repo"],
29
30
  "engine_sca/engine_dependencies/Exclusions.json",
31
+ dict_args["remote_config_branch"]
30
32
  )
31
33
  pipeline_name = tool_remote.get_variable("pipeline_name")
32
34
 
@@ -14,7 +14,9 @@ class GetArtifacts:
14
14
 
15
15
  def excluded_files(self, remote_config, pipeline_name, exclusions, tool):
16
16
  pattern = remote_config[tool]["REGEX_EXPRESSION_EXTENSIONS"]
17
- if pipeline_name in exclusions:
17
+ if (pipeline_name in exclusions) and (
18
+ exclusions[pipeline_name].get(tool, None)
19
+ ):
18
20
  for ex in exclusions[pipeline_name][tool]:
19
21
  if ex.get("SKIP_FILES", 0):
20
22
  exclusion = ex.get("SKIP_FILES")
@@ -2,6 +2,7 @@ import json
2
2
  from devsecops_engine_tools.engine_utilities.utils.api_error import ApiError
3
3
  from urllib.parse import urlsplit, unquote
4
4
  from azure.devops.connection import Connection
5
+ from azure.devops.v7_1.wiki.models import GitVersionDescriptor
5
6
  from msrest.authentication import BasicAuthentication
6
7
  from devsecops_engine_tools.engine_utilities.utils.logger_info import MyLogger
7
8
  from devsecops_engine_tools.engine_utilities.settings import SETTING_LOGGER
@@ -48,14 +49,19 @@ class AzureDevopsApi:
48
49
  except Exception as e:
49
50
  raise ApiError("Error getting Azure DevOps connection: " + str(e))
50
51
 
51
- def get_remote_json_config(self, connection: Connection):
52
+ def get_remote_json_config(self, connection: Connection, branch):
52
53
  try:
53
54
  git_client = connection.clients.get_git_client()
55
+ version_descriptor = None
56
+ if branch: version_descriptor = GitVersionDescriptor(version=branch, version_type="branch")
57
+
54
58
  file_content = git_client.get_item_text(
55
59
  repository_id=self.__repository_id,
56
60
  path=self.__remote_config_path,
57
61
  project=self.__project_remote_config,
62
+ version_descriptor=version_descriptor
58
63
  )
64
+
59
65
  data = json.loads(b"".join(file_content).decode("utf-8"))
60
66
  return data
61
67
  except Exception as e:
@@ -1,28 +1,28 @@
1
1
  import requests
2
2
  import zipfile
3
3
  import json
4
- from github import Github
4
+ from github import Github, GithubIntegration
5
5
  from devsecops_engine_tools.engine_utilities.utils.api_error import ApiError
6
6
 
7
7
 
8
8
  class GithubApi:
9
- def __init__(
10
- self,
11
- personal_access_token: str = ""
12
- ):
13
- self.__personal_access_token = personal_access_token
14
9
 
15
10
  def unzip_file(self, zip_file_path, extract_path):
16
11
  with zipfile.ZipFile(zip_file_path, "r") as zip_ref:
17
12
  zip_ref.extractall(extract_path)
13
+
14
+ def get_installation_access_token(self,private_key,app_id,instalation_id):
15
+ if private_key:
16
+ private_key = private_key.replace("\\n", "\n")
17
+ integration = GithubIntegration(app_id, private_key)
18
+ access_token = integration.get_access_token(instalation_id)
19
+ return access_token.token
18
20
 
19
21
  def download_latest_release_assets(
20
- self, owner, repository, download_path="."
21
- ):
22
+ self, owner, repository, token, download_path=".",
23
+ ):
22
24
  url = f"https://api.github.com/repos/{owner}/{repository}/releases/latest"
23
-
24
- headers = {"Authorization": f"token {self.__personal_access_token}"}
25
-
25
+ headers = {"Authorization": f"token {token}", "Accept": "application/vnd.github+json"}
26
26
  response = requests.get(url, headers=headers)
27
27
 
28
28
  if response.status_code == 200:
@@ -32,11 +32,8 @@ class GithubApi:
32
32
  for asset in assets:
33
33
  asset_url = asset["url"]
34
34
  asset_name = asset["name"]
35
-
36
35
  headers.update({"Accept": "application/octet-stream"})
37
-
38
36
  response = requests.get(asset_url, headers=headers, stream=True)
39
-
40
37
  if response.status_code == 200:
41
38
  with open(f"{download_path}/{asset_name}", "wb") as file:
42
39
  for chunk in response.iter_content(chunk_size=8192):
@@ -51,18 +48,20 @@ class GithubApi:
51
48
  f"Error getting the assets of the last release. Status code: {response.status_code}"
52
49
  )
53
50
 
54
- def get_github_connection(self):
55
- git_client = Github(self.__personal_access_token)
56
-
51
+ def get_github_connection(self,personal_access_token):
52
+ git_client = Github(personal_access_token)
57
53
  return git_client
58
54
 
59
- def get_remote_json_config(self, git_client: Github, owner, repository, path):
55
+ def get_remote_json_config(self, git_client: Github, owner, repository, path, branch=""):
60
56
  try:
61
57
  repo = git_client.get_repo(f"{owner}/{repository}")
62
- file_content = repo.get_contents(path)
58
+
59
+ if branch: file_content = repo.get_contents(path, ref=branch)
60
+ else: file_content = repo.get_contents(path)
61
+
63
62
  data = file_content.decoded_content.decode()
64
63
  content_json = json.loads(data)
65
64
 
66
65
  return content_json
67
66
  except Exception as e:
68
- raise ApiError("Error getting remote github configuration file: " + str(e))
67
+ raise ApiError("Error getting remote github configuration file: " + str(e))
@@ -32,6 +32,14 @@ def get_inputs_from_cli(args):
32
32
  required=True,
33
33
  help="Name of Config Repo",
34
34
  )
35
+ parser.add_argument(
36
+ "-rcb",
37
+ "--remote_config_branch",
38
+ type=str,
39
+ required=False,
40
+ default="",
41
+ help="Name of the branch of Config Repo",
42
+ )
35
43
  parser.add_argument(
36
44
  "--use_secrets_manager",
37
45
  choices=["true", "false"],
@@ -70,6 +78,7 @@ def get_inputs_from_cli(args):
70
78
  args = parser.parse_args()
71
79
  return {
72
80
  "remote_config_repo": args.remote_config_repo,
81
+ "remote_config_branch": args.remote_config_branch,
73
82
  "use_secrets_manager": args.use_secrets_manager,
74
83
  "send_metrics": args.send_metrics,
75
84
  "sonar_url": args.sonar_url,
@@ -60,7 +60,8 @@ class ReportSonar:
60
60
  )
61
61
  config_tool = self.devops_platform_gateway.get_remote_config(
62
62
  args["remote_config_repo"],
63
- "/engine_core/ConfigTool.json"
63
+ "/engine_core/ConfigTool.json",
64
+ args["remote_config_branch"]
64
65
  )
65
66
  environment = define_env(None, branch)
66
67
 
@@ -73,7 +74,8 @@ class ReportSonar:
73
74
 
74
75
  report_config_tool = self.devops_platform_gateway.get_remote_config(
75
76
  args["remote_config_repo"],
76
- "/report_sonar/ConfigTool.json"
77
+ "/report_sonar/ConfigTool.json",
78
+ args["remote_config_branch"]
77
79
  )
78
80
 
79
81
  get_components = report_config_tool["PIPELINE_COMPONENTS"].get(pipeline_name)
@@ -15,7 +15,7 @@ logger = MyLogger.__call__(**settings.SETTING_LOGGER).get_logger()
15
15
 
16
16
  def init_report_sonar(vulnerability_management_gateway, secrets_manager_gateway, devops_platform_gateway, sonar_gateway, metrics_manager_gateway, args):
17
17
  config_tool = devops_platform_gateway.get_remote_config(
18
- args["remote_config_repo"], "/engine_core/ConfigTool.json"
18
+ args["remote_config_repo"], "/engine_core/ConfigTool.json", args["remote_config_branch"]
19
19
  )
20
20
  report_config_tool = devops_platform_gateway.get_remote_config(
21
21
  args["remote_config_repo"], "/report_sonar/ConfigTool.json"
@@ -1,4 +1,17 @@
1
1
  import zipfile
2
+ import platform
3
+ from devsecops_engine_tools.engine_utilities.github.infrastructure.github_api import (
4
+ GithubApi,
5
+ )
6
+ from devsecops_engine_tools.engine_utilities.ssh.managment_private_key import (
7
+ create_ssh_private_file,
8
+ add_ssh_private_key,
9
+ decode_base64,
10
+ config_knowns_hosts,
11
+ )
12
+ from devsecops_engine_tools.engine_utilities.utils.logger_info import MyLogger
13
+ from devsecops_engine_tools.engine_utilities import settings
14
+ logger = MyLogger.__call__(**settings.SETTING_LOGGER).get_logger()
2
15
  import base64
3
16
  import re
4
17
 
@@ -17,6 +30,86 @@ class Utils:
17
30
  with zipfile.ZipFile(zip_file_path, "r") as zip_ref:
18
31
  zip_ref.extractall(extract_path)
19
32
 
33
+ def configurate_external_checks(self, tool, config_tool, secret_tool, secret_external_checks):
34
+ try:
35
+ agent_env = None
36
+ secret = None
37
+ github_token = None
38
+ github_api = GithubApi()
39
+
40
+ if secret_tool is not None:
41
+ secret = secret_tool
42
+ github_token = github_api.get_installation_access_token(
43
+ secret["github_token"],
44
+ config_tool[tool]["APP_ID_GITHUB"],
45
+ config_tool[tool]["INSTALLATION_ID_GITHUB"]
46
+ )
47
+
48
+ elif secret_external_checks is not None:
49
+ secret_external_checks_parts = {
50
+ "github_token": (
51
+ secret_external_checks.split("github_token:")[1]
52
+ if "github_token" in secret_external_checks
53
+ else None
54
+ ),
55
+ "github_apps": (
56
+ secret_external_checks.split("github_apps:")[1]
57
+ if "github_apps" in secret_external_checks
58
+ else None
59
+ ),
60
+ "repository_ssh_private_key": (
61
+ secret_external_checks.split("ssh:")[1].split(":")[0]
62
+ if "ssh" in secret_external_checks
63
+ else None
64
+ ),
65
+ "repository_ssh_password": (
66
+ secret_external_checks.split("ssh:")[1].split(":")[1]
67
+ if "ssh" in secret_external_checks
68
+ else None
69
+ ),
70
+ }
71
+
72
+ secret = {
73
+ key: secret_external_checks_parts[key]
74
+ for key in secret_external_checks_parts
75
+ if secret_external_checks_parts[key] is not None
76
+ }
77
+
78
+ if secret is None:
79
+ logger.warning("The secret is not configured for external controls")
80
+
81
+
82
+ elif config_tool[tool]["USE_EXTERNAL_CHECKS_GIT"] == "True" and platform.system() in (
83
+ "Linux", "Darwin",
84
+ ):
85
+ config_knowns_hosts(
86
+ config_tool[tool]["EXTERNAL_GIT_SSH_HOST"],
87
+ config_tool[tool]["EXTERNAL_GIT_PUBLIC_KEY_FINGERPRINT"],
88
+ )
89
+ ssh_key_content = decode_base64(secret["repository_ssh_private_key"])
90
+ ssh_key_file_path = "/tmp/ssh_key_file"
91
+ create_ssh_private_file(ssh_key_file_path, ssh_key_content)
92
+ ssh_key_password = decode_base64(secret["repository_ssh_password"])
93
+ agent_env = add_ssh_private_key(ssh_key_file_path, ssh_key_password)
94
+
95
+ elif config_tool[tool]["USE_EXTERNAL_CHECKS_DIR"] == "True":
96
+ if not github_token:
97
+ github_token = github_api.get_installation_access_token(
98
+ secret.get("github_apps"),
99
+ config_tool[tool]["APP_ID_GITHUB"],
100
+ config_tool[tool]["INSTALLATION_ID_GITHUB"]
101
+ ) if secret.get("github_apps") else secret.get("github_token")
102
+ github_api.download_latest_release_assets(
103
+ config_tool[tool]["EXTERNAL_DIR_OWNER"],
104
+ config_tool[tool]["EXTERNAL_DIR_REPOSITORY"],
105
+ github_token,
106
+ "/tmp",
107
+ )
108
+
109
+ except Exception as ex:
110
+ logger.error(f"An error occurred configuring external checks: {ex}")
111
+ return agent_env
112
+
20
113
  def encode_token_to_base64(self, token):
21
114
  token_bytes = f"{token}:".encode("utf-8")
22
115
  base64_token = base64.b64encode(token_bytes).decode("utf-8")
@@ -1 +1 @@
1
- version = '1.21.0'
1
+ version = '1.23.1'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: devsecops-engine-tools
3
- Version: 1.21.0
3
+ Version: 1.23.1
4
4
  Summary: Tool for DevSecOps strategy
5
5
  Home-page: https://github.com/bancolombia/devsecops-engine-tools
6
6
  Author: Bancolombia DevSecOps Team
@@ -68,7 +68,7 @@ pip3 install devsecops-engine-tools
68
68
  ### Scan running - flags (CLI)
69
69
 
70
70
  ```bash
71
- devsecops-engine-tools --platform_devops ["local","azure","github"] --remote_config_repo ["remote_config_repo"] --tool ["engine_iac", "engine_dast", "engine_secret", "engine_dependencies", "engine_container", "engine_risk", "engine_code"] --folder_path ["Folder path scan engine_iac, engine_code and engine_dependencies"] --platform ["k8s","cloudformation","docker", "openapi", "terraform"] --use_secrets_manager ["false", "true"] --use_vulnerability_management ["false", "true"] --send_metrics ["false", "true"] --token_cmdb ["token_cmdb"] --token_vulnerability_management ["token_vulnerability_management"] --token_engine_container ["token_engine_container"] --token_engine_dependencies ["token_engine_dependencies"] --token_external_checks ["token_external_checks"] --xray_mode ["scan", "audit"] --image_to_scan ["image_to_scan"]
71
+ devsecops-engine-tools --platform_devops ["local","azure","github"] --remote_config_repo ["remote_config_repo"] --remote_config_branch ["remote_config_branch"] --tool ["engine_iac", "engine_dast", "engine_secret", "engine_dependencies", "engine_container", "engine_risk", "engine_code"] --folder_path ["Folder path scan engine_iac, engine_code and engine_dependencies"] --platform ["k8s","cloudformation","docker", "openapi", "terraform"] --use_secrets_manager ["false", "true"] --use_vulnerability_management ["false", "true"] --send_metrics ["false", "true"] --token_cmdb ["token_cmdb"] --token_vulnerability_management ["token_vulnerability_management"] --token_engine_container ["token_engine_container"] --token_engine_dependencies ["token_engine_dependencies"] --token_external_checks ["token_external_checks"] --xray_mode ["scan", "audit"] --image_to_scan ["image_to_scan"]
72
72
  ```
73
73
 
74
74
  ### Structure Remote Config
@@ -1,9 +1,9 @@
1
1
  devsecops_engine_tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- devsecops_engine_tools/version.py,sha256=dyB7JXNA2swT02HRC3POdWF2g3dW6aftlCg32kNc1Fw,19
2
+ devsecops_engine_tools/version.py,sha256=7PWUJSK_tsKio96W5PY9rheUlXiK_mAhG0EYIlnkqvM,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=3IvzG7IfQFs8gxsv4Xo5722hV3jG6g0g4JWFq74i2iM,7209
6
+ devsecops_engine_tools/engine_core/src/applications/runner_engine_core.py,sha256=XrjxclBn2pje8UaTfxk5CBL0zORi3i3Ic7suxzbeeiw,7505
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
@@ -18,14 +18,14 @@ devsecops_engine_tools/engine_core/src/domain/model/report.py,sha256=09QV_jBQbuc
18
18
  devsecops_engine_tools/engine_core/src/domain/model/threshold.py,sha256=TCBECuvoC3-9g8vg3iKWGIixssNecP0iUaZ9Qzv0n7w,596
19
19
  devsecops_engine_tools/engine_core/src/domain/model/vulnerability_management.py,sha256=5RcMHpeqznrTOpkjLuqekA_Bqf2Qr-w6OZ5Eoi3b-bs,465
20
20
  devsecops_engine_tools/engine_core/src/domain/model/gateway/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
21
- devsecops_engine_tools/engine_core/src/domain/model/gateway/devops_platform_gateway.py,sha256=ufAe6jd91IX-vKsFtlad2K-WliyY7TiN8wPTNmeHZD0,676
21
+ devsecops_engine_tools/engine_core/src/domain/model/gateway/devops_platform_gateway.py,sha256=7u7Qq2fq_QW7PJmGnSKZZyVSjTwnj3Oj-HBpj6nI8jk,684
22
22
  devsecops_engine_tools/engine_core/src/domain/model/gateway/metrics_manager_gateway.py,sha256=u_ivbmCyymw0Je7gRFg0uD9iDmZfTbteH5UwcgP0JAs,191
23
23
  devsecops_engine_tools/engine_core/src/domain/model/gateway/printer_table_gateway.py,sha256=ROBsh7Lyu62a5RqZ4KgGQcwrBzbHRwxAJ9Rj3LoupQc,602
24
24
  devsecops_engine_tools/engine_core/src/domain/model/gateway/secrets_manager_gateway.py,sha256=CTwUIvUWF0NSSzdCqASUFst6KUysW53NV9eatjLGdl8,170
25
25
  devsecops_engine_tools/engine_core/src/domain/model/gateway/vulnerability_management_gateway.py,sha256=dT2YDlWJ4Zvny_5uCTtxBojw4i77UOgGbs8p2jlRo74,1137
26
26
  devsecops_engine_tools/engine_core/src/domain/usecases/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
27
27
  devsecops_engine_tools/engine_core/src/domain/usecases/break_build.py,sha256=0JK4U5LGxzrLVZOw68j1PMxmLTDPru7Kts_-RtAG0jA,15965
28
- devsecops_engine_tools/engine_core/src/domain/usecases/handle_risk.py,sha256=UBOBhlIhHbJAalgRPcfdbVZuX3wbhQlHcUYJ6gQimKc,9256
28
+ devsecops_engine_tools/engine_core/src/domain/usecases/handle_risk.py,sha256=YvbW-YC4w83Yfjon5JXbEdpK0YG3oYuWgUgs5Su8dqo,9361
29
29
  devsecops_engine_tools/engine_core/src/domain/usecases/handle_scan.py,sha256=Li0NDwHwj_g2iM4tKF3wyKqXWYXspTThzKxkSma3S6E,8912
30
30
  devsecops_engine_tools/engine_core/src/domain/usecases/metrics_manager.py,sha256=Xi0iNnPrFgqd2cBdAA5E_tgouhxs-BTo016aolnGgv8,2413
31
31
  devsecops_engine_tools/engine_core/src/infrastructure/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -34,19 +34,19 @@ devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/aws/__init
34
34
  devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/aws/s3_manager.py,sha256=4h1k5EQnL_3NoGI6oRyVibkN5u3s4j5VUthNU1m1zQc,2206
35
35
  devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/aws/secrets_manager.py,sha256=ELihQBgSPH4f9QCyg2dgjudsFitaqgdsljnVOmaA_v4,1972
36
36
  devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/azure/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
37
- devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/azure/azure_devops.py,sha256=blI4ZrquRE4y6DJ7N2YRx1nL0wrAXvdpx0fLSUf5qwA,4831
37
+ devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/azure/azure_devops.py,sha256=OjEMwJoWtx6BSxQSP2QKHKUfGUMhSI_d1-OP-SYka6o,4858
38
38
  devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/defect_dojo/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
39
39
  devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/defect_dojo/defect_dojo.py,sha256=aXWW0np_1GmbezPXbZKEJ8HGKdjCouM84GEexa5bKk8,20772
40
40
  devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/github/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
41
- devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/github/github_actions.py,sha256=pxlgjhX4-Dssn-XHKK8AdCOj6Ry6VcQtoDf5q8CxTks,3731
41
+ devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/github/github_actions.py,sha256=Q1WYrnOI5dQSeeAzj7MVQr0ZxjDGCFM0b2DemvUSW8E,3704
42
42
  devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/printer_pretty_table/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
43
43
  devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/printer_pretty_table/printer_pretty_table.py,sha256=NkXu7JYoCHXIx0HzHl4DhdLGEpocPMIqs2L0ADS-RcI,5369
44
44
  devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/printer_rich_table/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
45
45
  devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/printer_rich_table/printer_rich_table.py,sha256=LPr3xSv0I7ENEdu1xj8ve5PXzpUohs7hbQvHjDSaUuE,3028
46
46
  devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/runtime_local/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
47
- devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/runtime_local/runtime_local.py,sha256=qKINENZGbfV8XFF7fzUK6grQ5Jx7Nwv9xOqjjKlXp3o,2475
47
+ devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/runtime_local/runtime_local.py,sha256=mM1CpoNHfGYAAcXHZrvSS1OXoseNqDPowWcR0cL_UE4,2535
48
48
  devsecops_engine_tools/engine_core/src/infrastructure/entry_points/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
49
- devsecops_engine_tools/engine_core/src/infrastructure/entry_points/entry_point_core.py,sha256=k6WLcv2NQj-OzV8lqmXef-Nyi9MLTzKWSWSM3qPFjvc,2081
49
+ devsecops_engine_tools/engine_core/src/infrastructure/entry_points/entry_point_core.py,sha256=nwVZkYEfw5Fxw6gMoJOU0MXVISjwKaJeETsJiW6TlRU,2111
50
50
  devsecops_engine_tools/engine_core/src/infrastructure/helpers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
51
51
  devsecops_engine_tools/engine_core/src/infrastructure/helpers/aws.py,sha256=wfy_PosHS0rrvkdiUYczxIcc8ZNwfqzWwqVxrmRTCBI,264
52
52
  devsecops_engine_tools/engine_core/src/infrastructure/helpers/util.py,sha256=lDtaozInb5m2R8Y-oGQasroksCRw_N_Ltz7gLkSguX8,380
@@ -76,14 +76,14 @@ devsecops_engine_tools/engine_risk/src/domain/usecases/__init__.py,sha256=47DEQp
76
76
  devsecops_engine_tools/engine_risk/src/domain/usecases/add_data.py,sha256=4wqDj-q7hJfJscvrbMDcy7tONqxdxl-CSl_TWTRUGKA,402
77
77
  devsecops_engine_tools/engine_risk/src/domain/usecases/break_build.py,sha256=BS4oRY0-ZK59xaVxMHxyEs4IRxLSq_lkjvYwH2BmgtE,11814
78
78
  devsecops_engine_tools/engine_risk/src/domain/usecases/check_threshold.py,sha256=VYdmcbAuNNvdHCegRfvza7YJ8FHbFNyDosrKJrMW93I,765
79
- devsecops_engine_tools/engine_risk/src/domain/usecases/get_exclusions.py,sha256=7_qbPOoTa5up9zymGQ9ancqR_J7JhMyOXDWqjq_Pdh0,2380
79
+ devsecops_engine_tools/engine_risk/src/domain/usecases/get_exclusions.py,sha256=1ekBmLK36R3ddkQ40s8teAYvaldG8hnVsacXnWdkKrg,2460
80
80
  devsecops_engine_tools/engine_risk/src/domain/usecases/handle_filters.py,sha256=JmeBtO6CMufjYSRpGQU1kPZoW3PnXwVXnl33LSIU3n8,3543
81
81
  devsecops_engine_tools/engine_risk/src/infrastructure/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
82
82
  devsecops_engine_tools/engine_risk/src/infrastructure/driven_adapters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
83
83
  devsecops_engine_tools/engine_risk/src/infrastructure/driven_adapters/first_csv/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
84
84
  devsecops_engine_tools/engine_risk/src/infrastructure/driven_adapters/first_csv/first_epss_csv.py,sha256=pWaRmIwVyiB5mlmWySHIx-DUgN9vtKQc-MqyRNVlTJo,2150
85
85
  devsecops_engine_tools/engine_risk/src/infrastructure/entry_points/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
86
- devsecops_engine_tools/engine_risk/src/infrastructure/entry_points/entry_point_risk.py,sha256=wM6j4HmiKhw7wt7JKxlE576QYdwcFK1nZHv64HRwXD4,2389
86
+ devsecops_engine_tools/engine_risk/src/infrastructure/entry_points/entry_point_risk.py,sha256=tiXRqWcehAoFn-HrvteOKTYemwlfTJHCqIGYDGAk28Q,2459
87
87
  devsecops_engine_tools/engine_risk/src/infrastructure/helpers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
88
88
  devsecops_engine_tools/engine_sast/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
89
89
  devsecops_engine_tools/engine_sast/engine_code/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -98,7 +98,7 @@ devsecops_engine_tools/engine_sast/engine_code/src/domain/model/config_tool.py,s
98
98
  devsecops_engine_tools/engine_sast/engine_code/src/domain/model/gateways/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
99
99
  devsecops_engine_tools/engine_sast/engine_code/src/domain/model/gateways/tool_gateway.py,sha256=kseBXn2SzCaFNJLghY9bTOCVvD2v5t7DKcfxgSmvBc0,459
100
100
  devsecops_engine_tools/engine_sast/engine_code/src/domain/usecases/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
101
- devsecops_engine_tools/engine_sast/engine_code/src/domain/usecases/code_scan.py,sha256=ynbpORfB0AbKQ0871KWivyUeJ9s3ek_i4_YcAvul3U0,5954
101
+ devsecops_engine_tools/engine_sast/engine_code/src/domain/usecases/code_scan.py,sha256=4LVJffD-v5kbbJz1qNM9CjVEQgh-6UOpgjXMUqhQ3sg,5989
102
102
  devsecops_engine_tools/engine_sast/engine_code/src/infrastructure/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
103
103
  devsecops_engine_tools/engine_sast/engine_code/src/infrastructure/driven_adapters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
104
104
  devsecops_engine_tools/engine_sast/engine_code/src/infrastructure/driven_adapters/bearer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -119,13 +119,13 @@ devsecops_engine_tools/engine_sast/engine_iac/src/domain/model/config_tool.py,sh
119
119
  devsecops_engine_tools/engine_sast/engine_iac/src/domain/model/gateways/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
120
120
  devsecops_engine_tools/engine_sast/engine_iac/src/domain/model/gateways/tool_gateway.py,sha256=ClElxyHbwfDCW0fgcehaNfQLq00zozhO71EnyCjzt-U,182
121
121
  devsecops_engine_tools/engine_sast/engine_iac/src/domain/usecases/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
122
- devsecops_engine_tools/engine_sast/engine_iac/src/domain/usecases/iac_scan.py,sha256=YKbWTYnoONGvVcWLGu1m7D35IHT45EfwSLkF2jTFZso,5934
122
+ devsecops_engine_tools/engine_sast/engine_iac/src/domain/usecases/iac_scan.py,sha256=NatfK2WC6Tee643kTcKBOf_YN3Q1m0jR2hwTEMkSKAY,6004
123
123
  devsecops_engine_tools/engine_sast/engine_iac/src/infrastructure/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
124
124
  devsecops_engine_tools/engine_sast/engine_iac/src/infrastructure/driven_adapters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
125
125
  devsecops_engine_tools/engine_sast/engine_iac/src/infrastructure/driven_adapters/checkov/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
126
126
  devsecops_engine_tools/engine_sast/engine_iac/src/infrastructure/driven_adapters/checkov/checkov_config.py,sha256=qbE6wUO5_WFXF_QolL0JYelaRGEOUakPEZR_6HAKzzI,4355
127
127
  devsecops_engine_tools/engine_sast/engine_iac/src/infrastructure/driven_adapters/checkov/checkov_deserealizator.py,sha256=l_opY909gh1m3k2ud2xDrCVnDTBe3ApYT75juBf_uMk,1836
128
- devsecops_engine_tools/engine_sast/engine_iac/src/infrastructure/driven_adapters/checkov/checkov_tool.py,sha256=8gbf4nGWxjaF6c9H6rEvPZg3JksZ8rn8ShEZRaxGgUI,11506
128
+ devsecops_engine_tools/engine_sast/engine_iac/src/infrastructure/driven_adapters/checkov/checkov_tool.py,sha256=81Hqkh24jk6DV55i5Ggl-4hpU-rKkVzi9koJ6S3TE1Y,8796
129
129
  devsecops_engine_tools/engine_sast/engine_iac/src/infrastructure/driven_adapters/kics/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
130
130
  devsecops_engine_tools/engine_sast/engine_iac/src/infrastructure/driven_adapters/kics/kics_deserealizator.py,sha256=b1X5GWz2snJtsKZcGEsILNc178hv9p-lg-el0Jc-_Eo,2084
131
131
  devsecops_engine_tools/engine_sast/engine_iac/src/infrastructure/driven_adapters/kics/kics_tool.py,sha256=8lda0A7huVSWgq2zMAN92vQv4ug0HiQMATGdXV5lgyA,5202
@@ -143,21 +143,21 @@ devsecops_engine_tools/engine_sast/engine_secret/src/applications/runner_secret_
143
143
  devsecops_engine_tools/engine_sast/engine_secret/src/deployment/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
144
144
  devsecops_engine_tools/engine_sast/engine_secret/src/deployment/infrastructure/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
145
145
  devsecops_engine_tools/engine_sast/engine_secret/src/domain/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
146
- devsecops_engine_tools/engine_sast/engine_secret/src/domain/model/DeserializeConfigTool.py,sha256=vwV7OoH943fQvwSgoKqLnnB8XcuMwQsebrIXvQIgiTs,941
146
+ devsecops_engine_tools/engine_sast/engine_secret/src/domain/model/DeserializeConfigTool.py,sha256=jUD_irTwabu_WG1by0VrxIoHJTZXVJZzkNSlSYgAue0,1085
147
147
  devsecops_engine_tools/engine_sast/engine_secret/src/domain/model/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
148
148
  devsecops_engine_tools/engine_sast/engine_secret/src/domain/model/gateway/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
149
149
  devsecops_engine_tools/engine_sast/engine_secret/src/domain/model/gateway/gateway_deserealizator.py,sha256=4fYPengHW3K0uVP6wHgOiNu-gRb08m78E7QZayZ2LC4,441
150
150
  devsecops_engine_tools/engine_sast/engine_secret/src/domain/model/gateway/tool_gateway.py,sha256=0KIesfLrmRqRId9r-domGjca4oLNyDzSI4jajjjX_Qo,840
151
151
  devsecops_engine_tools/engine_sast/engine_secret/src/domain/usecases/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
152
- devsecops_engine_tools/engine_sast/engine_secret/src/domain/usecases/secret_scan.py,sha256=p49r6X74KYuKWi1VcssmLS1ntOJT1xHAhVVZKKnMKEY,4476
153
- devsecops_engine_tools/engine_sast/engine_secret/src/domain/usecases/set_input_core.py,sha256=v4shbxBl3ciI9gPHKGKIiOxkJECRx6WwX_0BHp154DI,3204
152
+ devsecops_engine_tools/engine_sast/engine_secret/src/domain/usecases/secret_scan.py,sha256=ZN7hLRL69SYJLECTRalmWITXchBBjlfLiiJAnU8vsDg,4511
153
+ devsecops_engine_tools/engine_sast/engine_secret/src/domain/usecases/set_input_core.py,sha256=VQK8FsJsH8sUYgboYrnl3uY2kxve5QG66Nn2SnvYJTI,3244
154
154
  devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
155
155
  devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/driven_adapters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
156
156
  devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/driven_adapters/trufflehog/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
157
157
  devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/driven_adapters/trufflehog/trufflehog_deserealizator.py,sha256=mrSqPrkMiikxQ_uY-rF2I8QvicsOMdMBzTC8CTV3Wk8,2392
158
- devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/driven_adapters/trufflehog/trufflehog_run.py,sha256=GcO8r_LjIjhPlyiUujAM23AK2ks1xl6hy3owyNXk5WI,8530
158
+ devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/driven_adapters/trufflehog/trufflehog_run.py,sha256=0OzDHxtbV1ke2V2SXZU7vkjc3MioGrR-djnV_ea0lAo,8740
159
159
  devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/entry_points/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
160
- devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/entry_points/entry_point_tool.py,sha256=NiA5-pRL6-tMuOa2Al-wIYq3uIMFBQrJd0w7ur16kgs,1049
160
+ devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/entry_points/entry_point_tool.py,sha256=Kgs478DRvaw-wqPd3tY24xJ1F_7hHh38hRqrleucSWo,1084
161
161
  devsecops_engine_tools/engine_sca/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
162
162
  devsecops_engine_tools/engine_sca/engine_container/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
163
163
  devsecops_engine_tools/engine_sca/engine_container/src/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -186,7 +186,7 @@ devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_ada
186
186
  devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/trivy_tool/trivy_deserialize_output.py,sha256=LGqnO10Zt-0-TxUW6F1S46jVktlIwxWSYATKSVblCWI,2535
187
187
  devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/trivy_tool/trivy_manager_scan.py,sha256=LWiCQsL7BukEJPCoPkC_zYDfYQMLo2LNYwMbIIXBGfs,3722
188
188
  devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/entry_points/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
189
- devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/entry_points/entry_point_tool.py,sha256=kLV6cyFfvDC7Wv9DOIvR2OK624GZ8D-F8JZ-ADapGWo,2367
189
+ devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/entry_points/entry_point_tool.py,sha256=HSDhub6kPcbSfAo5uJOxY8Pc4kyZ8VszJmwH-p8vkx4,2437
190
190
  devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/helpers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
191
191
  devsecops_engine_tools/engine_sca/engine_dependencies/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
192
192
  devsecops_engine_tools/engine_sca/engine_dependencies/src/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -212,14 +212,14 @@ devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/driven_
212
212
  devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/driven_adapters/xray_tool/xray_deserialize_output.py,sha256=Vm0pj1i6a34xXouXUU95Y04hzR--9tcMQuycR7IMUnQ,2221
213
213
  devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/driven_adapters/xray_tool/xray_manager_scan.py,sha256=u8SAtVuTqJ6o2B6jC-gMNG2Pn7a_bHWT_B1a_55iYZ4,7408
214
214
  devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/entry_points/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
215
- devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/entry_points/entry_point_tool.py,sha256=wPKcSktBqSzsF7vJJYcJ867d_NnusRRSiIeBeLa0D4w,2522
215
+ devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/entry_points/entry_point_tool.py,sha256=3EJ00WleYziW_EenXsJQ_OLOV1hAulSuVXjc42sGUIQ,2606
216
216
  devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/helpers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
217
- devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/helpers/get_artifacts.py,sha256=KjRqQ3zxEq8MUNMW5LjS0EK2EIku3GWhSz9wUbDsZz0,4005
217
+ devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/helpers/get_artifacts.py,sha256=CpzyUJyO2bRtv6mZJODV5NL5ea79_VRqsYKC0oYDsNU,4077
218
218
  devsecops_engine_tools/engine_utilities/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
219
219
  devsecops_engine_tools/engine_utilities/settings.py,sha256=CPnDndwVeRgQNml3HVzvytVruDd8dTd1ICHbkMDSgTM,2144
220
220
  devsecops_engine_tools/engine_utilities/azuredevops/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
221
221
  devsecops_engine_tools/engine_utilities/azuredevops/infrastructure/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
222
- devsecops_engine_tools/engine_utilities/azuredevops/infrastructure/azure_devops_api.py,sha256=0r_hIh1bpgt6wAAxoAkOPYmoou8V80a9lqK0vyGDXb8,2680
222
+ devsecops_engine_tools/engine_utilities/azuredevops/infrastructure/azure_devops_api.py,sha256=yhZaXC2RQEhGfXt-ULTdDLG9PI9WjV7iscxhDHwfm8w,2965
223
223
  devsecops_engine_tools/engine_utilities/azuredevops/models/AzureMessageLoggingPipeline.py,sha256=pCwlPDDl-hgvZ9gvceuC8GsKbsMhRm3ykhFFVByVqcI,664
224
224
  devsecops_engine_tools/engine_utilities/azuredevops/models/AzurePredefinedVariables.py,sha256=r-PpcKlyuXzKHx6ao4SuVI9dOKMVnjL1U_b-yfJK0o4,2387
225
225
  devsecops_engine_tools/engine_utilities/azuredevops/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -273,7 +273,7 @@ devsecops_engine_tools/engine_utilities/git_cli/model/gateway/__init__.py,sha256
273
273
  devsecops_engine_tools/engine_utilities/git_cli/model/gateway/git_gateway.py,sha256=x6LFK8wZuVix-ZCBdBQTzvjQi59nZYVrSOTatCOQbxc,638
274
274
  devsecops_engine_tools/engine_utilities/github/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
275
275
  devsecops_engine_tools/engine_utilities/github/infrastructure/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
276
- devsecops_engine_tools/engine_utilities/github/infrastructure/github_api.py,sha256=AURk8GGAkNuHCqTEsiS6UxClL_YYJoqtBrWGBSYgWO4,2436
276
+ devsecops_engine_tools/engine_utilities/github/infrastructure/github_api.py,sha256=6c4YXGsKZEYPSy6AtMx9arxR4JpYPz1C0VleIV2n2Ms,2779
277
277
  devsecops_engine_tools/engine_utilities/github/models/GithubPredefinedVariables.py,sha256=LmIvCVDyszInElu_-Pt034q1Zaajp-QA3ge-RtimxHg,1589
278
278
  devsecops_engine_tools/engine_utilities/github/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
279
279
  devsecops_engine_tools/engine_utilities/input_validations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -282,19 +282,19 @@ devsecops_engine_tools/engine_utilities/input_validations/validate_input_with_re
282
282
  devsecops_engine_tools/engine_utilities/sonarqube/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
283
283
  devsecops_engine_tools/engine_utilities/sonarqube/src/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
284
284
  devsecops_engine_tools/engine_utilities/sonarqube/src/applications/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
285
- devsecops_engine_tools/engine_utilities/sonarqube/src/applications/runner_report_sonar.py,sha256=OdCw5wXBO9Qd6tzsHdoa_V4xt_n2cfEk4RRsl3zVIZc,3649
285
+ devsecops_engine_tools/engine_utilities/sonarqube/src/applications/runner_report_sonar.py,sha256=ww1unF9CGqkmjWxrvc_LqIaX7gOaZYzoUrzIX3U9K9Y,3901
286
286
  devsecops_engine_tools/engine_utilities/sonarqube/src/domain/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
287
287
  devsecops_engine_tools/engine_utilities/sonarqube/src/domain/model/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
288
288
  devsecops_engine_tools/engine_utilities/sonarqube/src/domain/model/gateways/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
289
289
  devsecops_engine_tools/engine_utilities/sonarqube/src/domain/model/gateways/sonar_gateway.py,sha256=PCrGq7NOINAFPvmX-5V5191MGhahsnQeWXUB1-xL4Xw,1279
290
290
  devsecops_engine_tools/engine_utilities/sonarqube/src/domain/usecases/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
291
- devsecops_engine_tools/engine_utilities/sonarqube/src/domain/usecases/report_sonar.py,sha256=47q-JCyjH50FtBnkJ4WkcYPggv140LgqpXpkWh8JKMI,8964
291
+ devsecops_engine_tools/engine_utilities/sonarqube/src/domain/usecases/report_sonar.py,sha256=iAmogxLTYLWgN524--8IT33T_p54rdvQdRymAHGK-C0,9048
292
292
  devsecops_engine_tools/engine_utilities/sonarqube/src/infrastructure/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
293
293
  devsecops_engine_tools/engine_utilities/sonarqube/src/infrastructure/driven_adapters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
294
294
  devsecops_engine_tools/engine_utilities/sonarqube/src/infrastructure/driven_adapters/sonarqube/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
295
295
  devsecops_engine_tools/engine_utilities/sonarqube/src/infrastructure/driven_adapters/sonarqube/sonarqube_report.py,sha256=eKzxONP3pP4d2MIknC5sGVuxcHzgelt5D0Kun88WBMo,4514
296
296
  devsecops_engine_tools/engine_utilities/sonarqube/src/infrastructure/entry_points/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
297
- devsecops_engine_tools/engine_utilities/sonarqube/src/infrastructure/entry_points/entry_point_report_sonar.py,sha256=Q5R-O6KbU6qb7-U3dtdhBiHvs9j9X1TFlG5F4Zmxz3A,2173
297
+ devsecops_engine_tools/engine_utilities/sonarqube/src/infrastructure/entry_points/entry_point_report_sonar.py,sha256=1NoOPzq81zQjLks2FOwdF0od8W0KmSv69ZeEQyORV38,2203
298
298
  devsecops_engine_tools/engine_utilities/sonarqube/src/infrastructure/helpers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
299
299
  devsecops_engine_tools/engine_utilities/sonarqube/src/infrastructure/helpers/utils.py,sha256=SGOWrkzQrvOt9bRhhSfgiMzj1695e1W0B9ox9C1ihQI,294
300
300
  devsecops_engine_tools/engine_utilities/ssh/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -307,9 +307,9 @@ devsecops_engine_tools/engine_utilities/utils/logger_info.py,sha256=4Mz8Bwlm9Mku
307
307
  devsecops_engine_tools/engine_utilities/utils/name_conversion.py,sha256=ADJrRGaxYSDe0ZRh6VHRf53H4sXPcb-vNP_i81PUn3I,307
308
308
  devsecops_engine_tools/engine_utilities/utils/printers.py,sha256=amYAr9YQfYgR6jK9a2l26z3oovFPQ3FAKmhq6BKhEBA,623
309
309
  devsecops_engine_tools/engine_utilities/utils/session_manager.py,sha256=yNtlT-8Legz1sHbGPH8LNYjL-LgDUE0zXG2rYjiab7U,290
310
- devsecops_engine_tools/engine_utilities/utils/utils.py,sha256=79nXjjRjR64xvXmQzJqFpDj5xByrqQbc6OnowHqBEz4,1756
311
- devsecops_engine_tools-1.21.0.dist-info/METADATA,sha256=ZvbQcgJ3B_WjQshEKyhL5355wWrCCDWKyHCbqIMXZEg,10895
312
- devsecops_engine_tools-1.21.0.dist-info/WHEEL,sha256=R0nc6qTxuoLk7ShA2_Y-UWkN8ZdfDBG2B6Eqpz2WXbs,91
313
- devsecops_engine_tools-1.21.0.dist-info/entry_points.txt,sha256=MHCTFFs9bdNKo6YcWCcBW2_8X6yTisgLOlmVx-V8Rxc,276
314
- devsecops_engine_tools-1.21.0.dist-info/top_level.txt,sha256=ge6y0X_xBAU1aG3EMWFtl9djbVyg5BxuSp2r2Lg6EQU,23
315
- devsecops_engine_tools-1.21.0.dist-info/RECORD,,
310
+ devsecops_engine_tools/engine_utilities/utils/utils.py,sha256=yvCbPKAWa7wxk5S-s_Xkvx9VtnIpv9eWUMG8wtlmrhs,5870
311
+ devsecops_engine_tools-1.23.1.dist-info/METADATA,sha256=zfRJPfnDUznWmAn25T_JxYK-CjQdY5h5iM1FQbxyNI8,10943
312
+ devsecops_engine_tools-1.23.1.dist-info/WHEEL,sha256=R0nc6qTxuoLk7ShA2_Y-UWkN8ZdfDBG2B6Eqpz2WXbs,91
313
+ devsecops_engine_tools-1.23.1.dist-info/entry_points.txt,sha256=MHCTFFs9bdNKo6YcWCcBW2_8X6yTisgLOlmVx-V8Rxc,276
314
+ devsecops_engine_tools-1.23.1.dist-info/top_level.txt,sha256=ge6y0X_xBAU1aG3EMWFtl9djbVyg5BxuSp2r2Lg6EQU,23
315
+ devsecops_engine_tools-1.23.1.dist-info/RECORD,,