using System;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text.Json;
using System.Threading.Tasks;
string giteaUrl = "https://<Gitea>/"; // 请替换为 Gitea 服务器地址
string apiToken = "<apiToken>"; // 请替换为你的 API Token
string[] NotDeleteUser = ["6589jk", "wh"];
HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("token", apiToken);
var usersResponse = await client.GetAsync($"{giteaUrl}/api/v1/admin/users");
if (usersResponse.IsSuccessStatusCode)
{
var usersJson = await usersResponse.Content.ReadAsStringAsync();
var users = JsonSerializer.Deserialize<User[]>(usersJson);
await Parallel.ForEachAsync(users, new ParallelOptions
{
MaxDegreeOfParallelism = 4 // 最多同时并发 4 个任务
}, async (user, _) =>
{
var username = user.username;
if (!NotDeleteUser.Contains(username))
{
//Console.WriteLine($"正在处理用户:{username}");
await DeleteUserRepositories(username);
var deleteUserResponse = await client.DeleteAsync($"{giteaUrl}/api/v1/admin/users/{username}");
if (deleteUserResponse.StatusCode == System.Net.HttpStatusCode.NoContent)
{
Console.WriteLine($"✅ 用户 {username} 删除成功。");
}
else
{
Console.WriteLine($"❌ 删除用户 {username} 失败。状态码:{deleteUserResponse.StatusCode}");
}
}
else
{
//Console.WriteLine($"保留用户:{username}");
}
});
}
else
{
Console.WriteLine($"❌ 获取用户列表失败。状态码:{usersResponse.StatusCode}");
}
async Task DeleteUserRepositories(string username)
{
var reposResponse = await client.GetAsync($"{giteaUrl}/api/v1/users/{username}/repos");
if (reposResponse.IsSuccessStatusCode)
{
var reposJson = await reposResponse.Content.ReadAsStringAsync();
var repos = JsonSerializer.Deserialize<Repository[]>(reposJson);
foreach (var repo in repos)
{
var repoName = repo.name;
var deleteRepoResponse = await client.DeleteAsync($"{giteaUrl}/api/v1/repos/{username}/{repoName}");
if (deleteRepoResponse.StatusCode == System.Net.HttpStatusCode.NoContent)
{
Console.WriteLine($"✅ 仓库 {repoName} 删除成功。");
}
else
{
Console.WriteLine($"❌ 删除仓库 {repoName} 失败。状态码:{deleteRepoResponse.StatusCode}");
}
}
}
else
{
Console.WriteLine($"❌ 获取用户 {username} 的仓库失败。状态码:{reposResponse.StatusCode}");
}
}
public class User
{
public string username { get; set; }
}
public class Repository
{
public string name { get; set; }
}
分类: 未分类
0 条评论