From 5b85bea4ebaa7fdeeab28e84ddd9978e78463d93 Mon Sep 17 00:00:00 2001 From: duffyduck Date: Fri, 27 Mar 2026 12:03:20 +0100 Subject: [PATCH] =?UTF-8?q?email=20datenschztz=20erst=20alles=20best=C3=A4?= =?UTF-8?q?tigt=20bei=20allen=20hebeln?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controllers/consent-public.controller.ts | 62 +++++++++++++++++++ backend/todo.md | 7 ++- frontend/src/pages/public/ConsentPage.tsx | 2 +- 3 files changed, 68 insertions(+), 3 deletions(-) diff --git a/backend/src/controllers/consent-public.controller.ts b/backend/src/controllers/consent-public.controller.ts index 05cedcc1..7878a03e 100644 --- a/backend/src/controllers/consent-public.controller.ts +++ b/backend/src/controllers/consent-public.controller.ts @@ -3,6 +3,8 @@ import * as consentPublicService from '../services/consent-public.service.js'; import { createAuditLog } from '../services/audit.service.js'; import { CONSENT_TYPE_LABELS } from '../services/consent.service.js'; import { ConsentType } from '@prisma/client'; +import { sendEmail } from '../services/smtpService.js'; +import { getSystemEmailCredentials } from '../services/emailProvider/emailProviderService.js'; /** * Öffentliche Consent-Seite: Kundendaten + Datenschutztext + Status @@ -76,6 +78,66 @@ export async function grantAllConsents(req: Request, res: Response) { } } + // Bestätigungs-E-Mail senden + if (customer?.customer.email) { + try { + const systemEmail = await getSystemEmailCredentials(); + if (systemEmail) { + const consentList = Object.values(ConsentType) + .map(t => CONSENT_TYPE_LABELS[t]?.label || t) + .map(label => `
  • ${label}
  • `) + .join(''); + + const confirmationHtml = ` +
    +

    Bestätigung Ihrer Einwilligungen

    +

    Sehr geehrte(r) ${customer.customer.firstName} ${customer.customer.lastName},

    +

    + vielen Dank! Hiermit bestätigen wir, dass Sie am ${new Date().toLocaleDateString('de-DE', { day: '2-digit', month: '2-digit', year: 'numeric' })} + folgenden Einwilligungen zugestimmt haben: +

    + +

    + Sie können Ihre Einwilligungen jederzeit über Ihr Kundenportal widerrufen. +

    +
    +

    + Hacker-Net Telekommunikation – Stefan Hacker
    + Am Wunderburgpark 5b, 26135 Oldenburg
    + info@hacker-net.de +

    +
    + `; + + await sendEmail( + { + host: systemEmail.smtpServer, + port: systemEmail.smtpPort, + user: systemEmail.emailAddress, + password: systemEmail.password, + encryption: systemEmail.smtpEncryption, + allowSelfSignedCerts: systemEmail.allowSelfSignedCerts, + }, + systemEmail.emailAddress, + { + to: customer.customer.email, + subject: 'Bestätigung Ihrer Datenschutz-Einwilligungen', + html: confirmationHtml, + }, + { + context: 'consent-confirmation', + customerId: customer.customer.id, + } + ); + } + } catch (emailError) { + // E-Mail-Fehler soll den Consent-Grant nicht blockieren + console.error('Bestätigungs-E-Mail konnte nicht gesendet werden:', emailError); + } + } + res.json({ success: true, data: results }); } catch (error: any) { console.error('Fehler beim Erteilen der Einwilligungen:', error); diff --git a/backend/todo.md b/backend/todo.md index 588adf77..062fdfe3 100644 --- a/backend/todo.md +++ b/backend/todo.md @@ -48,9 +48,12 @@ Geburtstagskalender, und Geburtgsgruß als Modal beim ersten Login an dem Tag, Sollte der Login bis n7 btage nach Geburtsag sein dann Glückwunsch nachträglich # +#erledigt +Bei der Email datenschutzerklärung erst wenn alle hebel drin sind, auf einen bestätigungsbutton klicken, um sicherzustellen, das alle heben drin sind. +Danch bestätigen, nochmals eine Bestätigiguns emails enden. + +Denn jetzt kann der Kudne auch nur einen Haken auslassen, das würd uns aber nichts bringen. -Email datenschutzerklärung erst wenn alle hebel drin sind, auf einen bestätigungsbutton klicken, um sicherzustellen, das alle heben drin sind. -Danch bestätigen, nochmals eine Bestätigiguns emails enden # Haben wir bei den Vertragen (also alle) kein Dokumentfeld zum Upload von, Auftragsformular, Lieferbestätigung, Vertragsunterlagen. diff --git a/frontend/src/pages/public/ConsentPage.tsx b/frontend/src/pages/public/ConsentPage.tsx index 768a338f..ed4d5654 100644 --- a/frontend/src/pages/public/ConsentPage.tsx +++ b/frontend/src/pages/public/ConsentPage.tsx @@ -127,7 +127,7 @@ export default function ConsentPage() { Vielen Dank!

    - Ihre Einwilligungen wurden erfolgreich gespeichert. + Ihre Einwilligungen wurden erfolgreich gespeichert. Sie erhalten in Kürze eine Bestätigung per E-Mail.