diff --git a/backend/src/services/stressfreiEmail.service.ts b/backend/src/services/stressfreiEmail.service.ts index abb0d57e..1d848b7f 100644 --- a/backend/src/services/stressfreiEmail.service.ts +++ b/backend/src/services/stressfreiEmail.service.ts @@ -198,16 +198,21 @@ export async function createEmail(data: CreateEmailData) { throw new Error(result.error || 'Fehler beim Anlegen der Mailbox'); } - // Passwort verbindlich am Postfach setzen. Beim Neu-Anlegen hat - // createEmailWithMailbox es zwar schon gesetzt (der folgende Call ist - // dann idempotent), ABER wenn die Adresse beim Provider bereits als - // reine Weiterleitung existierte, kehrt provisionEmailWithMailbox früh - // mit success zurück, ohne je ein Postfach-Passwort zu setzen. Ohne - // diesen expliziten Schritt läge im CRM ein verschlüsseltes Passwort, - // das der Provider gar nicht kennt → IMAP/SMTP-Login schlägt fehl. - // Deshalb: nach jedem Mailbox-Anlegen das generierte Passwort - // garantiert am Provider setzen, damit CRM und Provider übereinstimmen. - const pwResult = await updateMailboxPassword(localPart, password); + // Mailbox verbindlich aktivieren UND Passwort setzen. Beim Neu-Anlegen + // hat createEmailWithMailbox das schon getan (der folgende Call ist dann + // idempotent), ABER wenn die Adresse beim Provider bereits als reine + // Weiterleitung existierte, kehrt provisionEmailWithMailbox früh mit + // success zurück, ohne je die Mailbox zu aktivieren. Ohne diesen Schritt + // läge im CRM ein verschlüsseltes Passwort, das der Provider gar nicht + // kennt → IMAP/SMTP-Login schlägt fehl. + // + // WICHTIG (Pentest R130): hier MUSS enableMailboxForExistingEmail + // verwendet werden, nicht updateMailboxPassword. Letzteres setzt bei + // Plesk nur `-passwd`, lässt die Adresse aber auf `-mailbox false` + // stehen – die Mailbox wird also nie aktiviert und der Login scheitert + // trotz korrektem Passwort. enableMailboxForExisting setzt + // `-mailbox true -passwd ...` und deckt beide Fälle idempotent ab. + const pwResult = await enableMailboxForExistingEmail(localPart, password); if (!pwResult.success) { throw new Error( pwResult.error || 'Mailbox angelegt, aber Postfach-Passwort konnte nicht gesetzt werden', diff --git a/docs/todo.md b/docs/todo.md index 327d6b91..cce36db6 100644 --- a/docs/todo.md +++ b/docs/todo.md @@ -113,6 +113,11 @@ isolierte Instanz (keine Multi-Tenancy im Code), Provisioning + Abrechnung mit success zurück, ohne je ein Postfach-Passwort zu setzen – im CRM lag ein verschlüsseltes Passwort, das der Provider nicht kannte → IMAP/SMTP- Login schlug fehl. Jetzt stimmen CRM und Provider garantiert überein. + - **Nachtrag Pentest R130:** Erster Versuch (`updateMailboxPassword`) + setzte bei Plesk nur `-passwd`, ließ die Adresse aber auf + `-mailbox false` → Mailbox nie aktiviert, Login scheiterte weiter. + Jetzt `enableMailboxForExistingEmail` (`-mailbox true -passwd ...`), + deckt beide Fälle idempotent ab. - Tab-Leiste bei vielen Tabs: `flex-wrap` statt Overflow aus dem Rahmen. - Referrals: 4 neue Beziehungen + Bearbeiten-Stift pro Eintrag (s.u.).