E-Mail-Compose: Vertragsdokumente anhängen + Kundendaten einfügen
Zwei neue Buttons im Compose-Modal (nur sichtbar bei Vertrag- Kontext): - Vertragsdokumente: listet alle am Vertrag gespeicherten ContractDocuments gruppiert nach documentType. Auswahl → Token-Download via fileUrl → base64 → Anhang. - Kundendaten einfügen: zeigt Sections nur wenn Daten vorhanden (Customer, Lieferadresse, ggf. Rechnungsadresse, Vertrag, Bank, Ausweis). Bei Bank/Ausweis zusätzlich Sub-Checkbox "als PDF anhängen" wenn documentPath vorhanden. Text-Blöcke ans Body- Ende, PDFs in attachments[]. 25-MB-Limit beidseitig geprüft. Helpers in composeAttachmentHelpers.ts: - serverFileToAttachment(path, filename) für Token-URL→Blob→base64 - totalAttachmentBytes mit ~33% base64-Overhead - sprechende Dateinamen via bankCardAttachmentName / identityDocAttachmentName Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -97,6 +97,31 @@ isolierte Instanz (keine Multi-Tenancy im Code), Provisioning + Abrechnung
|
||||
|
||||
## ✅ Erledigt
|
||||
|
||||
- [x] **🆕 E-Mail-Compose: Vertragsdokumente anhängen + Kundendaten einfügen**
|
||||
- Im Compose-Modal (nur wenn Vertrag-Kontext) zwei neue Buttons neben
|
||||
"Datei anhängen":
|
||||
- **Vertragsdokumente**: listet alle am Vertrag gespeicherten Dokumente
|
||||
gruppiert nach `documentType`. Auswahl → Server-Download via
|
||||
`fileUrl` (Token-Auth, Per-File-Ownership-Check greift) → base64 →
|
||||
direkt in die Anhang-Liste. Respektiert das 25-MB-Gesamtlimit.
|
||||
- **Kundendaten einfügen**: zeigt nur Sections die tatsächlich Daten
|
||||
haben (Customer, Lieferadresse, ggf. Rechnungsadresse, Vertrag,
|
||||
Bank, Ausweis). Pro Section Checkbox + Preview. Bei Bank +
|
||||
Ausweis zusätzlich Sub-Checkbox "als PDF anhängen", wenn ein
|
||||
`documentPath` vorhanden ist.
|
||||
- Beim Bestätigen werden die Text-Blöcke an das Body-Ende gehängt
|
||||
(mit `\n\n`-Separator), Anhänge per `serverFileToAttachment` aus
|
||||
`composeAttachmentHelpers.ts` gezogen. Anhang-Limit (25 MB gesamt)
|
||||
wird beidseitig geprüft, drüberlaufende Dateien werden mit Toast
|
||||
übersprungen statt silent weggeschluckt.
|
||||
- Helpers (`composeAttachmentHelpers.ts`):
|
||||
- `serverFileToAttachment(path, filename)` – fetch via Token-URL
|
||||
→ Blob → base64 → `EmailAttachment`.
|
||||
- `totalAttachmentBytes` – Größen-Check unter Berücksichtigung der
|
||||
~33 % base64-Overhead.
|
||||
- `bankCardAttachmentName` / `identityDocAttachmentName` –
|
||||
sprechende Dateinamen für den Empfänger.
|
||||
|
||||
- [x] **🔒 Pentest R95 – Portal-Username (Manual-Modus) härten**
|
||||
- R95.1 (MEDIUM): `foo\r\nBcc:evil@x.de` → Header-Injection-Vektor
|
||||
sobald der Wert in Mail-Templates / PDF-Footer landet.
|
||||
|
||||
Reference in New Issue
Block a user