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
@@ -333,7 +333,7 @@ registerPage('api-keys', {
|
||||
google_api: 'Google / Gemini', aws_access_key: 'AWS Access Key',
|
||||
github_pat: 'GitHub PAT', github_oauth: 'GitHub OAuth', gitlab_pat: 'GitLab PAT',
|
||||
huggingface: 'HuggingFace', stripe_live: 'Stripe Live', stripe_test: 'Stripe Test',
|
||||
sendgrid: 'SendGrid', slack: 'Slack'
|
||||
sendgrid: 'SendGrid', slack: 'Slack', krea_ai: 'Krea AI'
|
||||
};
|
||||
|
||||
var typeIcons = {
|
||||
@@ -342,7 +342,7 @@ registerPage('api-keys', {
|
||||
google_api: '🔵', aws_access_key: '🟡',
|
||||
github_pat: '⚫', github_oauth: '⚫', gitlab_pat: '🟤',
|
||||
huggingface: '🤗', stripe_live: '💳', stripe_test: '💳',
|
||||
sendgrid: '📧', slack: '💬'
|
||||
sendgrid: '📧', slack: '💬', krea_ai: '🎨'
|
||||
};
|
||||
|
||||
function renderSummary(summary) {
|
||||
@@ -673,29 +673,45 @@ registerPage('api-keys', {
|
||||
} catch(e) { el.style.display = 'none'; }
|
||||
}
|
||||
|
||||
function formatScanProgress(s) {
|
||||
var parts = [];
|
||||
if (s.phase) parts.push(s.phase);
|
||||
if (s.total > 0) parts.push(s.current + '/' + s.total);
|
||||
if (s.detail && s.detail !== s.phase) {
|
||||
var d = s.detail.length > 60 ? s.detail.substring(0, 57) + '…' : s.detail;
|
||||
parts.push(d);
|
||||
}
|
||||
if (s.keysFound > 0) parts.push('🔑 ' + s.keysFound + ' gefunden');
|
||||
return parts.join(' · ');
|
||||
}
|
||||
|
||||
async function updateScanStatus() {
|
||||
try {
|
||||
var s = await apiScanStatus();
|
||||
if (s.running) {
|
||||
scanStatusEl.textContent = '⏳ Scan läuft…';
|
||||
var progressText = formatScanProgress(s);
|
||||
scanStatusEl.innerHTML = '<i class="fa fa-spinner fa-spin"></i> ' + (progressText || 'Scan läuft…');
|
||||
setScanButtonsDisabled(true);
|
||||
if (!pollTimer) {
|
||||
pollTimer = setInterval(async function() {
|
||||
var st = await apiScanStatus();
|
||||
await loadScannedKeys();
|
||||
if (!st.running) {
|
||||
if (st.running) {
|
||||
var pt = formatScanProgress(st);
|
||||
scanStatusEl.innerHTML = '<i class="fa fa-spinner fa-spin"></i> ' + (pt || 'Scan läuft…');
|
||||
} else {
|
||||
clearInterval(pollTimer);
|
||||
pollTimer = null;
|
||||
resetScanButtons();
|
||||
scanStatusEl.textContent = st.lastResult ? '✅ ' + st.lastResult : '';
|
||||
await loadScannedKeys();
|
||||
scanStatusEl.innerHTML = st.lastResult ? '✅ ' + st.lastResult : '';
|
||||
}
|
||||
}, 3000);
|
||||
}, 1500);
|
||||
}
|
||||
} else {
|
||||
resetScanButtons();
|
||||
if (s.lastResult) {
|
||||
var timeStr = s.lastRun ? new Date(s.lastRun).toLocaleString() + ' – ' : '';
|
||||
scanStatusEl.textContent = timeStr + s.lastResult;
|
||||
scanStatusEl.innerHTML = timeStr + s.lastResult;
|
||||
}
|
||||
}
|
||||
} catch (err) { /* ignore */ }
|
||||
|
||||
Reference in new issue
Block a user