【Gitea】批量清理用户和仓库
·
项目搭建的Gitea因为权限设置问题,被机器人批量注册了一堆账户和仓库,但Gitea没有提供批量操作选项。不过它提供了RESTful接口来操作。
这篇文章提供了脚本和方法,但脚本只能保留单个用户,我修改了一下使其可以以列表方式保留多个用户:
https://blog.csdn.net/luoqinwen123/article/details/149537504
import os
import requests
# Gitea服务器 URL 和 API 访问 token
gitea_url = 'http://xxxx:3000'
api_token = '<你的Token>'
headers = {
'Authorization': f'token {api_token}'
}
# 需要保留的用户列表
keep_users = {
'RainyFucker',
'HashMap',
'admin',
'll',
'wyt',
'zyh',
'dudu',
'OraSkyC'
}
# 获取所有用户的 API
users_api = f'{gitea_url}/api/v1/admin/users'
def delete_user_repositories(username):
"""
获取并删除指定用户的所有仓库。
:param username: 用户名
"""
repos_api = f'{gitea_url}/api/v1/users/{username}/repos'
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}'
delete_response = requests.delete(delete_repo_api, headers=headers)
if delete_response.status_code == 204:
print(f'Repository {username}/{repo_name} deleted successfully.')
else:
print(
f'Failed to delete repository {username}/{repo_name}. '
f'Status code: {delete_response.status_code}, '
f'Response: {delete_response.text}'
)
else:
print(
f'Failed to fetch repositories for {username}. '
f'Status code: {response.status_code}, '
f'Response: {response.text}'
)
# 获取所有用户并删除不在保留列表中的用户及其仓库
response = requests.get(users_api, headers=headers)
if response.status_code == 200:
users = response.json()
for user in users:
username = user['username']
if username in keep_users:
print(f'User {username} is being kept.')
continue
print(f'Processing user: {username}')
# 先删除该用户的仓库
delete_user_repositories(username)
# 再删除用户
delete_user_api = f'{gitea_url}/api/v1/admin/users/{username}'
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}. '
f'Status code: {delete_response.status_code}, '
f'Response: {delete_response.text}'
)
else:
print(
f'Failed to fetch users. '
f'Status code: {response.status_code}, '
f'Response: {response.text}'
)
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)