diff options
author | Christian Cleberg <hello@cleberg.net> | 2025-04-07 22:52:59 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-04-07 22:52:59 -0500 |
commit | 8b78620c2c39c996007212616a586a8644ae7e33 (patch) | |
tree | 309e2dd196f9ce99893bf5f945dfcd8a8c0c3615 /applications/gitlab/users.py | |
parent | bee22b97b652cd04fa470d7f31c3b917e44f3ab9 (diff) | |
download | audit-tools-8b78620c2c39c996007212616a586a8644ae7e33.tar.gz audit-tools-8b78620c2c39c996007212616a586a8644ae7e33.tar.bz2 audit-tools-8b78620c2c39c996007212616a586a8644ae7e33.zip |
Gitlab enhancements (#2)
* add various in-progress scripts for gitlab
* Commit from GitHub Actions (Ruff)
* add gitlab results for free-tier tools
* Commit from GitHub Actions (Ruff)
* add gitlab results for ultimate-tier tools
* Commit from GitHub Actions (Ruff)
---------
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
Diffstat (limited to 'applications/gitlab/users.py')
-rw-r--r-- | applications/gitlab/users.py | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/applications/gitlab/users.py b/applications/gitlab/users.py new file mode 100644 index 0000000..fab2646 --- /dev/null +++ b/applications/gitlab/users.py @@ -0,0 +1,53 @@ +""" +Gather all members of specified GitLab groups and projects and their access levels. + + Ref: https://docs.gitlab.com/api/members/ +""" + +import requests + +BASE_URL = "https://gitlab.com/api/v4" +PRIVATE_TOKEN = "your_access_token" +GROUP_IDS = ["group_id_1", "group_id_2"] # Add your group IDs here +PROJECT_IDS = ["project_id_1", "project_id_2"] # Add your project IDs here +TIMEOUT = 30 + +HEADERS = {"PRIVATE-TOKEN": PRIVATE_TOKEN} + + +def get_members(url, name): + response = requests.get(url, headers=HEADERS, timeout=TIMEOUT) + if response.status_code == 200: + members = response.json() + print(f"\n{name} Members:") + for member in members: + print( + f"Username: {member['username']}, Access Level: {member['access_level']}" + ) + else: + print( + f"Failed to fetch members for {name}: {response.status_code}, {response.text}" + ) + + +if __name__ == "__main__": + access_levels = """Access Level Roles: + 0 : No access + 5 : Minimal access + 10 : Guest + 15 : Planner + 20 : Reporter + 30 : Developer + 40 : Maintainer + 50 : Owner + 60 : Admin + """ + print(access_levels) + + for group_id in GROUP_IDS: + group_url = f"{BASE_URL}/groups/{group_id}/members" + get_members(group_url, f"Group {group_id}") + + for project_id in PROJECT_IDS: + project_url = f"{BASE_URL}/projects/{project_id}/members" + get_members(project_url, f"Project {project_id}") |