diff --git a/prowler/providers/github/services/repository/repository_service.py b/prowler/providers/github/services/repository/repository_service.py index e2ba4a4c95..96ccbbe7ed 100644 --- a/prowler/providers/github/services/repository/repository_service.py +++ b/prowler/providers/github/services/repository/repository_service.py @@ -18,16 +18,19 @@ class Repository(GithubService): for client in self.clients: for repo in client.get_user().get_repos(): default_branch = repo.default_branch + securitymd_exists = False try: securitymd_exists = repo.get_contents("SECURITY.md") is not None - except Exception: - securitymd_exists = False + except Exception as e: + logger.warning( + f"Could not find SECURITY.md for repo {repo.name}: {e}" + ) - branch = repo.get_branch(default_branch) require_pr = False approval_cnt = 0 - if branch.protected: - try: + try: + branch = repo.get_branch(default_branch) + if branch.protected: protection = branch.get_protection() if protection: require_pr = ( @@ -38,9 +41,10 @@ class Repository(GithubService): if require_pr else 0 ) - except Exception: - require_pr = False - approval_cnt = 0 + except Exception as e: + logger.warning( + f"Could not get branch protection for repo {repo.name}: {e}" + ) repos[repo.id] = Repo( id=repo.id, @@ -52,6 +56,7 @@ class Repository(GithubService): require_pull_request=require_pr, approval_count=approval_cnt, ) + except Exception as error: logger.error( f"{error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}" diff --git a/tests/providers/github/services/repository/repository_public_has_securitymd_file/repository_public_has_securitymd_file_test.py b/tests/providers/github/services/repository/repository_public_has_securitymd_file/repository_public_has_securitymd_file_test.py index 87c0b03caa..e4030ff899 100644 --- a/tests/providers/github/services/repository/repository_public_has_securitymd_file/repository_public_has_securitymd_file_test.py +++ b/tests/providers/github/services/repository/repository_public_has_securitymd_file/repository_public_has_securitymd_file_test.py @@ -32,8 +32,11 @@ class Test_repository_public_has_securitymd_file_test: id=1, name=repo_name, full_name="account-name/repo1", + default_branch="main", private=False, securitymd=False, + require_pull_request=False, + approval_count=0, ), } @@ -67,8 +70,11 @@ class Test_repository_public_has_securitymd_file_test: id=1, name=repo_name, full_name="account-name/repo1", + default_branch="main", private=False, securitymd=True, + require_pull_request=False, + approval_count=0, ), } diff --git a/tests/providers/github/services/repository/repository_service_test.py b/tests/providers/github/services/repository/repository_service_test.py index 3592cbcb8f..bc1f709ead 100644 --- a/tests/providers/github/services/repository/repository_service_test.py +++ b/tests/providers/github/services/repository/repository_service_test.py @@ -13,8 +13,11 @@ def mock_list_repositories(_): id=1, name="repo1", full_name="account-name/repo1", + default_branch="main", private=False, - securitymd=False, + securitymd=True, + require_pull_request=True, + approval_count=2, ), } @@ -26,7 +29,7 @@ def mock_list_repositories(_): class Test_Repository_Service: def test_get_client(self): repository_service = Repository(set_mocked_github_provider()) - assert repository_service.client.__class__.__name__ == "Github" + assert repository_service.clients[0].__class__.__name__ == "Github" def test_get_service(self): repository_service = Repository(set_mocked_github_provider()) @@ -38,4 +41,6 @@ class Test_Repository_Service: assert repository_service.repositories[1].name == "repo1" assert repository_service.repositories[1].full_name == "account-name/repo1" assert repository_service.repositories[1].private is False - assert repository_service.repositories[1].securitymd is False + assert repository_service.repositories[1].securitymd + assert repository_service.repositories[1].require_pull_request + assert repository_service.repositories[1].approval_count == 2