Die Statistik-Kacheln springen jetzt zu ihren Zielen. Organisationen und
Nutzer zur Organisations-Verwaltung, Aktive Lizenzen zum Lizenzen-Tab,
Vorfälle öffnen den Monitor in einem neuen Tab (im Portal gibt es keine
Vorfalls-Seite). Die Karte "Bald ablaufende Lizenzen" führt zum
Lizenzen-Tab, "Letzte Aktivität" zum Audit-Log. Hover-Optik mit
Gold-Rahmen und Chevron, bedienbar auch per Tastatur (Enter/Leertaste).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Drei Pakete auf Nutzerwunsch.
1. Design-Angleichung an das AegisSight-Design-System. Navy/Gold-Token
statt Slate/Amber, Light- UND Dark-Theme mit goldenem Schiebeschalter
oben rechts (Dark = Standard, Wahl persistiert), Barrierefreiheits-
Panel über js/a11y.js (identische Datei wie im Monitor), echtes Logo
mit heller Plakette in Kopfzeile und Login, Poppins/Inter-Typografie,
Radius 6/8 nach Styleguide. Automatisch erzeugte Light-Theme-
Überschreibungen für alle Badge-Pastelltöne.
2. Lucide-Icons (Inline-SVG, keine externen Quellen) für alle
Navigations-Tabs inkl. nachgeladenem Verbrauchsrechner, die
Anlege-Knöpfe, Abmelden und Speichern.
3. Verbrauchs-Bereich aufgeräumt. Reiter heißt jetzt Verbrauch,
Statistik in Kundensicht (Credits) und Interne Kosten (Einkauf, USD)
getrennt, Leiste heißt Kontingent-Auslastung, Sätze-Infozeile mit
Sprung zum Verbrauchsrechner, Altmodus-Felder (USD) und die
Verbrauchs-Korrektur liegen in einem eingeklappten Bereich
Erweitert mit Erklärtext. Der Rechner trägt einen deutlichen
Simulations-Hinweis. Lizenz verlängern nutzt ein eigenes Modal
statt des Browser-prompt().
Cache-Buster auf 20260725 gebumpt, alle Restfarben tokenisiert.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Service-Module (source_classifier, external_reputation) liegen jetzt in shared/services/, Endpoints unter /api/sources/classification/* sind hier statt im Monitor:
- classification/{stats,queue,bulk-classify,bulk-approve}
- {id}/classification/{approve,reject,reclassify}
- external-reputation/sync
modalSource erweitert um Klassifikations-Section (Politik, Medientyp, Reliability, state-affiliated, Land, 12 Alignment-Chips). Neuer Sub-Tab Klassifikation mit Review-Queue, Pending-Counter, Bulk-Actions. Auth via get_current_admin, Audit-Logging.
Begleit-Refactor: Monitor verliert die Klassifikations-UI/-Endpoints separat.
Backend
- routers/audit.py: GET /api/audit-log nimmt jetzt resource_id als Filter
(zusätzlich zu resource_type, action, admin_id, from_ts/to_ts).
Frontend
- dashboard.html: modalAudit (Modal) für die Audit-Spur einer Ressource.
- style.css: audit-entry Styles (action-Badge mit Farbcode pro Action-Typ,
Diff als <details>-Block mit JSON-Pre).
- sources.js:
- showSourceAudit(id, name) öffnet Modal, lädt /audit-log?resource_type=source&resource_id=...
- renderAuditEntries: pro Eintrag Action-Badge + Meta (ts/admin/ip) +
optional ausklappbarer Diff (before/after-JSON)
- formatDateTime Helper
- Audit-Button in der Aktionen-Spalte der Grundquellen-Tabelle
- Schema-Migration: ON DELETE SET NULL fuer incidents.created_by, magic_links.user_id,
network_analyses.created_by (behebt 500er beim User-Loeschen). Neue Spalte
licenses.unlimited_budget. Neue Tabellen portal_audit_log, portal_login_attempts.
- Audit-Log: alle CREATE/UPDATE/DELETE auf Org/User/Lizenz/Quelle + Login-Events
werden mit before/after-Diff in portal_audit_log geschrieben.
- Brute-Force-Schutz: 5 Fehlversuche pro IP+Username/15min -> 429 mit Retry-After.
- Token-Budget: expliziter Schalter unlimited_budget pro Lizenz. UI zeigt ehrlich
>100%-Verbrauch (kein Math.min mehr) und ungebremste Anzeige bei unlimited.
- Neuer Audit-Log Tab mit Filter (Aktion/Ressource/Admin/Zeitraum) und Pagination.
- Neuer Sub-Tab "Quellen-Health" mit Vorschlägen + Check-Ergebnissen
- API: GET /health, GET /suggestions, PUT /suggestions/{id}, POST /health/run
- Vorschläge annehmen/ablehnen mit Auto-Ausführung
- Badge-Styles für Health-Status und Prioritäten
- Umlaute in Source-Modal und Dashboard korrigiert
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>