"""HTML-E-Mail-Vorlagen für Magic Links, Einladungen und Benachrichtigungen."""
def magic_link_login_email(username: str, link: str) -> tuple[str, str]:
"""Erzeugt Login-E-Mail mit Magic Link.
Returns:
(subject, html_body)
"""
subject = f"AegisSight Monitor - Anmeldung"
html = f"""
AegisSight Monitor
Hallo {username},
Klicken Sie auf den Button, um sich anzumelden:
Oder kopieren Sie diesen Link in Ihren Browser:
{link}
Dieser Link ist 10 Minuten gültig. Falls Sie diese Anmeldung nicht angefordert haben, ignorieren Sie diese E-Mail.
"""
return subject, html
def incident_notification_email(
username: str,
incident_title: str,
notifications: list[dict],
dashboard_url: str,
incident_type: str = "adhoc",
) -> tuple[str, str]:
"""Erzeugt Benachrichtigungs-E-Mail für Lagen-Updates.
Args:
username: Empfaenger-Name
incident_title: Titel der Lage/Recherche
notifications: Liste von {"text": ..., "icon": ...} Dicts
dashboard_url: Link zum Dashboard
incident_type: "adhoc" oder "research"
Returns:
(subject, html_body)
"""
is_research = incident_type == "research"
type_label = "Recherche" if is_research else "Lagebild"
type_label_lower = "Recherche" if is_research else "Lage"
subject = f"AegisSight - {incident_title}"
icon_map = {
"success": "✓",
"warning": "⚠",
"error": "✗",
"info": "ⓘ",
}
color_map = {
"success": "#22c55e",
"warning": "#f0b429",
"error": "#ef4444",
"info": "#94a3b8",
}
items_html = ""
for n in notifications:
icon = icon_map.get(n.get("icon", "info"), "ⓘ")
color = color_map.get(n.get("icon", "info"), "#94a3b8")
text = n.get("text", "")
items_html += f"""
{icon}
{text}
"""
html = f"""
AegisSight Monitor
{type_label} - Benachrichtigung
Hallo {username},
es gibt Neuigkeiten zur {type_label_lower} {incident_title}:
{items_html}
Diese Benachrichtigung kann in den Einstellungen im Dashboard deaktiviert werden.
"""
return subject, html