fix(stressfrei): sync-forwarding sichtbar + Passwort-Push + Toast-Meldungen
Drei Verbesserungen am gestrigen Sync-Feature:
1. Bug-Fix: isProvisioned wurde nie auf true gesetzt
`createEmail` mit `provisionAtProvider: true` hat das Flag
`isProvisioned` nie gesetzt → blieb auf @default(false). Damit
blieb der Refresh-Button in der UI unsichtbar (Bedingung
`emailItem.isProvisioned`). Jetzt:
- createEmail setzt isProvisioned + provisionedAt korrekt
- Self-Healing: syncForwardingForEmail setzt das Flag nachträglich
auf true sobald der Provider-Aufruf erfolgreich war (Backfill
für historisch falsch markierte Einträge)
- UI-Sichtbarkeit: Bedingung entfernt – der Button erscheint jetzt
immer; ein Klick auf eine nicht-provisionierte Adresse liefert
eine sprechende Fehlermeldung statt stiller Verstecken
2. Passwort-Push bei hasMailbox: true
Bisher wurden nur die Forwards aktualisiert. Jetzt entschlüsselt
syncForwardingForEmail bei Mailbox-Adressen zusätzlich das im CRM
gespeicherte Passwort und setzt es am Provider neu – Self-Healing
für IMAP/SMTP-Logins falls jemand im Plesk-UI manuell ein anderes
Passwort gesetzt hat. Response enthält `passwordReset: true` als
Marker.
3. react-hot-toast statt alert()
Erfolgs-Toast listet die neu gesetzten Forward-Targets + Hinweis
ob Passwort-Reset durchgeführt wurde. Fehler-Toast zeigt die
Backend-Fehlermeldung (z.B. „E-Mail-Adresse beim Provider nicht
gefunden – wurde sie dort gelöscht?").
Audit-Log-Label enthält jetzt sowohl Forwards als auch Passwort-Reset-
Marker, damit der Vorgang im AuditLog nachvollziehbar bleibt.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
+21
-8
@@ -97,16 +97,29 @@ isolierte Instanz (keine Multi-Tenancy im Code), Provisioning + Abrechnung
|
||||
|
||||
## ✅ Erledigt
|
||||
|
||||
- [x] **🔁 Stressfrei-Adressen: Weiterleitungen manuell synchronisieren**
|
||||
- Refresh-Icon-Button in der Action-Reihe jeder provisionierten
|
||||
Stressfrei-Adresse (Tooltip erklärt: „ersetzt die Forwards am Provider
|
||||
durch Kunden-Stamm-E-Mail + Service-Adresse"). Use-Case: nach
|
||||
Änderung der Stamm-E-Mail eines Kunden, oder nach Wechsel der
|
||||
- [x] **🔁 Stressfrei-Adressen: Weiterleitungen + Passwort manuell synchronisieren**
|
||||
- Refresh-Icon-Button in der Action-Reihe jeder Stressfrei-Adresse
|
||||
(Tooltip erklärt: „ersetzt die Forwards am Provider durch
|
||||
Kunden-Stamm-E-Mail + Service-Adresse"). Use-Case: nach Änderung der
|
||||
Stamm-E-Mail eines Kunden, oder nach Wechsel der
|
||||
`defaultForwardEmail` in den Provider-Settings.
|
||||
- Backend nutzt das bestehende Plesk `updateForwardTargets`
|
||||
(`set:email1,email2` → ersetzt komplett, idempotent).
|
||||
- **Bei `hasMailbox: true`** wird zusätzlich das im CRM verschlüsselt
|
||||
hinterlegte Mailbox-Passwort am Provider neu gesetzt. Self-Healing
|
||||
für den Fall, dass jemand im Plesk-UI manuell ein anderes Passwort
|
||||
gesetzt hat und IMAP/SMTP im CRM nicht mehr passt.
|
||||
- Backend nutzt Plesk's `updateForwardTargets` (`set:email1,email2`
|
||||
→ ersetzt komplett, idempotent) + bei Mailbox auch
|
||||
`updateMailboxPassword` (Plesk-Passwort-Update).
|
||||
- Endpoint: `POST /api/stressfrei-emails/:id/sync-forwarding`,
|
||||
`customers:update`-Permission, Audit-Log mit Forward-Targets.
|
||||
`customers:update`-Permission, Audit-Log mit Forward-Targets +
|
||||
Passwort-Reset-Marker.
|
||||
- Self-Healing: `isProvisioned`-Flag wird bei erfolgreichem
|
||||
Provider-Aufruf automatisch auf `true` korrigiert (historischer Bug:
|
||||
Flag wurde beim `createEmail` mit `provisionAtProvider: true` nie
|
||||
gesetzt – jetzt behoben + Backfill via Sync).
|
||||
- Erfolgs-/Fehler-Meldungen via `react-hot-toast` (statt `alert()`)
|
||||
mit Liste der gesetzten Forward-Targets + Hinweis ob Passwort-Reset
|
||||
durchgeführt wurde.
|
||||
- In der Kundenakte (Stammdaten → Kontakt → E-Mail) externes
|
||||
Link-Icon, das in neuem Tab direkt den Stressfrei-Tab des Kunden
|
||||
öffnet – sichtbar nur wenn Stressfrei-Adressen vorhanden sind.
|
||||
|
||||
Reference in New Issue
Block a user