68 lines
3.0 KiB
Python
68 lines
3.0 KiB
Python
import requests
|
||
# 脚本功能:删除Gitea中非法创建的用户,只保留指定用户
|
||
# Gitea服务器 URL 和 API 访问 token
|
||
gitea_url = 'http://10.10.14.176:3000' # Gitea 服务器的地址
|
||
api_token = '703a2bbe4d4ac3ffdb00a2d53a93eeb910e5b84e' # 用于认证的 API Token
|
||
# 令牌获取办法:
|
||
# https://blog.csdn.net/luoqinwen123/article/details/149537504
|
||
|
||
# 获取所有用户的API请求
|
||
users_api = f'{gitea_url}/api/v1/admin/users' # 获取所有用户的 API URL
|
||
headers = {
|
||
'Authorization': f'token {api_token}' # 设置认证头,使用 API Token
|
||
}
|
||
|
||
|
||
# 删除指定用户的仓库
|
||
def delete_user_repositories(username):
|
||
"""
|
||
获取并删除指定用户的所有仓库。
|
||
:param username: 用户名
|
||
"""
|
||
# 获取用户的仓库
|
||
repos_api = f'{gitea_url}/api/v1/users/{username}/repos' # 用户仓库 API URL
|
||
response = requests.get(repos_api, headers=headers)
|
||
|
||
if response.status_code == 200:
|
||
# 如果请求成功,遍历该用户的所有仓库
|
||
repos = response.json()
|
||
for repo in repos:
|
||
repo_name = repo['name'] # 获取仓库的名字
|
||
# 删除仓库
|
||
delete_repo_api = f'{gitea_url}/api/v1/repos/{username}/{repo_name}' # 删除仓库的 API URL
|
||
delete_response = requests.delete(delete_repo_api, headers=headers)
|
||
if delete_response.status_code == 204:
|
||
print(f'Repository {repo_name} deleted successfully.')
|
||
else:
|
||
print(f'Failed to delete repository {repo_name}.') # 删除仓库失败
|
||
else:
|
||
print(f'Failed to fetch repositories for {username}. Status code:', response.status_code) # 请求仓库失败
|
||
|
||
|
||
# 获取所有用户并删除除 'clint' 外的用户及其仓库
|
||
response = requests.get(users_api, headers=headers) # 获取所有用户
|
||
|
||
if response.status_code == 200:
|
||
users = response.json() # 将响应的 JSON 数据转换为 Python 对象
|
||
for user in users:
|
||
username = user['username'] # 获取用户名
|
||
"""
|
||
huanghai
|
||
chengminglong
|
||
wubin
|
||
"""
|
||
if username not in ['huanghai', 'chengminglong', 'wubin']: # 保留 'huanghai','chengminglong','wubin' 用户,其他用户删除
|
||
print(f'Processing user: {username}')
|
||
# 先删除该用户的仓库
|
||
delete_user_repositories(username) # 删除仓库
|
||
# 然后删除用户
|
||
delete_user_api = f'{gitea_url}/api/v1/admin/users/{username}' # 删除用户的 API URL
|
||
delete_response = requests.delete(delete_user_api, headers=headers)
|
||
if delete_response.status_code == 204:
|
||
print(f'User {username} deleted successfully.')
|
||
else:
|
||
print(f'Failed to delete user {username}.') # 删除用户失败
|
||
else:
|
||
print(f'User {username} is being kept.') # 'clint' 用户被保留
|
||
else:
|
||
print('Failed to fetch users. Status code:', response.status_code) # 获取用户失败 |