Releases: RainerNeu1012/itdatex-mailguard
Release list
MailGuard 0.9.0 — Windows Desktop-Client Companion
Companion-Release zur ersten Version des MailGuard Windows-Clients
(itdatex-mailguard-desktop v0.1.0).
Alle Änderungen sind Backend- und Portal-Voraussetzungen, damit derselbe
Portal-Bundle-Code in einer nativen Tauri-Shell laufen kann.
Neue Endpoints & Persistenz
GET /me/notifications(since_id/unread_only),GET /me/notifications/unread-count,POST /me/notifications/mark-seen- Neue Tabelle
mg_notifications. Server persistiert jetzt jedes User-relevante Ereignis (Phishing erkannt, Auto-Quarantäne, Undo-Ablauf, Newsletter-Bounce). FCM-Push bleibt unverändert und läuft parallel.
Portal-UI
- 🔔-Bell im Header mit Unread-Badge und Dropdown der letzten zehn Ereignisse.
- Dashboard-Card „🖥 Desktop-Client" mit Autostart-Toggle — nur sichtbar wenn im Windows-Client geladen.
- Poll läuft 60 s aktiv / 5 min im Hintergrund. Kein Service-Worker, keine Web-Push-Infrastruktur nötig.
Auth für externe Clients
- Neuer
authProvider-Hook inapi.js. Wenn gesetzt, holt die Portal-SPA den Bearer-Token dort (Windows-Client: aus dem Credential Manager) statt aus localStorage. 401 triggert transparenten/mobile/refresh+ Retry. Web + Mobile unverändert. - Push-Plattform-Enum erweitert um
windows/macos/linux. - CORS-Allowlist um
tauri://localhostundhttps://tauri.localhosterweitert.
Migration
- DB-Schema-Bump 15 → 16. dbDelta ist idempotent,
mg_notificationswird beim nächstenmigrate_dbangelegt (indexiert auf(customer_id, read_at, id)und(customer_id, created_at)). - Keine Änderung an bestehenden Tabellen, kein Datenverlust-Risiko.
Bugfixes
- Router mappt
/index.htmljetzt auf home statt „not-found" (Tauri-Shell öffnet die App mit dieser URL).
Vollständige Details siehe CHANGELOG.md.
MailGuard 0.8.9 — Newsletter-Abmeldung Robustness + Sender vernichten
Fokus dieses Release: Newsletter-Abmeldung ist deutlich verlässlicher
und der neue „Sender vernichten"-Flow entfernt einen Absender
komplett aus dem Postfach in einem Klick.
Neu
- „Sender vernichten" — kombinierter Ein-Klick-Flow: best-effort
Abmeldung + Blacklist-Regel + IMAP-EXPUNGE aller bestehender Mails.
Kein Papierkorb, kein Undo. Sichtbar als roter Button auf der
Newsletter-Seite und in der gruppierten Inbox-Ansicht. Type-in-
Bestätigung (VERNICHTENeintippen) sowohl im Frontend als auch am
REST-Endpoint gegen Muscle-Memory-Klicks. - Auto-DSN-Poll für mailto-Abmeldungen. Neuer WP-Cron
itdatex_mailguard_unsub_poll(alle 10 Min.) verfolgt den Bounce-
Status offener mailto-Abmeldungen der letzten 48 h automatisch.
Bounces landen ohne User-Klick in Historie + Notify-Hook. Schedule
wird beimplugins_loadedselbst-heilend nachgezogen, kein DB-Bump. - Neue Public-API:
UnsubService::execute_for_sender,
UnsubService::eradicate_sender,Subscriptions::messages_for_sender,
PurgeService::block_sender, RESTPOST /subscriptions/eradicate.
Verbessert
Antiphish\Clientretryt transiente Fehler (HTTP 429, 5xx, Netz-/
Timeout-Fehler) genau einmal mit 400 ms Backoff. mailto-execute
bleibt bewusst ohne Retry — sonst gingen doppelte Abmelde-Mails raus.- Idempotenz-Guard: schon erfolgreich abgemeldete Mails hitten die
API nicht mehr erneut. Doppelklick-Race per Transient-Lock (60 s,
per Kunde+Message) abgesichert — verhindert duplizierte
mg_unsubs-Zeilen. - Bulk-Abmeldung mit Fallback: fällt bei toten/fehlenden Endpoints
auf bis zu 5 ältere Absender-Mails zurück, statt sofort aufzugeben.
Ältere Kampagnen haben häufiger noch gültige Tokens. - Klare REST-Statuscodes:
already/ok/needs_manual/
endpoints_dead→ 200,not_found→ 404,in_progress(Lock) →
409,no_options→ 422, sonst 502. UI kann echte Backend-Ausfälle
von „Provider spielt nicht mit" unterscheiden. - Portal-UI zeigt konkrete Fehlerursachen (
attempts[]/detail)
statt „Status: unbekannt". Derendpoints_dead-Zweig ist jetzt auch
auf der Newsletter-Seite verfügbar (nicht mehr nur in Inbox).
Migration
- Keine DB-Änderung. Kein Datenverlust-Risiko.
Vollständige Details siehe CHANGELOG.md.
v0.8.8 — Manual plan assignment + force-verify email
[0.8.8] – 2026-07-06
Added
- Manuelle Plan-Freischaltung in der WP-Admin-Endkundenliste. Neue
Row-Action „Plan" öffnet einen Editor, in dem der Site-Owner einem
Kunden einen Plan (free/solo/plus/pro/test) und ein optionales
Ablaufdatum (plan_grace_until) ohne Stripe zuweisen kann — für
Comp-Konten, Rechnungskunden oder Fixes nach verpassten Webhooks. - 1-Klick „E-Mail verifizieren" in der Endkundenliste, sichtbar
nur bei noch nicht verifizierten Konten. Setztemail_verified=1
undstatus=active. - Neue Plan-Spalte in der Endkundenliste zeigt Slug + Grace-Datum.
- Public API:
Customer\Account::set_plan_manual(int $id, array $plan, ?int $grace_ts).
Respektiert den bestehendencloud_consent_at— ohne Consent bleibt
llm_enabledoff, selbst wenn der Plan es erlauben würde
(identische Guard-Logik wie im Stripe-Webhook).
Warnhinweis in der UI
- Wenn ein Kunde bereits ein Stripe-Abo hat (
stripe_subscription_id
gesetzt), warnt der Plan-Editor, dass die manuelle Zuweisung beim
nächsten Webhook wieder überschrieben wird.
📖 Full changelog: https://github.com/RainerNeu1012/itdatex-mailguard/blob/master/CHANGELOG.md
v0.8.7 — Portal fixes + Web-Session revocation + Mobile-App track
📖 Full changelog: https://github.com/RainerNeu1012/itdatex-mailguard/blob/master/CHANGELOG.md
Release v0.8.7
Bugfix follow-up to 0.8.6, plus everything 0.8.6 shipped
(there was no v0.8.6 tag, so this covers both).
Portal / Devices page
- fix: register 'devices' in router.js so the Geräte header button
actually routes to the page (was hitting not-found) - fix: self-revoke redirect now uses portalUrl('login') — was
resolving relative and landing on /portal/devices/login
Web-session revocation (0.8.6)
- New mg_web_sessions table tracks cookie sessions per JTI, UA, IP.
- Token::verify_session checks a wp_options JTI blacklist; auto-
prunes expired entries at each revoke. - Session::start inserts a tracking row, ::destroy revokes it.
- REST GET/DELETE /me/web-sessions.
- Devices.jsx shows Browser-Sessions with 'this browser' badge,
cross-revoke and self-revoke both wired end-to-end.
Mobile-app track (0.8.6)
- Long-lived Bearer tokens with refresh rotation (Customer\ApiToken
- mg_api_tokens).
- CORS allowlist scoped to the plugin REST namespace (Rest\Cors).
- FCM v1 push provider (Notify\PushService/Device/Hooks +
mg_push_devices). Silent no-op until the FCM service-account JSON
is entered in admin settings. - Notify hooks fire on dangerous verdict, auto-quarantine, undo
expiry (daily cron), and unsub bounce. - IMAP folder auto-sync per pull.
Purge fix (0.8.4)
- Bulk-delete on grouped-by-sender no longer times out (batched
connection + move-to-quarantine + safe expunge). - Legacy quarantine actions with target_uid=0 and no Message-ID
now soft-purge instead of hard-failing on HTTP 502.
Schema bumped to v14 (dbDelta idempotent).