feat: Stripe-Key-Checker, Krea AI Pattern, Scan-Progress-Tracking
- StripeKeyChecker: 2-Schritt-Check (/v1/balance + /v1/account), Live/Test-Erkennung, Balance, Account-Details - KeyPatterns: Stripe-Patterns einkommentiert (sk_live_, sk_test_), Krea AI Pattern (UUID:Token), Mindest-Suchlänge 4 - KeyScannerService: Stripe-Check integriert, Auto-Check nach Scan entfernt (manuell separat), Progress-Tracking (Phase, Detail, Current/Total, KeysFound) - ApiKeysEndpoint: Stripe in HandleCheck/HandleCheckAll/HandleAdopt, Progress im Status-Endpoint - Frontend: Live-Fortschrittsanzeige mit Spinner, Phase, Query, Counter, Polling 1.5s, Krea AI in typeNames/typeIcons
This commit is contained in:
1 parent
122000487c
commit
3cd35ebbfa
6 files changed
+326
-14
No files matched your search
@@ -220,6 +220,27 @@ public static class ApiKeysEndpoint
|
||||
await ctx.Response.WriteAsJsonAsync(new { status = dbStatus, message = result.Message, plan = result.Message });
|
||||
break;
|
||||
}
|
||||
case "stripe":
|
||||
{
|
||||
var result = await StripeKeyChecker.CheckKeyAsync(httpFactory, existing.ApiKey);
|
||||
var dbStatus = result.Status == "ok" ? "valid" : result.Status;
|
||||
await db.UpdateApiKeyMeta(keyId, dbStatus, result.Message, null, null);
|
||||
await ctx.Response.WriteAsJsonAsync(new {
|
||||
status = dbStatus,
|
||||
message = result.Message,
|
||||
plan = result.IsLiveKey ? "Live" : "Test",
|
||||
result.AccountId,
|
||||
result.AccountName,
|
||||
result.AccountEmail,
|
||||
result.AccountCountry,
|
||||
result.Currency,
|
||||
result.BalanceAvailable,
|
||||
result.BalancePending,
|
||||
result.ChargesEnabled,
|
||||
result.PayoutsEnabled
|
||||
});
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
ctx.Response.StatusCode = 400;
|
||||
@@ -264,6 +285,14 @@ public static class ApiKeysEndpoint
|
||||
results.Add(new { key.KeyId, key.Name, status = dbStatus, Plan = result.Message, Usage5h = (double?)null, Usage7d = (double?)null });
|
||||
break;
|
||||
}
|
||||
case "stripe":
|
||||
{
|
||||
var result = await StripeKeyChecker.CheckKeyAsync(httpFactory, key.ApiKey);
|
||||
var dbStatus = result.Status == "ok" ? "valid" : result.Status;
|
||||
await db.UpdateApiKeyMeta(key.KeyId, dbStatus, result.Message, null, null);
|
||||
results.Add(new { key.KeyId, key.Name, status = dbStatus, Plan = result.IsLiveKey ? "Live" : "Test", Usage5h = (double?)null, Usage7d = (double?)null });
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -294,11 +323,17 @@ public static class ApiKeysEndpoint
|
||||
{
|
||||
if (!ctx.IsAdmin()) { ctx.Response.StatusCode = 403; return Task.CompletedTask; }
|
||||
|
||||
var progress = scanner.Progress;
|
||||
return ctx.Response.WriteAsJsonAsync(new
|
||||
{
|
||||
running = scanner.IsRunning,
|
||||
lastRun = scanner.LastRun,
|
||||
lastResult = scanner.LastResult
|
||||
lastResult = scanner.LastResult,
|
||||
phase = progress.Phase,
|
||||
detail = progress.Detail,
|
||||
current = progress.Current,
|
||||
total = progress.Total,
|
||||
keysFound = progress.KeysFound
|
||||
});
|
||||
}
|
||||
|
||||
@@ -426,6 +461,7 @@ public static class ApiKeysEndpoint
|
||||
string provider;
|
||||
if (keyType.StartsWith("openai")) provider = "openai";
|
||||
else if (keyType == "google_api") provider = "google";
|
||||
else if (keyType.StartsWith("stripe")) provider = "stripe";
|
||||
else provider = "anthropic";
|
||||
|
||||
var record = new ApiKeyRecord
|
||||
|
||||
Reference in new issue
Block a user