diff --git a/src/agents/orchestrator.py b/src/agents/orchestrator.py index e2e9fd4..11f9033 100644 --- a/src/agents/orchestrator.py +++ b/src/agents/orchestrator.py @@ -294,7 +294,7 @@ async def _send_email_notifications_for_incident( continue subject, html = incident_notification_email( - username=prefs["username"], + username=prefs["email"].split("@")[0], incident_title=incident_title, notifications=filtered_notifications, dashboard_url=dashboard_url, diff --git a/src/routers/auth.py b/src/routers/auth.py index 9d1dee6..d61b625 100644 --- a/src/routers/auth.py +++ b/src/routers/auth.py @@ -96,7 +96,7 @@ async def request_magic_link( # E-Mail senden link = f"{MAGIC_LINK_BASE_URL}/?token={token}" - subject, html = magic_link_login_email(user["username"], code, link) + subject, html = magic_link_login_email(user["email"].split("@")[0], code, link) await send_email(email, subject, html) magic_link_limiter.record(email, ip) diff --git a/src/routers/feedback.py b/src/routers/feedback.py index 6b0cbf8..ca7d346 100644 --- a/src/routers/feedback.py +++ b/src/routers/feedback.py @@ -63,12 +63,12 @@ async def send_feedback( detail="E-Mail-Versand nicht verfuegbar.", ) - username = current_user["username"] email = current_user.get("email", "") + display_name = email.split("@")[0] if email else "Unbekannt" category_label = CATEGORY_LABELS.get(data.category, data.category) message_escaped = html.escape(data.message) - subject = f"[AegisSight Feedback] {category_label} von {username}" + subject = f"[AegisSight Feedback] {category_label} von {display_name}" html_body = f"""\
@@ -77,7 +77,7 @@ async def send_feedback(
- +
Kategorie:{category_label}
Nutzer:{html.escape(username)}
Nutzer:{html.escape(display_name)}
E-Mail:{html.escape(email) if email else "nicht hinterlegt"}

@@ -92,7 +92,7 @@ async def send_feedback( if email: msg["Reply-To"] = email - text_fallback = f"Feedback von {username} ({category_label}):\n\n{data.message}" + text_fallback = f"Feedback von {display_name} ({category_label}):\n\n{data.message}" msg.attach(MIMEText(text_fallback, "plain", "utf-8")) msg.attach(MIMEText(html_body, "html", "utf-8")) @@ -106,7 +106,7 @@ async def send_feedback( start_tls=SMTP_USE_TLS, ) _user_timestamps[user_id].append(now) - logger.info(f"Feedback von {username} ({category_label}) gesendet") + logger.info(f"Feedback von {display_name} ({category_label}) gesendet") except Exception as e: logger.error(f"Feedback-E-Mail fehlgeschlagen: {e}") raise HTTPException( diff --git a/src/routers/incidents.py b/src/routers/incidents.py index ee8dd7a..d4fd66f 100644 --- a/src/routers/incidents.py +++ b/src/routers/incidents.py @@ -55,14 +55,14 @@ async def _enrich_incident(db: aiosqlite.Connection, row: aiosqlite.Row) -> dict source_count = (await cursor.fetchone())["cnt"] cursor = await db.execute( - "SELECT username FROM users WHERE id = ?", + "SELECT email FROM users WHERE id = ?", (incident["created_by"],), ) user_row = await cursor.fetchone() incident["article_count"] = article_count incident["source_count"] = source_count - incident["created_by_username"] = user_row["username"] if user_row else "Unbekannt" + incident["created_by_username"] = user_row["email"] if user_row else "Unbekannt" return incident @@ -744,9 +744,9 @@ async def export_incident( incident = dict(row) # Ersteller-Name - cursor = await db.execute("SELECT username FROM users WHERE id = ?", (incident["created_by"],)) + cursor = await db.execute("SELECT email FROM users WHERE id = ?", (incident["created_by"],)) user_row = await cursor.fetchone() - creator = user_row["username"] if user_row else "Unbekannt" + creator = user_row["email"] if user_row else "Unbekannt" # Artikel cursor = await db.execute( diff --git a/src/static/js/app.js b/src/static/js/app.js index 53754dc..83e21de 100644 --- a/src/static/js/app.js +++ b/src/static/js/app.js @@ -430,8 +430,8 @@ const App = { try { const user = await API.getMe(); - this._currentUsername = user.username; - document.getElementById('header-user').textContent = user.username; + this._currentUsername = user.email; + document.getElementById('header-user').textContent = user.email; // Org-Name anzeigen const orgNameEl = document.getElementById('header-org-name'); @@ -668,14 +668,14 @@ const App = { // Ersteller anzeigen const creatorEl = document.getElementById('incident-creator'); if (creatorEl) { - creatorEl.textContent = incident.created_by_username || ''; + creatorEl.textContent = (incident.created_by_username || '').split('@')[0]; } // Delete-Button: nur Ersteller darf löschen const deleteBtn = document.getElementById('delete-incident-btn'); const isCreator = incident.created_by_username === this._currentUsername; deleteBtn.disabled = !isCreator; - deleteBtn.title = isCreator ? '' : `Nur ${incident.created_by_username} kann diese Lage löschen`; + deleteBtn.title = isCreator ? '' : `Nur ${(incident.created_by_username || '').split('@')[0]} kann diese Lage löschen`; // Zusammenfassung mit Quellenverzeichnis const summaryText = document.getElementById('summary-text'); diff --git a/src/static/js/components.js b/src/static/js/components.js index fb982b9..b94e09d 100644 --- a/src/static/js/components.js +++ b/src/static/js/components.js @@ -22,7 +22,7 @@ const UI = { const isRefreshing = App._refreshingIncidents && App._refreshingIncidents.has(incident.id); const dotClass = isRefreshing ? 'refreshing' : (incident.status === 'active' ? 'active' : 'archived'); const activeClass = isActive ? 'active' : ''; - const creator = incident.created_by_username || ''; + const creator = (incident.created_by_username || '').split('@')[0]; return `