项目搭建的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}'
    )
Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐