/** * Magic Removal-Password Reveal-Email. * * Wird versendet wenn der User KÜNDIGT oder seinen ACCOUNT LÖSCHT — dann (und * nur dann) bekommt er die server-gehaltenen Removal-Passwörter, um die * gesperrten DNS-Profile von seinen Mac/Windows-Geräten zu entfernen. * * Im Normalbetrieb bleibt das Passwort serverseitig — der User sieht es nie * (Hard-Lock, gegen impulsives Abschalten). Siehe memory/mac-magic-profile-lock. * * Fire-and-forget: Fehler werden geloggt, nie geworfen. */ import { Resend } from "resend"; import type { MagicRemovalCredential } from "../db/devices"; export interface MagicRemovalEmailOpts { recipientEmail: string; /** Nickname für die Anrede (NIE firstName/email im Body außer Empfänger). */ recipientNickname?: string | null; credentials: MagicRemovalCredential[]; reason: "cancellation" | "account_deletion"; resendApiKey: string; } export async function sendMagicRemovalEmail( opts: MagicRemovalEmailOpts, ): Promise { if (!opts.resendApiKey) { console.warn("[magic-removal-email] resendApiKey not provided — skipping mail"); return; } if (opts.credentials.length === 0) return; const resend = new Resend(opts.resendApiKey); const greeting = opts.recipientNickname ? `Hallo ${opts.recipientNickname},` : "Hallo,"; const reasonLine = opts.reason === "account_deletion" ? "Du hast deinen ReBreak-Account gelöscht." : "Dein ReBreak-Abo wurde beendet."; const rows = opts.credentials .map((c) => { const label = c.hostname || c.model || "Computer"; return ` ${label} ${c.removalPassword} `; }) .join(""); const subject = "Dein Entfern-Passwort für den ReBreak-Schutz"; const html = ` ${subject}

ReBreak — Schutz entfernen

${greeting}

${reasonLine} Damit du den ReBreak-Schutz von deinen Geräten entfernen kannst, hier deine Entfern-Passwörter:

${rows}
So entfernst du den Schutz (Mac):
Systemeinstellungen → Allgemein → Geräteverwaltung → „ReBreak Schutz" → Entfernen → Passwort eingeben.

Bewahre diese Mail auf, bis du den Schutz entfernt hast. Das Passwort wird aus Sicherheitsgründen nur hier herausgegeben.

`.trim(); try { await resend.emails.send({ from: "ReBreak ", to: opts.recipientEmail, subject, html, }); } catch (err: any) { console.error("[magic-removal-email] Failed to send:", err?.message ?? err); } }