feat: production launch — email audit, team invites, security headers, router fixes
- Fix loyalty & monitoring router bugs (_get_router → named routers) - Implement team invitation email with send_template + seed templates (en/fr/de) - Add SecurityHeadersMiddleware (nosniff, HSTS, referrer-policy, permissions-policy) - Build email audit admin page: service, schemas, API, page route, menu, i18n, HTML, JS - Clean stale TODO in platform-menu-config.js - Add 67 tests (unit + integration) covering all new functionality Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -59,7 +59,52 @@
|
||||
"account_settings": "Kontoeinstellungen",
|
||||
"messages": "Nachrichten",
|
||||
"notifications": "Benachrichtigungen",
|
||||
"email_templates": "E-Mail-Vorlagen"
|
||||
"email_templates": "E-Mail-Vorlagen",
|
||||
"email_logs": "E-Mail-Protokolle"
|
||||
},
|
||||
"email_logs": {
|
||||
"title": "E-Mail-Protokolle",
|
||||
"subtitle": "Alle über die Plattform gesendeten E-Mails prüfen",
|
||||
"recipient": "Empfänger",
|
||||
"subject": "Betreff",
|
||||
"template": "Vorlage",
|
||||
"status": "Status",
|
||||
"store": "Shop",
|
||||
"date": "Datum",
|
||||
"sent_at": "Gesendet am",
|
||||
"provider": "Anbieter",
|
||||
"from": "Von",
|
||||
"to": "An",
|
||||
"reply_to": "Antwort an",
|
||||
"related_entity": "Verknüpfte Entität",
|
||||
"error_message": "Fehlermeldung",
|
||||
"actions": "Aktionen",
|
||||
"view_detail": "Details anzeigen",
|
||||
"email_detail": "E-Mail-Detail",
|
||||
"html_preview": "HTML-Vorschau",
|
||||
"text_preview": "Text-Vorschau",
|
||||
"metadata": "Metadaten",
|
||||
"content": "Inhalt",
|
||||
"filter_by_recipient": "Nach Empfänger-E-Mail suchen...",
|
||||
"filter_by_status": "Alle Status",
|
||||
"filter_by_template": "Alle Vorlagen",
|
||||
"filter_by_store": "Alle Shops",
|
||||
"date_from": "Von Datum",
|
||||
"date_to": "Bis Datum",
|
||||
"apply_filters": "Anwenden",
|
||||
"reset_filters": "Zurücksetzen",
|
||||
"total_sent": "Gesamt gesendet",
|
||||
"total_failed": "Fehlgeschlagen",
|
||||
"total_pending": "Ausstehend",
|
||||
"total_delivered": "Zugestellt",
|
||||
"no_logs": "Keine E-Mail-Protokolle gefunden",
|
||||
"status_sent": "Gesendet",
|
||||
"status_failed": "Fehlgeschlagen",
|
||||
"status_pending": "Ausstehend",
|
||||
"status_delivered": "Zugestellt",
|
||||
"status_bounced": "Abgewiesen",
|
||||
"status_opened": "Geöffnet",
|
||||
"status_clicked": "Angeklickt"
|
||||
},
|
||||
"permissions": {
|
||||
"view_messages": "Nachrichten anzeigen",
|
||||
|
||||
@@ -76,6 +76,54 @@
|
||||
"account_settings": "Account Settings",
|
||||
"messages": "Messages",
|
||||
"notifications": "Notifications",
|
||||
"email_templates": "Email Templates"
|
||||
"email_templates": "Email Templates",
|
||||
"email_logs": "Email Logs"
|
||||
},
|
||||
"email_logs": {
|
||||
"title": "Email Logs",
|
||||
"subtitle": "Audit all emails sent through the platform",
|
||||
"recipient": "Recipient",
|
||||
"subject": "Subject",
|
||||
"template": "Template",
|
||||
"status": "Status",
|
||||
"store": "Store",
|
||||
"date": "Date",
|
||||
"sent_at": "Sent At",
|
||||
"provider": "Provider",
|
||||
"from": "From",
|
||||
"to": "To",
|
||||
"reply_to": "Reply To",
|
||||
"related_entity": "Related Entity",
|
||||
"error_message": "Error Message",
|
||||
"retry_count": "Retry Count",
|
||||
"actions": "Actions",
|
||||
"view_detail": "View Detail",
|
||||
"email_detail": "Email Detail",
|
||||
"html_preview": "HTML Preview",
|
||||
"text_preview": "Text Preview",
|
||||
"metadata": "Metadata",
|
||||
"content": "Content",
|
||||
"status_timeline": "Status Timeline",
|
||||
"filter_by_recipient": "Search by recipient email...",
|
||||
"filter_by_status": "All statuses",
|
||||
"filter_by_template": "All templates",
|
||||
"filter_by_store": "All stores",
|
||||
"date_from": "From date",
|
||||
"date_to": "To date",
|
||||
"apply_filters": "Apply",
|
||||
"reset_filters": "Reset",
|
||||
"total_sent": "Total Sent",
|
||||
"total_failed": "Failed",
|
||||
"total_pending": "Pending",
|
||||
"total_delivered": "Delivered",
|
||||
"no_logs": "No email logs found",
|
||||
"status_sent": "Sent",
|
||||
"status_failed": "Failed",
|
||||
"status_pending": "Pending",
|
||||
"status_delivered": "Delivered",
|
||||
"status_bounced": "Bounced",
|
||||
"status_opened": "Opened",
|
||||
"status_clicked": "Clicked",
|
||||
"retention_note": "Email body content is retained for 90 days. Metadata is kept indefinitely."
|
||||
}
|
||||
}
|
||||
|
||||
@@ -59,7 +59,52 @@
|
||||
"account_settings": "Paramètres du compte",
|
||||
"messages": "Messages",
|
||||
"notifications": "Notifications",
|
||||
"email_templates": "Modèles d'e-mail"
|
||||
"email_templates": "Modèles d'e-mail",
|
||||
"email_logs": "Journaux d'e-mails"
|
||||
},
|
||||
"email_logs": {
|
||||
"title": "Journaux d'e-mails",
|
||||
"subtitle": "Auditer tous les e-mails envoyés via la plateforme",
|
||||
"recipient": "Destinataire",
|
||||
"subject": "Objet",
|
||||
"template": "Modèle",
|
||||
"status": "Statut",
|
||||
"store": "Boutique",
|
||||
"date": "Date",
|
||||
"sent_at": "Envoyé le",
|
||||
"provider": "Fournisseur",
|
||||
"from": "De",
|
||||
"to": "À",
|
||||
"reply_to": "Répondre à",
|
||||
"related_entity": "Entité liée",
|
||||
"error_message": "Message d'erreur",
|
||||
"actions": "Actions",
|
||||
"view_detail": "Voir le détail",
|
||||
"email_detail": "Détail de l'e-mail",
|
||||
"html_preview": "Aperçu HTML",
|
||||
"text_preview": "Aperçu texte",
|
||||
"metadata": "Métadonnées",
|
||||
"content": "Contenu",
|
||||
"filter_by_recipient": "Rechercher par e-mail du destinataire...",
|
||||
"filter_by_status": "Tous les statuts",
|
||||
"filter_by_template": "Tous les modèles",
|
||||
"filter_by_store": "Toutes les boutiques",
|
||||
"date_from": "Date de début",
|
||||
"date_to": "Date de fin",
|
||||
"apply_filters": "Appliquer",
|
||||
"reset_filters": "Réinitialiser",
|
||||
"total_sent": "Total envoyés",
|
||||
"total_failed": "Échoués",
|
||||
"total_pending": "En attente",
|
||||
"total_delivered": "Livrés",
|
||||
"no_logs": "Aucun journal d'e-mail trouvé",
|
||||
"status_sent": "Envoyé",
|
||||
"status_failed": "Échoué",
|
||||
"status_pending": "En attente",
|
||||
"status_delivered": "Livré",
|
||||
"status_bounced": "Rebondi",
|
||||
"status_opened": "Ouvert",
|
||||
"status_clicked": "Cliqué"
|
||||
},
|
||||
"permissions": {
|
||||
"view_messages": "Voir les messages",
|
||||
|
||||
Reference in New Issue
Block a user