- Verschluesselung fuer Zugangsdaten: Ein IMAP-Passwort laesst sich nicht hashen, Certain muss es dem Mailserver vorlegen. Es liegt deshalb mit Fernet verschluesselt in der Datenbank, der Schluessel wird per HKDF aus session_secret abgeleitet und nirgends gespeichert. Wird das Geheimnis getauscht, meldet Certain das verstaendlich statt mit einem Stacktrace. - IMAP-Abruf ueber imaplib/email (Standardbibliothek). Ordnerliste, Verbindungstest mit klarer Fehlermeldung, Absender-Zuordnung auf Konten, danach als gelesen markieren oder verschieben. - Wiedererkennung ueber die Message-ID statt der UID – die vergibt der Server beim Verschieben neu. - Nichts wird stillschweigend gebucht: Eine Mail wird zum Eingangs-Eintrag. Fehlt das Zielkonto oder ist ein Feld unsicher, gilt sie als unklar. - Hintergrund-Thread beim Start, nach dem Muster des EZB-Kursabrufs: ein langsames Postfach darf den Dienst nie blockieren. Getestet gegen einen IMAP-Doppelgaenger, damit die Suite ohne Netz laeuft. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
22 lines
559 B
Plaintext
22 lines
559 B
Plaintext
fastapi==0.115.6
|
|
uvicorn[standard]==0.34.0
|
|
SQLAlchemy==2.0.36
|
|
alembic==1.14.0
|
|
pydantic==2.10.4
|
|
pydantic-settings==2.7.1
|
|
argon2-cffi==23.1.0
|
|
# Zwei-Faktor: TOTP-Codes (pyotp) und der QR-Code zur Einrichtung (qrcode).
|
|
# qrcode nutzt Pillow, das unten ohnehin schon für die OCR dabei ist.
|
|
pyotp==2.9.0
|
|
qrcode==8.0
|
|
python-multipart==0.0.20
|
|
httpx==0.28.1
|
|
python-dateutil==2.9.0.post0
|
|
# PDF/Bild-Import (Phase 5): Text aus PDFs (PyMuPDF) und OCR (Tesseract) für Scans/Bilder.
|
|
PyMuPDF==1.25.1
|
|
pytesseract==0.3.13
|
|
pillow==11.1.0
|
|
pytest==8.3.4
|
|
|
|
cryptography==50.0.0
|