Changelog¶
Versionsverlauf der xynap Platform. Format: Datum — Version — Kategorie.
2026-03-12 — v2.5.1 — OCR: Surya Provider (Lokal/GPU)¶
Neue Features¶
- Surya OCR Provider — lokale GPU-beschleunigte Dokumentenerkennung
- Kein Cloud-Dienst, keine API-Kosten, DSGVO-konform
- Surya ist jetzt Default-Provider (statt Mistral)
- RTX 4000 Ada GPU-Beschleunigung via CUDA 12.8 (torch 2.10)
- PDF/Bild-Verarbeitung via pdf2image + Surya Detection/Recognition
- Provider-Auswahl im Frontend — prominent ueber den Tabs, mit Default-Badge
- Docker GPU-Passthrough — nvidia-container-runtime fuer platform-api
- Surya-Modell-Cache persistent unter
/var/lib/xynap/surya-models
Architektur¶
- Neuer Provider:
SuryaOcrProvider(lokal) nebenMistralOcrProvider(Cloud) - Surya-Modelle als Singleton (einmal laden, im Speicher halten)
- CPU/GPU-bound OCR via
asyncio.to_thread()(blockiert nicht den Event-Loop) - Dockerfile:
nvidia/cuda:12.4.1-runtime-ubuntu22.04+ Python 3.12 + torch 2.10 (cu128) - 36 Unit-Tests (Syntax, Schemas, Factory, Mistral-Logik, Surya-Logik)
2026-03-12 — v2.5 — OCR Service¶
Neue Features¶
- Universeller OCR-Service mit Provider-Abstraktion
- Provider: Mistral OCR 3 (
mistral-ocr-latest) - 4 API-Endpoints:
GET /ocr/providers,POST /ocr/process,POST /ocr/process/structured,POST /ocr/upload - Unterstuetzte Formate: PDF, PNG, JPG, WebP, DOCX, PPTX u.a.
- Strukturierte Extraktion via JSON-Schema (Rechnungen, Formulare)
- Datei-Upload (Multipart, max. 50 MB)
- Provider: Mistral OCR 3 (
- OCR Frontend-View (
/app/ocr)- Drag & Drop Upload oder URL-Eingabe
- Markdown-Ergebnis pro Seite, Copy/Download
- Erweiterte Optionen: Tabellenformat, Sprache, Bilder/Header/Footer
- Vollstaendig i18n (DE + EN)
- Permissions:
ocr.read,ocr.processfuer admin, reseller, customer, user
Architektur¶
- Factory-Pattern (wie DNS-Provider):
BaseOcrProvider→MistralOcrProvider - Erweiterbar: Neue Provider ohne API-Aenderung ergaenzbar
- API-Key via Secret Store oder Umgebungsvariable
- 25 Unit-Tests (Syntax, Schemas, Factory, Provider-Logik)
2026-03-11 — v2.4 — Security-by-Design¶
Architekturprinzip¶
Alle Datenzugriffe laufen ueber die API. Die API erzwingt RBAC basierend auf Rollen/Rechten. Jeder User und jedes System hat eine Rolle mit definierten Rechten.
Neue Features¶
- User-Preferences API (
GET/PUT /api/v1/settings/preferences)- Mail-Handler und Call-Handler Praeferenzen ueber API statt nur localStorage
- Whitelist-Validierung fuer Keys und Werte
- RBAC: Jeder User kann nur eigene Praeferenzen aendern
- Settings-UI fuer Kontakt-Aktionen in Profil-Einstellungen
- 3-Button-Auswahl: "Immer fragen" / "Webmailer/Browserphone" / "System-App"
- Zuruecksetzen auf Standard
- XContactLink-Integration in weiteren Views
- ContactsView (Tabelle): E-Mail/Telefon klickbar
- CRM ContactTable Widget: E-Mail/Telefon klickbar
- CRM EntityFields Widget: E-Mail/Telefon/Website klickbar
Security-Fixes¶
- v-html XSS (KRITISCH): DOMPurify fuer alle 3 v-html-Stellen
SignatureManager.vue— E-Mail-SignaturenTextBlock.vue— CMS-BenutzercontentClientSetupView.vue— Defense-in-depth
- Payment-Webhook HMAC (KRITISCH): HMAC-SHA256 Signaturpruefung fuer Stripe/PayPal Webhooks
- Erzwungen wenn Secret konfiguriert, Dummy-Modus ohne Secret
- Settings:
payments.stripe_webhook_secret,payments.paypal_webhook_secret
- Compose-Parameter Injection (HOCH): URL-Parameter im Webmailer werden sanitized
- E-Mail-Validierung fuer
?to=und?cc= - HTML-Escaping fuer
?body=(kein v-html mehr) - Laengenbegrenzung fuer Subject (200) und Body (2000)
- E-Mail-Validierung fuer
- XContactLink Sanitierung (bestehend, dokumentiert):
- Alle 5 Kontakttypen mit Input-Validierung
javascript:,data:,vbscript:blockiertnoopener,noreferrerbei externen Links
Entfernte Dateien¶
phoneLink.ts— Obsolet, ersetzt durch XContactLinkActionChoiceDialog.vue— In XContactLink integriert
Betroffene Dateien¶
Backend:
| Datei | Aenderung |
|---|---|
app/core/settings/router.py |
User-Preferences Endpoints |
app/core/payments/router.py |
HMAC-Verifikation |
Frontend:
| Datei | Aenderung |
|---|---|
shell/utils/sanitizeHtml.ts |
Neuer DOMPurify-Wrapper |
shell/composables/useActionPreferences.ts |
API statt localStorage |
shell/settings/SettingsProfile.vue |
Kontakt-Aktionen UI |
shell/contacts/ContactsView.vue |
XContactLink in Tabelle |
crm/widgets/lists/ContactTable.vue |
XContactLink in Widget |
crm/widgets/detail/EntityFields.vue |
XContactLink in Detail |
modules/mail/components/SignatureManager.vue |
DOMPurify |
modules/mail/components/ComposeDialog.vue |
Parameter-Sanitierung |
modules/cms/components/blocks/TextBlock.vue |
DOMPurify |
modules/services/views/ClientSetupView.vue |
DOMPurify |
2026-03-10 — v2.3 — XContactLink & Action Preferences¶
Neue Features¶
- XContactLink — Universelle klickbare Kontakt-Links (E-Mail, Telefon, Website, Telegram, WhatsApp)
- useActionPreferences — Composable fuer Mail/Call Handler-Praeferenzen
- useSoftphone — Respektiert Call-Praeferenzen, PostMessage-Integration
- Globale Suche — E-Mail/Telefon-Buttons in Suchergebnissen (TopBar)
Integration¶
- ContactDetailView: E-Mail, Telefon, Website als XContactLink
- CustomerDetailView: E-Mail, Telefon als XContactLink
- UserDetailView: E-Mail als XContactLink