├── .gitignore ├── CODEOWNERS ├── LICENSE ├── LICENSE-3rdparty.csv ├── README.md ├── ghbuster ├── __init__.py ├── __main__.py ├── cli.py ├── github_repo_scanner.py ├── heuristics │ ├── __init__.py │ ├── base.py │ ├── graph.py │ ├── repo_commits_only_from_suspicious_unlinked_emails.py │ ├── repo_has_stargazzers_who_joined_the_same_day.py │ ├── repo_starred_by_suspicious_users.py │ ├── user_has_forks_from_taken_down_repos.py │ ├── user_has_low_community_activity.py │ ├── user_has_only_commits_from_unlinked_emails.py │ ├── user_has_only_forks.py │ ├── user_looks_legit.py │ └── user_metadata_basic.py ├── output_formatter.py └── service │ ├── __init__.py │ ├── emails_extractor.py │ └── github_archive.py ├── pyproject.toml ├── screenshot.png ├── scripts ├── __init__.py └── generate_heuristics_docs.py ├── tests ├── heuristics │ ├── test_repo_has_stargazzers_who_joined_the_same_day.py │ ├── test_user_has_forks_from_taken_down_repos.py │ ├── test_user_has_low_community_activity.py │ ├── test_user_has_only_forks.py │ ├── test_user_just_joined.py │ └── test_user_missing_common_fields.py └── test_utils │ ├── __init__.py │ ├── date_utils.py │ └── mock_utils.py └── uv.lock /.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DataDog/ghbuster/HEAD/.gitignore -------------------------------------------------------------------------------- /CODEOWNERS: -------------------------------------------------------------------------------- 1 | * @christophetd 2 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DataDog/ghbuster/HEAD/LICENSE -------------------------------------------------------------------------------- /LICENSE-3rdparty.csv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DataDog/ghbuster/HEAD/LICENSE-3rdparty.csv -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DataDog/ghbuster/HEAD/README.md -------------------------------------------------------------------------------- /ghbuster/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DataDog/ghbuster/HEAD/ghbuster/__init__.py -------------------------------------------------------------------------------- /ghbuster/__main__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DataDog/ghbuster/HEAD/ghbuster/__main__.py -------------------------------------------------------------------------------- /ghbuster/cli.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DataDog/ghbuster/HEAD/ghbuster/cli.py -------------------------------------------------------------------------------- /ghbuster/github_repo_scanner.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DataDog/ghbuster/HEAD/ghbuster/github_repo_scanner.py -------------------------------------------------------------------------------- /ghbuster/heuristics/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DataDog/ghbuster/HEAD/ghbuster/heuristics/__init__.py -------------------------------------------------------------------------------- /ghbuster/heuristics/base.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DataDog/ghbuster/HEAD/ghbuster/heuristics/base.py -------------------------------------------------------------------------------- /ghbuster/heuristics/graph.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DataDog/ghbuster/HEAD/ghbuster/heuristics/graph.py -------------------------------------------------------------------------------- /ghbuster/heuristics/repo_commits_only_from_suspicious_unlinked_emails.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DataDog/ghbuster/HEAD/ghbuster/heuristics/repo_commits_only_from_suspicious_unlinked_emails.py -------------------------------------------------------------------------------- /ghbuster/heuristics/repo_has_stargazzers_who_joined_the_same_day.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DataDog/ghbuster/HEAD/ghbuster/heuristics/repo_has_stargazzers_who_joined_the_same_day.py -------------------------------------------------------------------------------- /ghbuster/heuristics/repo_starred_by_suspicious_users.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DataDog/ghbuster/HEAD/ghbuster/heuristics/repo_starred_by_suspicious_users.py -------------------------------------------------------------------------------- /ghbuster/heuristics/user_has_forks_from_taken_down_repos.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DataDog/ghbuster/HEAD/ghbuster/heuristics/user_has_forks_from_taken_down_repos.py -------------------------------------------------------------------------------- /ghbuster/heuristics/user_has_low_community_activity.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DataDog/ghbuster/HEAD/ghbuster/heuristics/user_has_low_community_activity.py -------------------------------------------------------------------------------- /ghbuster/heuristics/user_has_only_commits_from_unlinked_emails.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DataDog/ghbuster/HEAD/ghbuster/heuristics/user_has_only_commits_from_unlinked_emails.py -------------------------------------------------------------------------------- /ghbuster/heuristics/user_has_only_forks.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DataDog/ghbuster/HEAD/ghbuster/heuristics/user_has_only_forks.py -------------------------------------------------------------------------------- /ghbuster/heuristics/user_looks_legit.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DataDog/ghbuster/HEAD/ghbuster/heuristics/user_looks_legit.py -------------------------------------------------------------------------------- /ghbuster/heuristics/user_metadata_basic.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DataDog/ghbuster/HEAD/ghbuster/heuristics/user_metadata_basic.py -------------------------------------------------------------------------------- /ghbuster/output_formatter.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DataDog/ghbuster/HEAD/ghbuster/output_formatter.py -------------------------------------------------------------------------------- /ghbuster/service/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ghbuster/service/emails_extractor.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DataDog/ghbuster/HEAD/ghbuster/service/emails_extractor.py -------------------------------------------------------------------------------- /ghbuster/service/github_archive.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DataDog/ghbuster/HEAD/ghbuster/service/github_archive.py -------------------------------------------------------------------------------- /pyproject.toml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DataDog/ghbuster/HEAD/pyproject.toml -------------------------------------------------------------------------------- /screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DataDog/ghbuster/HEAD/screenshot.png -------------------------------------------------------------------------------- /scripts/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scripts/generate_heuristics_docs.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DataDog/ghbuster/HEAD/scripts/generate_heuristics_docs.py -------------------------------------------------------------------------------- /tests/heuristics/test_repo_has_stargazzers_who_joined_the_same_day.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DataDog/ghbuster/HEAD/tests/heuristics/test_repo_has_stargazzers_who_joined_the_same_day.py -------------------------------------------------------------------------------- /tests/heuristics/test_user_has_forks_from_taken_down_repos.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DataDog/ghbuster/HEAD/tests/heuristics/test_user_has_forks_from_taken_down_repos.py -------------------------------------------------------------------------------- /tests/heuristics/test_user_has_low_community_activity.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DataDog/ghbuster/HEAD/tests/heuristics/test_user_has_low_community_activity.py -------------------------------------------------------------------------------- /tests/heuristics/test_user_has_only_forks.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DataDog/ghbuster/HEAD/tests/heuristics/test_user_has_only_forks.py -------------------------------------------------------------------------------- /tests/heuristics/test_user_just_joined.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DataDog/ghbuster/HEAD/tests/heuristics/test_user_just_joined.py -------------------------------------------------------------------------------- /tests/heuristics/test_user_missing_common_fields.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DataDog/ghbuster/HEAD/tests/heuristics/test_user_missing_common_fields.py -------------------------------------------------------------------------------- /tests/test_utils/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tests/test_utils/date_utils.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DataDog/ghbuster/HEAD/tests/test_utils/date_utils.py -------------------------------------------------------------------------------- /tests/test_utils/mock_utils.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DataDog/ghbuster/HEAD/tests/test_utils/mock_utils.py -------------------------------------------------------------------------------- /uv.lock: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DataDog/ghbuster/HEAD/uv.lock --------------------------------------------------------------------------------