aboutsummaryrefslogtreecommitdiff
path: root/applications/gitlab/users.py
diff options
context:
space:
mode:
Diffstat (limited to 'applications/gitlab/users.py')
-rw-r--r--applications/gitlab/users.py53
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}")