Multi-Provider Key Scanner + Checker (OpenAI, Google, 15 Key-Typen)
- KeyPatterns.cs: Zentrale Pattern-Klasse für 15 Key-Typen (Anthropic, OpenAI, Google, AWS, GitHub, GitLab, HuggingFace, Stripe, SendGrid, Slack) - OpenAiKeyChecker.cs: Prüft sk-proj/sk-svcacct/sk- Keys via /v1/models (Org, Modelle, RPM/TPM, Tier-Erkennung Free bis 5+) - GoogleKeyChecker.cs: Prüft AIza-Keys via Gemini /v1/models (Gemini-Modelle, Maps-Key-Erkennung) - KeyScannerService + GitHubEventScannerService: Dispatch nach Key-Typ - ApiKeysEndpoint: GET /scanned/summary + ?type= Filter - Frontend: 2-stufige UI (Typ-Übersicht → Keys pro Typ)
This commit is contained in:
1 parent
eb8844a4f1
commit
c8859a89d0
9 files changed
+536
-52
No files matched your search
@@ -29,6 +29,7 @@ public static class ApiKeysEndpoint
|
||||
app.MapPost("/api/admin/api-keys/scan", HandleScanTrigger);
|
||||
app.MapGet("/api/admin/api-keys/scan/status", HandleScanStatus);
|
||||
app.MapGet("/api/admin/api-keys/scanned", HandleGetScanned);
|
||||
app.MapGet("/api/admin/api-keys/scanned/summary", HandleGetScannedSummary);
|
||||
app.MapPost("/api/admin/api-keys/scanned/recheck-all", HandleRecheckAll);
|
||||
app.MapPost("/api/admin/api-keys/scanned/{id}/recheck", HandleRecheck);
|
||||
app.MapPost("/api/admin/api-keys/scanned/{id}/adopt", HandleAdopt);
|
||||
@@ -261,7 +262,11 @@ public static class ApiKeysEndpoint
|
||||
{
|
||||
if (!ctx.IsAdmin()) { ctx.Response.StatusCode = 403; return; }
|
||||
|
||||
var keys = await db.GetScannedKeys();
|
||||
var type = ctx.Request.Query["type"].FirstOrDefault();
|
||||
var keys = string.IsNullOrEmpty(type)
|
||||
? await db.GetScannedKeys()
|
||||
: await db.GetScannedKeysByType(type);
|
||||
|
||||
var result = keys.Select(k => new
|
||||
{
|
||||
k.ScannedKeyId,
|
||||
@@ -279,6 +284,14 @@ public static class ApiKeysEndpoint
|
||||
await ctx.Response.WriteAsJsonAsync(result);
|
||||
}
|
||||
|
||||
private static async Task HandleGetScannedSummary(HttpContext ctx, DatabaseService db)
|
||||
{
|
||||
if (!ctx.IsAdmin()) { ctx.Response.StatusCode = 403; return; }
|
||||
|
||||
var summary = await db.GetScannedKeysSummary();
|
||||
await ctx.Response.WriteAsJsonAsync(summary);
|
||||
}
|
||||
|
||||
private static async Task HandleRecheckAll(HttpContext ctx, DatabaseService db, KeyScannerService scanner)
|
||||
{
|
||||
if (!ctx.IsAdmin()) { ctx.Response.StatusCode = 403; return; }
|
||||
|
||||
Reference in new issue
Block a user