Admin emails : bouton « Voir » ouvre le contenu dans une nouvelle fenêtre #37
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Contexte
Dans
/admin/emails, la colonne « Contenu » affiche un bouton « Voir » qui déplie le corps de l'email inline dans la ligne du tableau via un élément HTML<details>/<summary>. Seul lecontent_text(texte brut) est affiché.Comportement souhaité
Cliquer sur « Voir » ouvre une nouvelle fenêtre/onglet avec le contenu complet de l'email envoyé (version HTML si disponible, texte sinon).
Analyse technique
Structure de données
La table
journal_smtpcontient :content_html— corps HTML complet (inséré parsrc/mailer.php:100)content_text— version texte brut (strip_tags du HTML)La requête actuelle dans
public/index.php:2313-2318sélectionnecontent_textmais ometcontent_html.Contrainte CSP
La CSP applique
script-src 'self'— tout script inline est bloqué. L'implémentation doit donc reposer sur un simple lien<a target="_blank">, sans JS inline niwindow.open().Implémentation
1. Nouvelle route
GET /admin/email-preview/{id}Dans
public/index.php, ajouter une route protégée parisAdmin():2. Modifier le bouton dans
templates/admin.phpRemplacer le bloc
<details>actuel (lignes 833–846) par :3. Supprimer
content_textde la requête adminDans
public/index.php:2314,content_textn'est plus utilisé côté template — retirer ce champ de laSELECT(ou le garder pour compatibilité, au choix).Fichiers concernés
public/index.php— ajout de la route/admin/email-preview/{id}+ nettoyage de la SELECTtemplates/admin.php— remplacement du<details>par un lientarget="_blank"Sécurité
Le
content_htmlest généré exclusivement par l'application (magic links, vérification de commentaires, etc.) — pas de contenu utilisateur direct. Le risque XSS est faible, mais la page de preview étant isolée dans un onglet séparé sans accès aux cookies de session admin (elle n'inclut pas le layout), l'impact est contenu.Migré depuis varlog#52