获取有效用户项目及权限信息
python3 getGitlabUserPriMsg.py
#!/usr/bin/python3 import requests import json from datetime import datetime, timedelta # GitLab API URL 和访问令牌 GITLAB_URL = "https://gitlab.umi.com/api/v4" PRIVATE_TOKEN = "X" HEADERS = {"PRIVATE-TOKEN": PRIVATE_TOKEN} def fetch_all_projects(): """获取所有项目列表(自动处理分页)""" page = 1 projects = [] while True: params = { "per_page": 100, "page": page } response = requests.get(f"{GITLAB_URL}/projects", headers=HEADERS, params=params) response.raise_for_status() current_page_projects = response.json() if not current_page_projects: break projects.extend(current_page_projects) if len(current_page_projects) < 100: break page += 1 return projects def fetch_project_members(project_id): """获取单个项目的所有成员信息(过滤禁用用户)""" members_url = f"{GITLAB_URL}/projects/{project_id}/members/all" response = requests.get(members_url, headers=HEADERS) if response.status_code == 403: print(f"项目 {project_id} 权限不足,跳过") return [] response.raise_for_status() # 过滤非激活状态用户 active_members = [ member for member in response.json() if member.get('state') == 'active' ] return active_members def format_output(project, members): """格式化输出结果(移除了有效期列)""" output = [] output.append(f"项目名称: {project['name']}") output.append(f"项目地址: {project['web_url']}") output.append(f"最后活跃: {project['last_activity_at']}") output.append("\n成员列表:") output.append(f"{'用户名':<20}{'姓名':<20}{'权限等级':<15}") output.append("-" * 55) for member in members: access_level = { 10: "Guest", 20: "Reporter", 30: "Developer", 40: "Maintainer", 50: "Owner" }.get(member['access_level'], "未知") output.append( f"{member['username']:<20}" f"{member['name']:<20}" f"{access_level:<15}" ) return "\n".join(output) def main(): try: # 获取所有项目 all_projects = fetch_all_projects() print(f"发现 {len(all_projects)} 个项目") # 清空旧报告文件 open("gitlab_permission_report.txt", "w").close() # 遍历处理每个项目 for project in all_projects: members = fetch_project_members(project['id']) # 过滤掉空成员列表的项目 if not members: continue report = format_output(project, members) # 输出到控制台并保存文件 print("\n" + "="*60) print(report) with open("gitlab_permission_report.txt", "a") as f: f.write(report + "\n\n") except requests.exceptions.HTTPError as e: print(f"API 请求失败: {e.response.status_code} {e.response.text}") except Exception as e: print(f"程序异常: {str(e)}") if __name__ == "__main__": main()输出结果