diff options
Diffstat (limited to 'applications/github')
-rw-r--r-- | applications/github/github_admins.py | 31 | ||||
-rw-r--r-- | applications/github/github_audit_log.py | 26 | ||||
-rw-r--r-- | applications/github/github_branch_protections.py | 28 | ||||
-rw-r--r-- | applications/github/github_commits.py | 52 |
4 files changed, 83 insertions, 54 deletions
diff --git a/applications/github/github_admins.py b/applications/github/github_admins.py index d737887..b6db534 100644 --- a/applications/github/github_admins.py +++ b/applications/github/github_admins.py @@ -5,54 +5,59 @@ and list each user's permission per repo. import requests -GITHUB_TOKEN = 'your_personal_access_token' -ORGANIZATION = 'your_organization' +GITHUB_TOKEN = "your_personal_access_token" +ORGANIZATION = "your_organization" TIMEOUT = 30 # Headers for authentication headers = { - 'Authorization': f'token {GITHUB_TOKEN}', - 'Accept': 'application/vnd.github.v3+json' + "Authorization": f"token {GITHUB_TOKEN}", + "Accept": "application/vnd.github.v3+json", } + def get_org_members(org): """ Get members of an organization """ - url = f'https://api.github.com/orgs/{org}/members' + url = f"https://api.github.com/orgs/{org}/members" response = requests.get(url, headers=headers, timeout=TIMEOUT) response.raise_for_status() return response.json() + def get_org_repos(org): """ Get repositories of an organization """ - url = f'https://api.github.com/orgs/{org}/repos' + url = f"https://api.github.com/orgs/{org}/repos" response = requests.get(url, headers=headers, timeout=TIMEOUT) response.raise_for_status() return response.json() + def get_repo_collaborators(org, repo): """ Get collaborators of a repository with their permissions """ - url = f'https://api.github.com/repos/{org}/{repo}/collaborators' + url = f"https://api.github.com/repos/{org}/{repo}/collaborators" response = requests.get(url, headers=headers, timeout=TIMEOUT) response.raise_for_status() return response.json() + def get_user_permissions(org, repo, user): """ Get a user's permissions for a repository """ - url = f'https://api.github.com/repos/{org}/{repo}/collaborators/{user}/permission' + url = f"https://api.github.com/repos/{org}/{repo}/collaborators/{user}/permission" response = requests.get(url, headers=headers, timeout=TIMEOUT) response.raise_for_status() return response.json() + # Main script -if __name__ == '__main__': +if __name__ == "__main__": # Get organization members members = get_org_members(ORGANIZATION) print(f"Members of the organization '{ORGANIZATION}':") @@ -67,10 +72,12 @@ if __name__ == '__main__': # Get collaborators for each repository and their permissions for repository in repositories: - repository_name = repository['name'] + repository_name = repository["name"] collaborators = get_repo_collaborators(ORGANIZATION, repository_name) print(f"\nCollaborators for the repository '{repository_name}':") for collaborator in collaborators: - user_login = collaborator['login'] - permissions = get_user_permissions(ORGANIZATION, repository_name, user_login) + user_login = collaborator["login"] + permissions = get_user_permissions( + ORGANIZATION, repository_name, user_login + ) print(f"- {user_login}: {permissions['permission']}") diff --git a/applications/github/github_audit_log.py b/applications/github/github_audit_log.py index 0937764..dd00535 100644 --- a/applications/github/github_audit_log.py +++ b/applications/github/github_audit_log.py @@ -6,16 +6,17 @@ NOTE: REQUIRES A GITHUB ENTERPRISE SUBSCRIPTION TO ACCESS THE API. import requests -GITHUB_TOKEN = 'your_personal_access_token' -ORGANIZATION = 'your_organization' +GITHUB_TOKEN = "your_personal_access_token" +ORGANIZATION = "your_organization" TIMEOUT = 30 # Headers for authentication headers = { - 'Authorization': f'token {GITHUB_TOKEN}', - 'Accept': 'application/vnd.github.v3+json' + "Authorization": f"token {GITHUB_TOKEN}", + "Accept": "application/vnd.github.v3+json", } + def get_audit_log_events(org, actions): """ Get audit log events for specific actions @@ -23,8 +24,10 @@ def get_audit_log_events(org, actions): events = [] page = 1 while True: - url = (f'https://api.github.com/orgs/{org}/audit-log?page={page}&per_page=100' - f'&action={",".join(actions)}') + url = ( + f"https://api.github.com/orgs/{org}/audit-log?page={page}&per_page=100" + f"&action={','.join(actions)}" + ) response = requests.get(url, headers=headers, timeout=TIMEOUT) response.raise_for_status() page_events = response.json() @@ -34,12 +37,15 @@ def get_audit_log_events(org, actions): page += 1 return events -if __name__ == '__main__': + +if __name__ == "__main__": try: # Define the actions to filter - action_filters = ['protected_branch', - 'repository_branch_protection_evaluation', - 'repository_ruleset'] + action_filters = [ + "protected_branch", + "repository_branch_protection_evaluation", + "repository_ruleset", + ] # Get audit log events for the specified actions audit_log_events = get_audit_log_events(ORGANIZATION, action_filters) diff --git a/applications/github/github_branch_protections.py b/applications/github/github_branch_protections.py index 73c94b6..705e498 100644 --- a/applications/github/github_branch_protections.py +++ b/applications/github/github_branch_protections.py @@ -4,16 +4,17 @@ Gathers branch protection rules for a repository. import requests -GITHUB_TOKEN = 'your_personal_access_token' -ORGANIZATION = 'your_organization' -REPOSITORY = 'your_repository' +GITHUB_TOKEN = "your_personal_access_token" +ORGANIZATION = "your_organization" +REPOSITORY = "your_repository" TIMEOUT = 30 headers = { - 'Authorization': f'token {GITHUB_TOKEN}', - 'Accept': 'application/vnd.github.v3+json' + "Authorization": f"token {GITHUB_TOKEN}", + "Accept": "application/vnd.github.v3+json", } + def get_all_branches(org, repo): """ Get all branches in a repository @@ -21,7 +22,7 @@ def get_all_branches(org, repo): all_branches = [] page = 1 while True: - url = f'https://api.github.com/repos/{org}/{repo}/branches?page={page}&per_page=100' + url = f"https://api.github.com/repos/{org}/{repo}/branches?page={page}&per_page=100" response = requests.get(url, headers=headers, timeout=TIMEOUT) response.raise_for_status() page_branches = response.json() @@ -31,27 +32,30 @@ def get_all_branches(org, repo): page += 1 return all_branches + def get_branch_protection(org, repo, repo_branch): """ Get branch protection settings """ - url = f'https://api.github.com/repos/{org}/{repo}/branches/{repo_branch}/protection' + url = f"https://api.github.com/repos/{org}/{repo}/branches/{repo_branch}/protection" response = requests.get(url, headers=headers, timeout=TIMEOUT) if response.status_code == 404: return None # No protection settings for this branch response.raise_for_status() return response.json() + def get_repository_rulesets(org, repo): """ Get repository rulesets """ - url = f'https://api.github.com/repos/{org}/{repo}/rulesets' + url = f"https://api.github.com/repos/{org}/{repo}/rulesets" response = requests.get(url, headers=headers, timeout=TIMEOUT) response.raise_for_status() return response.json() -if __name__ == '__main__': + +if __name__ == "__main__": try: # Get all branches in the repository branches = get_all_branches(ORGANIZATION, REPOSITORY) @@ -59,8 +63,10 @@ if __name__ == '__main__': # Get protection settings for each branch for branch in branches: - branch_name = branch['name'] - protection_settings = get_branch_protection(ORGANIZATION, REPOSITORY, branch_name) + branch_name = branch["name"] + protection_settings = get_branch_protection( + ORGANIZATION, REPOSITORY, branch_name + ) print(f"\nBranch: {branch_name}") if protection_settings: print(f"Protection settings: {protection_settings}") diff --git a/applications/github/github_commits.py b/applications/github/github_commits.py index f35d5d6..7581ff1 100644 --- a/applications/github/github_commits.py +++ b/applications/github/github_commits.py @@ -4,20 +4,21 @@ Gather all commits from a specific branch of a repository in a GitHub organizati import requests -GITHUB_TOKEN = 'your_personal_access_token' -ORGANIZATION = 'your_organization' -REPOSITORY = 'your_repository' -BRANCH = 'your_branch' +GITHUB_TOKEN = "your_personal_access_token" +ORGANIZATION = "your_organization" +REPOSITORY = "your_repository" +BRANCH = "your_branch" # Headers for authentication headers = { - 'Authorization': f'token {GITHUB_TOKEN}', - 'Accept': 'application/vnd.github.v3+json' + "Authorization": f"token {GITHUB_TOKEN}", + "Accept": "application/vnd.github.v3+json", } # Define a timeout value (in seconds) TIMEOUT = 10 + def get_commit_log(org, repo, branch): """ Get the full commit log for a repository branch @@ -25,8 +26,10 @@ def get_commit_log(org, repo, branch): commits = [] page = 1 while True: - url = (f'https://api.github.com/repos/{org}/{repo}/commits?sha={branch}' - f'&page={page}&per_page=100') + url = ( + f"https://api.github.com/repos/{org}/{repo}/commits?sha={branch}" + f"&page={page}&per_page=100" + ) response = requests.get(url, headers=headers, timeout=TIMEOUT) response.raise_for_status() page_commits = response.json() @@ -36,39 +39,46 @@ def get_commit_log(org, repo, branch): page += 1 return commits + def get_commit_details(org, repo, sha): """ Get detailed information for a specific commit """ - url = f'https://api.github.com/repos/{org}/{repo}/commits/{sha}' + url = f"https://api.github.com/repos/{org}/{repo}/commits/{sha}" response = requests.get(url, headers=headers, timeout=TIMEOUT) response.raise_for_status() return response.json() -if __name__ == '__main__': + +if __name__ == "__main__": try: # Get the full commit log for the specified branch commit_log = get_commit_log(ORGANIZATION, REPOSITORY, BRANCH) - print(f"Total commits in the repository '{REPOSITORY}' on branch " - f"'{BRANCH}': {len(commit_log)}") + print( + f"Total commits in the repository '{REPOSITORY}' on branch " + f"'{BRANCH}': {len(commit_log)}" + ) # Get detailed information for each commit for commit in commit_log: - sha_hash = commit['sha'] - commit_details = get_commit_details(ORGANIZATION, REPOSITORY, - sha_hash) + sha_hash = commit["sha"] + commit_details = get_commit_details(ORGANIZATION, REPOSITORY, sha_hash) print(f"\nCommit SHA: {commit_details['sha']}") - print(f"Author: {commit_details['commit']['author']['name']} " - f"<{commit_details['commit']['author']['email']}>") + print( + f"Author: {commit_details['commit']['author']['name']} " + f"<{commit_details['commit']['author']['email']}>" + ) print(f"Date: {commit_details['commit']['author']['date']}") print(f"Message: {commit_details['commit']['message']}") print(f"URL: {commit_details['html_url']}") print("Files changed:") - for file in commit_details['files']: + for file in commit_details["files"]: print(f" - {file['filename']} ({file['status']})") - print(f" Additions: {file['additions']}, " - f"Deletions: {file['deletions']}, " - f"Changes: {file['changes']}") + print( + f" Additions: {file['additions']}, " + f"Deletions: {file['deletions']}, " + f"Changes: {file['changes']}" + ) except requests.exceptions.Timeout: print("The request timed out") except requests.exceptions.RequestException as e: |