前景
服务器之前被爆硬盘了,然后没办法就重装了一下。今天用管理员登录了一下gitea才发现里面被机器人注册几千个账号。
几千个账号基本上每个账号都创建了一个空仓库,还有几个账户镜像了几个大仓库,每个仓库都有好几个G,终于找到了硬盘被塞爆的原因了,立马禁止了gitea的注册功能。
那么多的账户没办法手动删了,就用python写了一下。
先去查一下Gitea提供的Api文档提供的删除账户的接口:Delete a user。
1/admin/users/{username}
从接口文档中,我们需要一个用户名
,需要一个token
,和设置一个purge
参数为true
。
获取token
设置 -> 应用 -> 管理 Access Token -> 选择公开,选择所有权限,然后生成token记录下这个token。
获取用户名
在接口文档中并没有提供获取所有用户名的方法,所以你可以抓包网页去获取用户名,但这并不是一个好方法。
在Gitea admin 命令行中提供了一个命令可以获取gitea中的所有用户名。
我自己使用的gitea是用docker搭建的,所以我需要先进入到容器内才能使用gitea命令。
1# 查看gitea 的容器id2docker ps -a3
4# 进入gitea容器内部5docker exec -it [容器id] /bin/bash6
7# 默认不允许使用root用户执行gitea命令8# 参考这里: https://github.com/go-gitea/gitea/issues/254989
10# 切换用户11su git12
13gitea admin user list14
15# 打印结果如下,复制下来所有的用户信息6 collapsed lines
16# 4e87a7947659:/$ gitea admin user list17# ID Username Email IsActive IsAdmin 2FA18# 91 lidaspada8366 gil.b.er.t.s.che.ue.r.bq@gmail.com true false false19# 95 arleenleibius8 bridge.tland.ol.fi.y.y.a@gmail.com true false false20# 97 kamrivers68372 e.lou.i.se.crev.e.l.in.g.y@gmail.com true false false21# 98 julioctoman899 b.r.idg.e.tlan.dolfi.y.y.a@gmail.com true false false
脚本
需要修改下面三个高亮的位置。
1import requests2
3headers = {4 "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.1047.2 Safari/537.36 Edg/96.0.1047.2",5 "Authorization": "token [replace your token here]"6}7
8def delete_gitea_user(username):9 params = {10 "purge": True11 }12 url = "https://gitea.com/api/v1/admin/users/"13 response = requests.delete(url=url + username, headers=headers, params=params)14 if response.status_code == 204:15 print(f"{username},删除成功")12 collapsed lines
16 else:17 print(f"{response.status_code}, {username},删除失败")18
19if __name__ == '__main__':20 user_list = [21 "lidaspada8366",22 "arleenleibius8",23 "kamrivers68372",24 "julioctoman899",25 ]26 for name in user_list:27 delete_gitea_user(name)