audit-labs/audit-tools

A collection of scripts, queries, and other goodies you can use in an audit. audit automation compliance evidence scripts

Commit 8183fc4e27

8183fc4e27b121373cb6834346500b195020cfdd

parent: 74f4198ccf

Unsigned

cmc <hello@cleberg.net> · 2025-05-07 00:58 UTC

add gitlab repositories.py script

Layout: unified · split

applications/gitlab/README.org +19 −1
@@ -59,7 +59,7 @@ python ./branch_protections.py
59 59
60* =passwords.py= 60* =passwords.py=
61 61
62\*This script does not apply to GitLab.com. This is for self-hosted instances only.*\ 62*This script does not apply to GitLab.com. This is for self-hosted instances only.*
63 63
64#+begin_src sh 64#+begin_src sh
65python ./passwords.py 65python ./passwords.py
@@ -82,6 +82,24 @@ Group: 105300140
82 2025-04-08T03:33:17.055Z : Action: member_created, Member: 128029250, Author: 24608590 82 2025-04-08T03:33:17.055Z : Action: member_created, Member: 128029250, Author: 24608590
83#+end_src 83#+end_src
84 84
85* =repositories.py=
86
87#+begin_src shell
88python ./repositories.py
89#+end_src
90
91#+begin_src text
92# User ID Example
93Projects under ID: ccleberg:
94- audit-tools (ID: 68757698)
95- cleberg.net (ID: 68701468)
96
97# Group ID Example
98Projects under ID: phryq:
99- Yoshi Cli (ID: 68757750)
100- pages-demo (ID: 68757186)
101#+end_src
102
85* =users.py= 103* =users.py=
86 104
87#+begin_src sh 105#+begin_src sh
applications/gitlab/repositories.py added +43
@@ -0,0 +1,43 @@
1"""
2List all repositories (projects) for a user or organization in GitLab.
3"""
4
5import requests
6
7BASE_URL = "https://gitlab.com/api/v4"
8PRIVATE_TOKEN = "your_access_token"
9USER_ID = "your_user_or_group_id"
10TIMEOUT = 30
11
12URL = f"{BASE_URL}/groups/{USER_ID}/projects" # Group URL
13# URL = f"{BASE_URL}/users/{USER_ID}/projects" # User URL
14HEADERS = {"PRIVATE-TOKEN": PRIVATE_TOKEN}
15
16
17def list_projects(user_or_group_id):
18 PER_PAGE = 100
19 page = 1
20 projects = []
21
22 while True:
23 response = requests.get(URL, headers=HEADERS, timeout=TIMEOUT, params={"page": page, "per_page": PER_PAGE})
24
25 if response.status_code == 200:
26 current_projects = response.json()
27 if not current_projects:
28 break
29 projects.extend(current_projects)
30 page += 1
31 else:
32 print(f"Failed to retrieve projects: {response.status_code} - {response.text}")
33 break
34
35 if projects:
36 print(f"Projects under ID: {user_or_group_id}:")
37 for project in projects:
38 print(f"- {project['name']} (ID: {project['id']})")
39 else:
40 print(f"No projects found for ID: {user_or_group_id}.")
41
42if __name__ == "__main__":
43 list_projects(USER_ID)