/** * Datenschutz-Helfer fuer die Anzeige von Benutzerbezügen. * * E-Mail-Adressen sind personenbezogene Daten. In Kalender- und * Reservierungslisten sehen normale Mitglieder nur einen maskierten * Kuerzel statt der vollstaendigen Adresse; wer einen Username gesetzt * hat, erscheint unter diesem. Vollstaendige E-Mails sind der * Admin-Verwaltung vorbehalten. */ /** * Maskiert eine E-Mail: "max.mustermann@example.com" -> "m***@e***.com". * Fuer ungueltige/leere Eingaben wird ein neutraler Platzhalter * zurueckgegeben. */ export function maskEmail(email: string | null | undefined): string { if (!email) { return 'Unbekannt'; } const at = email.indexOf('@'); if (at <= 0 || at === email.length - 1) { return 'Unbekannt'; } const local = email.slice(0, 1); const domain = email.slice(at + 1); const lastDot = domain.lastIndexOf('.'); const domainMasked = lastDot > 0 ? `${domain.slice(0, 1)}***${domain.slice(lastDot)}` : `${domain.slice(0, 1)}***`; return `${local}***@${domainMasked}`; } /** Anzeigename: Username bevorzugt, sonst maskierte E-Mail. */ export function displayName( username: string | null | undefined, email: string | null | undefined, ): string { return username ?? maskEmail(email); }