Skip to content

Feature: Channel Preferences via Signed Token #156

@N3XT0R

Description

@N3XT0R

Ziel

Kanalbetreiber sollen ihre Benachrichtigungseinstellungen selbst verwalten können – ohne Login.
Zugriff erfolgt über einen signierten Token-Link, der direkt aus den wöchentlichen Angebots-E-Mails erreichbar ist.


Hintergrund

Aktuell sind Download-Links tokenbasiert und zeitlich limitiert (1 Woche).
Langfristige Einstellungen (z. B. Abmeldung von Mails) erfordern jedoch eine persistente Identität.
Das neue Feature führt eine "Soft Identity Layer" ein:
Ein signierter Einstellungs-Link erlaubt Zugriff auf kanalgebundene Präferenzen, ohne klassische Authentifizierung.


Akzeptanzkriterien

Funktional

  • Jeder Kanal erhält eine eindeutige UUID-Spalte (channel_uuid), dauerhaft gültig.
  • Jede Angebots-Mail enthält im Footer einen Link:

https://delivery.example.com/channel/preferences?token={signed_uuid}

  • Der Token ist ein JWT oder HMAC-Signatur über:
  • channel_uuid
  • expires_at (z. B. 30 Tage)
  • Signatur auf Basis von app.key
  • Token kann nur für Einstellungen verwendet werden, nicht für Downloads.
  • Die Präferenzseite zeigt:
  • Aktuelle E-Mail-Einstellungen (digest_and_reminder, digest_only, none)
  • Einen „Speichern“-Button.
  • Änderungen werden direkt in der channels-Tabelle gespeichert (notification_mode).
  • Erfolgreiche Änderung zeigt eine Bestätigung („Einstellungen gespeichert – Änderungen gelten ab nächstem Zyklus“).

Sicherheit

  • Token ist nur gültig, wenn Signatur korrekt und expires_at > now().
  • Kein Zugriff auf andere Kanäle möglich.
  • Token-Links dürfen bedenkenlos in Mails erscheinen (ähnlich wie klassische "unsubscribe"-Links).
  • Zugriff ohne gültigen Token zeigt 403 Forbidden oder "Link abgelaufen".

Technisch

  • Neue Spalte in channels: channel_uuid (UUID, unique, nullable=false).
  • Neue Route channel/preferences (GET/POST).
  • Neuer Service ChannelPreferenceToken für Signatur & Verifikation.
  • Middleware VerifyPreferenceToken.
  • Optional: Job GeneratePreferenceLinks für Batch-Mailing oder Template-Preview.

UI

  • Einfache Blade-View oder Filament-Page mit:
  • Kanalname (read-only)
  • Dropdown: „Montag & Samstag“, „Nur Montag“, „Keine E-Mails“
  • Button „Speichern“
  • Bestätigung über Alert-Komponente oder Inline-Message.

Tests

  • Unit-Test: Token-Verifikation (gültig, abgelaufen, manipuliert)
  • Integration-Test: Zugriff via gültigem Token erlaubt Änderung
  • Mail-Test: Link wird korrekt mit Token generiert und gerendert
  • Sicherheits-Test: Kein Zugriff auf fremden Kanal mit manipuliertem Token

Optional: Erweiterungen (v3.2+)

  • Tracking: Letzte Präferenzänderung (preferences_updated_at).
  • Audit-Log: Wer (per Token) Einstellungen geändert hat.
  • UI-Option: „Temporär pausieren (4 Wochen keine Angebote)“.
  • Erweiterung für künftige Login-Integration (Token kann in Session umgewandelt werden).

Motivation

Diese Lösung schafft Selbstbestimmung ohne Login, wahrt RFC-Konformität
und ermöglicht dir gleichzeitig, Support-Aufwand (manuelles Entfernen) zu reduzieren.
Kanalbetreiber können damit eigenständig steuern, wie und wann sie E-Mails erhalten –
ohne deine Round-Robin- oder Token-Logik zu beeinflussen.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    Status

    Todo

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions