devsecops-engine-tools 1.8.13__py3-none-any.whl → 1.8.14__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_sast/engine_secret/src/domain/model/gateway/git_gateway.py +6 -2
- devsecops_engine_tools/engine_sast/engine_secret/src/domain/model/gateway/tool_gateway.py +2 -1
- devsecops_engine_tools/engine_sast/engine_secret/src/domain/usecases/secret_scan.py +8 -2
- devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/driven_adapters/git_cli/git_run.py +51 -17
- devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/driven_adapters/trufflehog/trufflehog_run.py +6 -3
- devsecops_engine_tools/version.py +1 -1
- {devsecops_engine_tools-1.8.13.dist-info → devsecops_engine_tools-1.8.14.dist-info}/METADATA +1 -1
- {devsecops_engine_tools-1.8.13.dist-info → devsecops_engine_tools-1.8.14.dist-info}/RECORD +11 -11
- {devsecops_engine_tools-1.8.13.dist-info → devsecops_engine_tools-1.8.14.dist-info}/WHEEL +0 -0
- {devsecops_engine_tools-1.8.13.dist-info → devsecops_engine_tools-1.8.14.dist-info}/entry_points.txt +0 -0
- {devsecops_engine_tools-1.8.13.dist-info → devsecops_engine_tools-1.8.14.dist-info}/top_level.txt +0 -0
|
@@ -5,7 +5,11 @@ class GitGateway(metaclass=ABCMeta):
|
|
|
5
5
|
@abstractmethod
|
|
6
6
|
def get_files_pull_request(self, sys_working_dir: str,
|
|
7
7
|
target_branch: str,
|
|
8
|
+
config_target_branch: dict,
|
|
8
9
|
source_branch: str,
|
|
9
|
-
|
|
10
|
-
|
|
10
|
+
access_token: str,
|
|
11
|
+
collection_uri: str,
|
|
12
|
+
team_project: str,
|
|
13
|
+
repository_name: str,
|
|
14
|
+
repository_provider: str) -> dict:
|
|
11
15
|
"get_files_pull_request"
|
|
@@ -36,14 +36,20 @@ class SecretScan:
|
|
|
36
36
|
files_pullrequest = self.git_gateway.get_files_pull_request(
|
|
37
37
|
self.devops_platform_gateway.get_variable("path_directory"),
|
|
38
38
|
self.devops_platform_gateway.get_variable("target_branch"),
|
|
39
|
+
config_tool.target_branches,
|
|
39
40
|
self.devops_platform_gateway.get_variable("source_branch"),
|
|
40
|
-
|
|
41
|
+
self.devops_platform_gateway.get_variable("access_token"),
|
|
42
|
+
self.devops_platform_gateway.get_variable("organization"),
|
|
43
|
+
self.devops_platform_gateway.get_variable("project_name"),
|
|
44
|
+
self.devops_platform_gateway.get_variable("repository"),
|
|
45
|
+
self.devops_platform_gateway.get_variable("repository_provider"))
|
|
41
46
|
findings, file_path_findings = self.tool_gateway.run_tool_secret_scan(
|
|
42
47
|
files_pullrequest,
|
|
43
48
|
config_tool.exclude_path,
|
|
44
49
|
self.devops_platform_gateway.get_variable("os"),
|
|
45
50
|
self.devops_platform_gateway.get_variable("path_directory"),
|
|
46
|
-
config_tool.number_threads
|
|
51
|
+
config_tool.number_threads,
|
|
52
|
+
self.devops_platform_gateway.get_variable("repository")
|
|
47
53
|
)
|
|
48
54
|
finding_list = self.tool_deserialize.get_list_vulnerability(
|
|
49
55
|
findings,
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
from dataclasses import dataclass
|
|
2
2
|
import os
|
|
3
3
|
import subprocess
|
|
4
|
+
from urllib.parse import quote
|
|
4
5
|
from devsecops_engine_tools.engine_sast.engine_secret.src.domain.model.gateway.git_gateway import GitGateway
|
|
5
6
|
|
|
6
7
|
from devsecops_engine_tools.engine_utilities.utils.logger_info import MyLogger
|
|
@@ -14,28 +15,61 @@ class GitRun(GitGateway):
|
|
|
14
15
|
def get_files_pull_request(self,
|
|
15
16
|
sys_working_dir,
|
|
16
17
|
target_branch,
|
|
18
|
+
config_target_branch,
|
|
17
19
|
source_branch,
|
|
18
|
-
|
|
19
|
-
|
|
20
|
+
access_token,
|
|
21
|
+
collection_uri,
|
|
22
|
+
team_project,
|
|
23
|
+
repository_name,
|
|
24
|
+
repository_provider):
|
|
20
25
|
try:
|
|
21
|
-
|
|
26
|
+
if repository_provider == 'GitHub' or target_branch not in config_target_branch:
|
|
27
|
+
os.chdir(sys_working_dir)
|
|
28
|
+
subprocess.run(['git', 'checkout', '-b', source_branch, f'origin/{source_branch}'], capture_output=True, text=True)
|
|
29
|
+
env = os.environ.copy()
|
|
30
|
+
env["GIT_COMMITTER_NAME"] = "Your Name"
|
|
31
|
+
env["GIT_COMMITTER_EMAIL"] = "your.email@example.com"
|
|
32
|
+
env["GIT_AUTHOR_NAME"] = "Your Name"
|
|
33
|
+
env["GIT_AUTHOR_EMAIL"] = "your.email@example.com"
|
|
34
|
+
command = ["git", "rebase", f"origin/{target_branch}", "-X", "theirs"]
|
|
35
|
+
subprocess.run(command, env=env, capture_output=True, text=True)
|
|
36
|
+
|
|
37
|
+
diff = subprocess.run(['git', 'diff', f'origin/{target_branch}..{source_branch}', '--name-only'], capture_output=True, text=True)
|
|
38
|
+
if diff.returncode == 0:
|
|
39
|
+
diff_files = diff.stdout.strip().split("\n")
|
|
40
|
+
print("Pull Requests Associated Files:",diff_files)
|
|
41
|
+
return diff_files
|
|
42
|
+
return []
|
|
43
|
+
base_compact_url = (
|
|
44
|
+
f"https://{collection_uri.rstrip('/').split('/')[-1].replace('.visualstudio.com','')}"
|
|
45
|
+
f".visualstudio.com/{quote(team_project)}/_git/"
|
|
46
|
+
f"{repository_name}"
|
|
47
|
+
)
|
|
48
|
+
|
|
49
|
+
url_without_https = base_compact_url.replace("https://", "")
|
|
50
|
+
url_with_token = f"https://x-access-token:{access_token}@{url_without_https}"
|
|
51
|
+
|
|
52
|
+
path_new_folder = sys_working_dir + '/' + repository_name
|
|
53
|
+
|
|
54
|
+
if os.path.exists(path_new_folder):
|
|
55
|
+
logger.warning(f"Error: folder {repository_name} already exist")
|
|
56
|
+
return []
|
|
57
|
+
os.makedirs(path_new_folder)
|
|
22
58
|
os.chdir(sys_working_dir)
|
|
23
|
-
subprocess.run([
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
command =
|
|
30
|
-
subprocess.run(command, env=env, text=True, capture_output=True)
|
|
59
|
+
subprocess.run(["git", "clone", "--branch", target_branch, url_with_token, path_new_folder], capture_output=True, text=True)
|
|
60
|
+
os.chdir(path_new_folder)
|
|
61
|
+
|
|
62
|
+
source_branch = source_branch.replace("refs/heads/", "")
|
|
63
|
+
subprocess.run(["git", "checkout", "-b", source_branch], capture_output=True, text=True)
|
|
64
|
+
command = ["git","-c","user.email=you@example.com","-c","user.name=Your Name","pull","--rebase","-X", "theirs","--no-edit","origin",source_branch]
|
|
65
|
+
subprocess.run(command, capture_output=True, text=True)
|
|
31
66
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
67
|
+
if source_branch != None:
|
|
68
|
+
diff = subprocess.run(['git', 'diff', '--name-only', f'{source_branch}..{target_branch}'], capture_output=True, text=True)
|
|
69
|
+
if diff:
|
|
70
|
+
diff_files = diff.stdout.strip().split("\n")
|
|
71
|
+
print("Pull Requests Associated Files:",len(diff_files))
|
|
36
72
|
return diff_files
|
|
37
|
-
except subprocess.CalledProcessError as e:
|
|
38
|
-
raise Exception(f"Error in pipeline configuration, {message_info_engine_secret}") from e
|
|
39
73
|
except Exception as e:
|
|
40
74
|
logger.warning(f"Error getting files PullRequest: {e}")
|
|
41
75
|
return []
|
|
@@ -43,7 +43,8 @@ class TrufflehogRun(ToolGateway):
|
|
|
43
43
|
exclude_paths,
|
|
44
44
|
agent_os,
|
|
45
45
|
agent_work_folder,
|
|
46
|
-
num_threads
|
|
46
|
+
num_threads,
|
|
47
|
+
repository_name,
|
|
47
48
|
):
|
|
48
49
|
trufflehog_command = "trufflehog"
|
|
49
50
|
if "Windows" in agent_os:
|
|
@@ -59,6 +60,7 @@ class TrufflehogRun(ToolGateway):
|
|
|
59
60
|
[agent_work_folder] * len(include_paths),
|
|
60
61
|
[exclude_path] * len(include_paths),
|
|
61
62
|
include_paths,
|
|
63
|
+
[repository_name] * len(include_paths),
|
|
62
64
|
)
|
|
63
65
|
findings, file_findings = self.create_file(self.decode_output(results), agent_work_folder)
|
|
64
66
|
return findings, file_findings
|
|
@@ -86,9 +88,10 @@ class TrufflehogRun(ToolGateway):
|
|
|
86
88
|
trufflehog_command,
|
|
87
89
|
agent_work_folder,
|
|
88
90
|
exclude_path,
|
|
89
|
-
include_path
|
|
91
|
+
include_path,
|
|
92
|
+
repository_name,
|
|
90
93
|
):
|
|
91
|
-
command = f"{trufflehog_command} filesystem {agent_work_folder} --include-paths {include_path} --exclude-paths {exclude_path} --no-verification --json"
|
|
94
|
+
command = f"{trufflehog_command} filesystem {agent_work_folder + '/' + repository_name} --include-paths {include_path} --exclude-paths {exclude_path} --no-verification --json"
|
|
92
95
|
result = subprocess.run(command, capture_output=True, shell=True, text=True)
|
|
93
96
|
return result.stdout.strip()
|
|
94
97
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
version = '1.8.
|
|
1
|
+
version = '1.8.14'
|
|
@@ -1,5 +1,5 @@
|
|
|
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=NMsYsyi0Mr3c0ZwNOnlQv7t4OcdOet7o69p2QQyEXDg,18
|
|
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
|
|
@@ -123,18 +123,18 @@ devsecops_engine_tools/engine_sast/engine_secret/src/domain/model/DeserializeCon
|
|
|
123
123
|
devsecops_engine_tools/engine_sast/engine_secret/src/domain/model/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
124
124
|
devsecops_engine_tools/engine_sast/engine_secret/src/domain/model/gateway/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
125
125
|
devsecops_engine_tools/engine_sast/engine_secret/src/domain/model/gateway/gateway_deserealizator.py,sha256=4fYPengHW3K0uVP6wHgOiNu-gRb08m78E7QZayZ2LC4,441
|
|
126
|
-
devsecops_engine_tools/engine_sast/engine_secret/src/domain/model/gateway/git_gateway.py,sha256=
|
|
127
|
-
devsecops_engine_tools/engine_sast/engine_secret/src/domain/model/gateway/tool_gateway.py,sha256=
|
|
126
|
+
devsecops_engine_tools/engine_sast/engine_secret/src/domain/model/gateway/git_gateway.py,sha256=x6LFK8wZuVix-ZCBdBQTzvjQi59nZYVrSOTatCOQbxc,638
|
|
127
|
+
devsecops_engine_tools/engine_sast/engine_secret/src/domain/model/gateway/tool_gateway.py,sha256=juharYjy__KyB0fFCbU30k_aLd_9cQgsoCMeodq9ebA,593
|
|
128
128
|
devsecops_engine_tools/engine_sast/engine_secret/src/domain/usecases/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
129
|
-
devsecops_engine_tools/engine_sast/engine_secret/src/domain/usecases/secret_scan.py,sha256=
|
|
129
|
+
devsecops_engine_tools/engine_sast/engine_secret/src/domain/usecases/secret_scan.py,sha256=9DAX-3cJB5JmK7ZV3s0NQlGLMaPBiP7UbCOJ8OYlH3A,3916
|
|
130
130
|
devsecops_engine_tools/engine_sast/engine_secret/src/domain/usecases/set_input_core.py,sha256=k0LZd9PJpqEDns6DLYRGu9DzpRZeFsxAnowcjP5Rml4,2838
|
|
131
131
|
devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
132
132
|
devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/driven_adapters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
133
133
|
devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/driven_adapters/git_cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
134
|
-
devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/driven_adapters/git_cli/git_run.py,sha256=
|
|
134
|
+
devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/driven_adapters/git_cli/git_run.py,sha256=ZCPsII6lkUutRJ3MdjD2vTc1lq6DgvHHMtXoaiIadk4,3844
|
|
135
135
|
devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/driven_adapters/trufflehog/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
136
136
|
devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/driven_adapters/trufflehog/trufflehog_deserealizator.py,sha256=WpFFswOmP38cLvfZHCrPDiRtdwH86n1CqVNS3K4s6uA,1968
|
|
137
|
-
devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/driven_adapters/trufflehog/trufflehog_run.py,sha256=
|
|
137
|
+
devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/driven_adapters/trufflehog/trufflehog_run.py,sha256=cvCSKTDN-4oL9H5EZF_-WrP5bNamFt0WfeCwaMO_Nfo,5345
|
|
138
138
|
devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/entry_points/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
139
139
|
devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/entry_points/entry_point_tool.py,sha256=WJJVGqE0PJMoATi8ubTGsqyrx4KqEQluXCg9Hk-NiOw,982
|
|
140
140
|
devsecops_engine_tools/engine_sca/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -256,8 +256,8 @@ devsecops_engine_tools/engine_utilities/utils/logger_info.py,sha256=4Mz8Bwlm9Mku
|
|
|
256
256
|
devsecops_engine_tools/engine_utilities/utils/name_conversion.py,sha256=ADJrRGaxYSDe0ZRh6VHRf53H4sXPcb-vNP_i81PUn3I,307
|
|
257
257
|
devsecops_engine_tools/engine_utilities/utils/printers.py,sha256=amYAr9YQfYgR6jK9a2l26z3oovFPQ3FAKmhq6BKhEBA,623
|
|
258
258
|
devsecops_engine_tools/engine_utilities/utils/session_manager.py,sha256=yNtlT-8Legz1sHbGPH8LNYjL-LgDUE0zXG2rYjiab7U,290
|
|
259
|
-
devsecops_engine_tools-1.8.
|
|
260
|
-
devsecops_engine_tools-1.8.
|
|
261
|
-
devsecops_engine_tools-1.8.
|
|
262
|
-
devsecops_engine_tools-1.8.
|
|
263
|
-
devsecops_engine_tools-1.8.
|
|
259
|
+
devsecops_engine_tools-1.8.14.dist-info/METADATA,sha256=9dUf9xXbCrzPWzoBiwpvv_oQLd8c9YkXtJuV7WkEqqQ,10444
|
|
260
|
+
devsecops_engine_tools-1.8.14.dist-info/WHEEL,sha256=R0nc6qTxuoLk7ShA2_Y-UWkN8ZdfDBG2B6Eqpz2WXbs,91
|
|
261
|
+
devsecops_engine_tools-1.8.14.dist-info/entry_points.txt,sha256=9IjXF_7Zpgowq_SY6OSmsA9vZze18a8_AeHwkQVrgKk,131
|
|
262
|
+
devsecops_engine_tools-1.8.14.dist-info/top_level.txt,sha256=ge6y0X_xBAU1aG3EMWFtl9djbVyg5BxuSp2r2Lg6EQU,23
|
|
263
|
+
devsecops_engine_tools-1.8.14.dist-info/RECORD,,
|
|
File without changes
|
{devsecops_engine_tools-1.8.13.dist-info → devsecops_engine_tools-1.8.14.dist-info}/entry_points.txt
RENAMED
|
File without changes
|
{devsecops_engine_tools-1.8.13.dist-info → devsecops_engine_tools-1.8.14.dist-info}/top_level.txt
RENAMED
|
File without changes
|