Skip to content

Commit

Permalink
feat(secrets): support git history scan in multiline parsers (#4637)
Browse files Browse the repository at this point in the history
* added test + remove \n from string - need to update detect-secret vetsion

* Update checkov/secrets/plugins/detector_utils.py

Co-authored-by: Eliran Turgeman <50831652+Eliran-Turgeman@users.noreply.github.com>

* ipdate detect-secrets

* ipdate detect-secrets

* ipdate detect-secrets

* .

* remove popitem() for secret_value_regex_to_group

* remove popitem() for secret_value_regex_to_group

---------

Co-authored-by: Eliran Turgeman <50831652+Eliran-Turgeman@users.noreply.github.com>
  • Loading branch information
lirshindalman and Eliran-Turgeman committed Mar 13, 2023
1 parent 1bbc826 commit c9ec872
Show file tree
Hide file tree
Showing 7 changed files with 286 additions and 204 deletions.
2 changes: 0 additions & 2 deletions Pipfile.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion checkov/secrets/plugins/detector_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -185,7 +185,7 @@ def extract_from_string(pattern: dict[Pattern[str], int] | None, string: str) ->
for value_regex, group_number in pattern.items():
match = value_regex.search(string)
if match:
matches |= {match.group(group_number)}
matches |= {match.group(group_number).rstrip('\n')}
return matches


Expand Down
3 changes: 2 additions & 1 deletion checkov/secrets/scan_git_history.py
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,8 @@ def _get_commits_diff(self) -> Dict[str, Dict[str, str | Dict[str, str]]]:
base_diff_format = f'diff --git a/{file_diff.a_path} b/{file_diff.b_path}' \
f'\nindex 0000..0000 0000\n--- a/{file_diff.a_path}\n+++ b/{file_diff.b_path}\n'
commits_diff.setdefault(current_commit_hash, {})
commits_diff[current_commit_hash][file_diff.a_path] = base_diff_format + file_diff.diff.decode()
file_name = file_diff.a_path if file_diff.a_path else file_diff.b_path
commits_diff[current_commit_hash][file_name] = base_diff_format + file_diff.diff.decode()
return commits_diff


Expand Down
Empty file.
219 changes: 219 additions & 0 deletions tests/secrets/git_history/test_utils.py

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions tests/secrets/test_plugin_multiline_yml.py
Original file line number Diff line number Diff line change
Expand Up @@ -198,7 +198,7 @@ def test_regex_keyword_in_value(self):
]

keyword_value_regex_to_group = REGEX_VALUE_KEYWORD_BY_FILETYPE.get(FileType.YAML)
value_regex, group_number = keyword_value_regex_to_group.popitem()
value_regex, group_number = list(keyword_value_regex_to_group.items())[0]
for line, secret in examples:
match = value_regex.search(line).group(group_number)
assert match == secret
Expand All @@ -217,7 +217,7 @@ def test_regex_secret_in_value(self):
]

secret_value_regex_to_group = REGEX_VALUE_SECRET_BY_FILETYPE.get(FileType.YAML)
value_regex, group_number = secret_value_regex_to_group.popitem()
value_regex, group_number = list(secret_value_regex_to_group.items())[0]
for line, secret in examples:
match = value_regex.search(line).group(group_number)
assert match == secret
260 changes: 62 additions & 198 deletions tests/secrets/test_secret_git_history.py

Large diffs are not rendered by default.

0 comments on commit c9ec872

Please sign in to comment.