Initial commit: Kalendartool (Next.js, Prisma, Docker)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
40
lib/privacy/display.ts
Normal file
40
lib/privacy/display.ts
Normal file
@@ -0,0 +1,40 @@
|
||||
/**
|
||||
* 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);
|
||||
}
|
||||
Reference in New Issue
Block a user