feat: DB-Explorer, Scanner-KeyTypes-Setting, Stripe-Checker, Anthropic-Auth-Fix, Progress-Tracking

Backend:
- Neuer Database Explorer Endpoint (GET /api/admin/db/tables, GET /api/admin/db/tables/{name})
- DatabaseService: public GetConnection() Methode
- StripeKeyChecker: 2-Schritt-Check (/v1/balance + /v1/account), erkennt Live/Test, Balance, Account-Details
- AnthropicKeyChecker: Auth-Header fix (x-api-key für API-Keys, Bearer für OAuth), 400-Handler für credit balance
- KeyPatterns: Stripe einkommentiert, Krea AI Pattern, AllTypes-Array, MinLength 4
- ServerSettingsService: string_array Typ (Get/SetStringArray), ScannerKeyTypes Setting mit Checkbox-Optionen
- ServerSettingsEndpoint: string_array Speichern (Array/CSV)
- KeyScannerService: GetActiveSearchPatterns() filtert nach ScannerKeyTypes, Progress-Tracking
- GitHubEventScannerService: CheckNewKeys nur für aktuelle Poll-Keys (statt alle unchecked), klarere Log-Meldung

Frontend:
- Database Explorer Page: Tabellenliste mit Klick -> Tabelleninhalt, Pagination, sticky Header
- Server Settings: Checkbox-Gruppe für string_array (Alle/Keine Buttons)
- API Keys: adoptedApiKeyId Fix (leerer String == null)
- Dashboard: DB-Explorer Link für Admins
- Scan-Progress: Live-Fortschritt mit Phase/Detail/Counter
This commit is contained in:
Meleki committed 2026-03-14 16:19:13 +01:00
1 parent 3cd35ebbfa
commit e61f3ef082
15 files changed
+642 -33

No files matched your search

+17
View File
@@ -86,6 +86,23 @@ public static class ServerSettingsEndpoint
case "bool":
settings.SetBool(def.Key, prop.ValueKind == JsonValueKind.True);
break;
case "string_array":
if (prop.ValueKind == JsonValueKind.Array)
{
var arr = new List<string>();
foreach (var el in prop.EnumerateArray())
{
var s = el.GetString();
if (!string.IsNullOrWhiteSpace(s)) arr.Add(s);
}
settings.SetStringArray(def.Key, arr.ToArray());
}
else if (prop.ValueKind == JsonValueKind.String)
{
// Fallback: CSV-String
settings.Set(def.Key, prop.GetString() ?? "");
}
break;
}
}