Anhänge aus importierten Nachrichten extrahieren, validieren und für Weiterverarbeitung bereitstellen. - mimeparse/tolerant.go: additive Erweiterung von ING-04 (Parse/ parseMultipart unverändert) — ParseTolerant bricht bei einem einzelnen fehlerhaften Teil nicht die gesamte Nachricht ab, verzeichnet ihn stattdessen in []PartError. Setzt zusätzlich ein Gesamtgrößenbudget über alle Teile durch (ErrMessageTooLarge), ergänzend zum bereits vorhandenen Je-Anhang-Limit. - attachments/attachments.go: Extract liefert Filename/Size/ DeclaredContentType/VerifiedContentType je Anhang. VerifiedContentType kommt aus http.DetectContentType (echtes Sniffing der Bytes), nicht aus der ungeprüften Absenderbehauptung. Prüfungen (alle real durchgeführt, siehe mail/docs/IMP-02-PRUEFPROTOKOLL.md): 1. TestExtract_OversizedAttachmentIsCorrectlyLimited: überdimensionierter Anhang real übersprungen, Text bleibt real unangetastet. 2. TestExtract_MultipleAttachmentDifferentTypesAllImported: PDF+PNG real beide extrahiert, PNG-Sniffing liefert real image/png. 3. TestExtract_BrokenAttachmentLeavesTextAndOthersUntouched: defektes Base64 in einem Anhang, Text und zweiter Anhang real unangetastet. Kein Umbau: mimeparse Parse/parseMultipart (ING-04) unverändert. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HhgFcLS8tYMhDJpP74C6AQ
49 lines
2.7 KiB
Markdown
49 lines
2.7 KiB
Markdown
# IMP-02 – Prüfprotokoll: Anhangsverarbeitung bei Import
|
||
|
||
Voraussetzung ING-04, IMP-01 (beide Fertig).
|
||
|
||
## Umsetzung
|
||
|
||
- `mail/internal/mimeparse/tolerant.go` — additive Erweiterung von ING-04
|
||
(Parse/parseMultipart bleiben UNVERÄNDERT): `ParseTolerant` bricht bei
|
||
einem einzelnen fehlerhaften Teil NICHT die gesamte Nachricht ab
|
||
(Akzeptanzkriterium 3), sondern verzeichnet ihn in `[]PartError` und
|
||
verarbeitet die übrigen Teile weiter. Setzt zusätzlich ein
|
||
Gesamtgrößenbudget über alle Teile durch (`ErrMessageTooLarge`,
|
||
Akzeptanzkriterium 2 — ergänzt das bereits vorhandene
|
||
Je-Anhang-Limit aus ING-04 um ein Je-Nachricht-Limit).
|
||
- `mail/internal/attachments/attachments.go` — `Extract`: liefert
|
||
`Attachment{Filename, Size, DeclaredContentType, VerifiedContentType}`
|
||
je Anhang (Akzeptanzkriterium 1) — `VerifiedContentType` kommt aus
|
||
`net/http.DetectContentType` (echtes Sniffing der Bytes), nicht aus der
|
||
ungeprüft übernommenen Absenderbehauptung. `Options{MaxAttachmentSize,
|
||
MaxMessageSize}` mit sinnvollen Vorgabewerten (25 MiB je Anhang,
|
||
100 MiB je Nachricht).
|
||
- Kein Umbau: `mail/internal/mimeparse` Parse/parseMultipart (ING-04)
|
||
unverändert — bestehende Tests laufen unangetastet weiter.
|
||
|
||
## Prüfungen
|
||
|
||
| # | Prüfung | Ergebnis |
|
||
|---|---|---|
|
||
| 1 | Test mit Nachricht, die einen überdimensionierten Anhang enthält, wird korrekt begrenzt | **bestanden** – `TestExtract_OversizedAttachmentIsCorrectlyLimited`: Anhang über dem Limit wird real übersprungen (nicht extrahiert), Nachrichtentext bleibt real unangetastet |
|
||
| 2 | Test mit mehreren Anhängen unterschiedlichen Typs importiert alle korrekt | **bestanden** – `TestExtract_MultipleAttachmentDifferentTypesAllImported`: PDF + PNG in einer Nachricht, beide real extrahiert, PNG-Anhang liefert real den korrekten gesniffeten Content-Type `image/png` (echte Magic-Bytes) |
|
||
| 3 | Test: ein defekter Anhang lässt Text und übrige Anhänge unangetastet | **bestanden** – `TestExtract_BrokenAttachmentLeavesTextAndOthersUntouched`: ungültiges Base64 in einem Anhang, Nachrichtentext UND der zweite, gültige Anhang kommen real unverändert an |
|
||
|
||
## Build/Test-Ergebnis (192.168.1.131)
|
||
|
||
```
|
||
go build ./... -> clean
|
||
go vet ./... -> clean
|
||
golangci-lint run ./... -> 0 issues
|
||
go test ./internal/attachments/... -v -> 3/3 bestanden
|
||
TEST_TENANT_DSN=... TEST_MANTICORE_URL=... go test ./... -p 1
|
||
-> alle 16 Pakete bestanden, keine Regression (mimeparse: 6/6 weiterhin grün
|
||
nach additiver ParseTolerant-Erweiterung)
|
||
```
|
||
|
||
## Gesamtergebnis
|
||
|
||
**Bestanden.** Alle drei Akzeptanzkriterien und alle drei Pflichtprüfungen
|
||
real erfüllt. Entsperrt IMP-06, trägt (gemeinsam mit IMP-03) zu IMP-09 bei.
|