Skip to content

Commit 6d27a8f

Browse files
committed
add doc
1 parent a93653f commit 6d27a8f

7 files changed

Lines changed: 278 additions & 5 deletions

File tree

docs/.vuepress/config.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ export default defineUserConfig({
4040
'validation',
4141
'formulaire',
4242
'config-gestion-mdp',
43+
'mail-templates',
4344
'personalisation_tuiles',
4445
'cyclevie',
4546
'cron'
@@ -92,6 +93,7 @@ export default defineUserConfig({
9293
'settings/keyrings',
9394
'settings/cron',
9495
'settings/smtp',
96+
'settings/mail-templates',
9597
'settings/sms',
9698
'settings/password-policy',
9799
'settings/roles',

docs/configuration/config-gestion-mdp.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,10 @@ SESAME_FRONT_MDP="https://monsite.dechanegementdemotdepasse.com"
6161
```
6262
Vous devez redemarrer Sesame-oechstrateur après cette modification
6363

64-
## Modèle des mails
64+
## Modèle des mails
65+
66+
> Documentation à jour : [Templates de mails](mail-templates.html) (conventions `mail_*`, envoi manuel, API, variables).
67+
6568
Vous pouvez genérer votre propre modèle de mail. Voici les étapes à faire pour mettre à jour votre docker-compose.yml. Si l'installation est nouvelle vous pouvez sauter cette étape
6669
* Créer dans configs/orchestrator un repertoire mail-templates
6770
* Modifier docker-compose pour monter ce répertoire :
Lines changed: 200 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,200 @@
1+
---
2+
lang: fr-FR
3+
title: Templates de mails
4+
description: Configuration, conventions et utilisation des modèles Handlebars pour l'envoi de courriels dans Sesame-Orchestrator
5+
---
6+
7+
# Templates de mails
8+
9+
Sesame-Orchestrator utilise des fichiers **Handlebars** (`.hbs`) pour le rendu HTML des courriels. Ils servent aux flux automatiques (invitation, reset, rappels d’expiration, alertes) et à l’**envoi manuel** depuis la table des identités.
10+
11+
## Emplacements des fichiers
12+
13+
| Élément | Chemin (dans le conteneur API) | Rôle |
14+
| --- | --- | --- |
15+
| Templates HTML | `templates/*.hbs` | Modèles Handlebars compilés à l’envoi |
16+
| Variables UI | `configs/mail/mail_templates.yml` | Variables proposées dans la modale d’envoi manuel |
17+
| Valeurs par défaut | `defaults/mail/mail_templates.yml` | Copié vers `configs/mail/` au premier démarrage si absent |
18+
19+
En déploiement Docker, monter le répertoire des templates sur `/data/templates` (voir aussi [Configuration gestion MDP](config-gestion-mdp.html#modele-des-mails)).
20+
21+
Exemple de volume :
22+
23+
```yaml
24+
- ./configs/sesame-orchestrator/templates:/data/templates
25+
```
26+
27+
Le fichier `configs/mail/mail_templates.yml` peut être monté ou versionné séparément selon votre installation.
28+
29+
## Types de templates
30+
31+
### Templates personnalisables (`mail_*`)
32+
33+
Les fichiers dont le nom commence par **`mail_`** sont listés en priorité et peuvent être **envoyés manuellement** depuis l’interface (identités synchronisées).
34+
35+
Exemples fournis :
36+
37+
| Fichier | Usage typique |
38+
| --- | --- |
39+
| `mail_welcome.hbs` | Message de bienvenue |
40+
| `mail_custom_notification.hbs` | Notification générique (titre, message, CTA) |
41+
| `mail_security_alert.hbs` | Alerte sécurité (ex. mot de passe compromis) |
42+
43+
### Templates internes Sesame (sans préfixe `mail_`)
44+
45+
Réservés aux **flux métier** de la plateforme. Ils apparaissent dans la liste de la modale d’envoi en **mode lecture seule** (aperçu uniquement) :
46+
47+
| Fichier | Déclenché par |
48+
| --- | --- |
49+
| `initaccount.hbs` | Invitation / initialisation de compte (`POST /management/passwd/init`, `initmany`) |
50+
| `resetaccount.hbs` | Réinitialisation de mot de passe (`PasswdService`, code à 6 chiffres) |
51+
52+
L’API refuse l’envoi manuel de ces templates (`POST /management/mail/sendmany`).
53+
54+
## Moteur de rendu
55+
56+
- **Moteur** : [Handlebars](https://handlebarsjs.com/) (via `@nestjs-modules/mailer`).
57+
- **Mode strict** : activé à l’**envoi réel** (variable absente = erreur).
58+
- **Aperçu UI** : mode non strict + valeurs fictives pour les variables runtime non connues à l’avance (ex. `code` de reset).
59+
60+
Syntaxe courante : `{{ variable }}`, blocs `{{#if variable}}…{{/if}}`, accès imbriqué `{{ identity.inetOrgPerson.uid }}`.
61+
62+
### Variables courantes par flux
63+
64+
**Initialisation (`initaccount`)** — fournies par le backend :
65+
66+
| Variable | Description |
67+
| --- | --- |
68+
| `uid` | Identifiant du compte |
69+
| `url` | Lien d’activation (token) |
70+
| `displayName` | Nom affiché |
71+
| `mail` | Adresse mail de l’identité |
72+
73+
**Reset (`resetaccount`)** :
74+
75+
| Variable | Description |
76+
| --- | --- |
77+
| `displayName` | Nom affiché |
78+
| `uid` | Identifiant |
79+
| `code` | Code numérique de réinitialisation (généré à l’envoi, non prédictible en aperçu) |
80+
81+
**Envoi manuel (`mail_*`)** — selon le template ; l’objet **`identity`** (document MongoDB) est injecté dans le contexte, ainsi que les variables de `mail_templates.yml` et les variables additionnelles saisies dans la modale.
82+
83+
Le **sujet SMTP** est un champ **obligatoire** saisi dans l’UI (ou fixé par le flux automatique), distinct des variables Handlebars du corps (sauf si le template réutilise `{{ subject }}` dans le HTML).
84+
85+
### Aperçu : valeurs par défaut
86+
87+
Lors d’un aperçu, des placeholders sont appliqués si la variable n’est pas fournie, par exemple :
88+
89+
- `code` → `123456`
90+
- `url` → `https://example.invalid/preview`
91+
- `displayName` → `Jean Dupont (aperçu)`
92+
- `uid` → `preview.user`
93+
94+
Les variables additionnelles saisies dans la modale **remplacent** ces défauts.
95+
96+
## Configuration `mail_templates.yml`
97+
98+
Fichier : `configs/mail/mail_templates.yml`
99+
100+
```yaml
101+
mailTemplates:
102+
variables:
103+
- key: appName
104+
label: Nom de l'application
105+
description: Nom affiché dans certains templates.
106+
example: "Sesame"
107+
defaultValue: "Sesame"
108+
- key: url
109+
label: URL principale
110+
...
111+
```
112+
113+
- Les entrées alimentent la section **« Variables pré-construites »** de la modale.
114+
- Les `defaultValue` peuvent contenir des placeholders **Liquid** `{{ ... }}` résolus au chargement (`resolveConfigVariables`).
115+
- Le **sujet** n’y figure plus : il est saisi dans un champ dédié de la modale.
116+
117+
Pour ajouter une variable disponible côté UI, ajoutez une entrée `key` / `label` / `defaultValue`, puis redémarrez ou rechargez la config selon votre déploiement.
118+
119+
## Chemins JSON des destinataires (SMTP)
120+
121+
Configurés dans **Paramètres → Serveur SMTP** (`/settings/smtp`) :
122+
123+
| Champ | Exemple |
124+
| --- | --- |
125+
| Chemin JSON — e-mail principal | `inetOrgPerson.mail` |
126+
| Chemin JSON — e-mail personnel | `additionalFields.attributes.supannPerson.supannAutreMail` |
127+
128+
Ces chemins sont **validés à l’enregistrement** sur une identité synchronisée.
129+
130+
Lors de l’envoi manuel, l’utilisateur peut sélectionner **une ou plusieurs** adresses (principal et/ou personnel). Pour chaque identité, les adresses distinctes reçoivent **un même message** (champ `to` multiple). Les adresses vides sur un chemin sont ignorées ; si aucune adresse n’est trouvée, l’identité est comptée comme « ignorée » (`skipped`).
131+
132+
## API de gestion des templates
133+
134+
Préfixe : `/management/mail`
135+
136+
| Méthode | Route | Description |
137+
| --- | --- | --- |
138+
| `GET` | `/templates` | Liste tous les fichiers `.hbs` (tri : `mail_*` en premier) |
139+
| `GET` | `/templates/config` | Contenu de `mail_templates.yml` (variables UI) |
140+
| `POST` | `/templates/preview` | Rendu HTML d’aperçu (`template`, `variables` optionnelles) |
141+
| `POST` | `/sendmany` | Envoi d’un template à plusieurs identités synchronisées |
142+
143+
### Corps de `POST /sendmany`
144+
145+
```json
146+
{
147+
"ids": ["…"],
148+
"template": "mail_welcome",
149+
"subject": "Bienvenue sur Sesame",
150+
"variables": {
151+
"appName": "Sesame",
152+
"url": "https://…"
153+
},
154+
"recipientAddressSources": ["principal", "personnel"]
155+
}
156+
```
157+
158+
- `template` : nom sans extension `.hbs`, doit commencer par `mail_` pour l’envoi manuel.
159+
- `subject` : obligatoire.
160+
- `recipientAddressSources` : tableau non vide ; valeurs `principal` et/ou `personnel`. Si absent, repli sur l’attribut mail de la politique de mot de passe (`emailAttribute`).
161+
162+
Réponse : `{ "sent": n, "skipped": m }`.
163+
164+
## Interface : envoi depuis les identités
165+
166+
Disponible pour les identités **synchronisées** uniquement :
167+
168+
- **Liste** `/identities/table` : action de masse « Envoyer un mail (template) » (`mdi-email`).
169+
- **Fiche** `/identities/table/:id` : même action sur une identité.
170+
171+
La modale permet de :
172+
173+
1. Choisir un template (aperçu à droite).
174+
2. Saisir le **sujet** (obligatoire pour les templates `mail_*`).
175+
3. Choisir une ou plusieurs **adresses destinataires** (si configurées dans SMTP).
176+
4. Ajuster les variables pré-construites et des variables libres (clé/valeur).
177+
5. Optionnellement envoyer à toute la sélection filtrée (case à cocher si plusieurs identités éligibles).
178+
179+
Templates internes : bandeau « mode lecture seule », pas d’envoi, champs sujet/destinataire masqués.
180+
181+
Permissions : envoi soumis aux droits sur `/management/identities` (mise à jour) et `/management/mail` (création).
182+
183+
## Créer un template `mail_*` personnalisé
184+
185+
1. Ajouter `templates/mail_mon_message.hbs` (préfixe `mail_` obligatoire pour l’envoi manuel).
186+
2. Utiliser Handlebars ; tester avec l’aperçu dans la modale.
187+
3. Optionnel : déclarer des variables dans `configs/mail/mail_templates.yml`.
188+
4. Redémarrer l’API si les templates sont lus au démarrage selon votre configuration Mailer.
189+
190+
Conseil MJML : composer en [MJML](https://mjml.io/), exporter en HTML, enregistrer dans le fichier `.hbs` (voir [config gestion MDP](config-gestion-mdp.html#faire-son-modele-de-mail)).
191+
192+
## Rappels d’expiration et cron
193+
194+
Les jalons de rappel de mot de passe (politique MDP + cron `identities-password-expiration-reminder`) utilisent des templates `mail_*` configurés dans `passwordExpirationReminderSteps`. Voir [Politique mots de passe](../pages/settings/password-policy.html) et [Tâches planifiées](cron.html).
195+
196+
## Voir aussi
197+
198+
- [Serveur SMTP](../pages/settings/smtp.html) — paramètres SMTP et chemins JSON destinataires
199+
- [Table des identités](../pages/identities/table.html) — actions de masse
200+
- [Configuration gestion MDP](config-gestion-mdp.html) — montage Docker et création graphique (MJML)

docs/installation/gestion-mdp.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,5 +109,6 @@ Se referer au site de site de quasar.dev pour les explications : [Quasar Theme B
109109

110110
Voir le chapitre [Confifuration de la politique de mot de passe](/sesame-doc/configuration/config-gestion-mdp.html)
111111

112-
## Modèles des mails
113-
voir la section configuration [/sesame-doc/configuration/config-gestion-mdp.html](/sesame-doc/configuration/config-gestion-mdp.html)
112+
## Modèles des mails
113+
114+
Voir [Templates de mails](/sesame-doc/configuration/mail-templates.html) et [Envoi depuis les identités](/sesame-doc/pages/settings/mail-templates.html). Pour le montage Docker historique : [config gestion MDP](/sesame-doc/configuration/config-gestion-mdp.html#modele-des-mails).

docs/pages/identities/table.md

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,10 @@ Cette page documente l’écran de liste des identités (route `/identities/tabl
1414

1515
- **Table + panneau** : composant `sesame-core-twopan` (titre “Gestion des identités”).
1616
- **Filtres** : `sesame-core-pan-filters` (mode “complex”), placeholder “Rechercher par nom, prénom, email, …”.
17-
- **Actions de masse** (sur sélection multiple) :
17+
- **Actions de masse** (sur sélection multiple, identités synchronisées) :
1818
- “Mettre à synchroniser” (`mdi-sync`)
19-
- “Envoyer le mail d'invitation” (`mdi-email-arrow-right`)
19+
- “Envoyer le mail d'invitation” (`mdi-email-arrow-right`) — flux `initaccount` / `POST /management/passwd/initmany`
20+
- “Envoyer un mail (template)” (`mdi-email`) — modale templates `mail_*` (sujet, destinataires, variables, aperçu)
2021
- “Supprimer en masse” (`mdi-delete`)
2122
- “Nettoyer la sélection” (`mdi-cancel`)
2223
- **Création** : bouton `+` vers `/identities/table/<NewTargetId>?schema=inetOrgPerson` (soumis à permission `create` sur `/management/identities`).
@@ -29,6 +30,7 @@ Cette page documente l’écran de liste des identités (route `/identities/tabl
2930
- **Liste** : `GET /management/identities` (pagination via `usePagination()`).
3031
- **Changement d’état** : `PATCH /management/identities/state` (mise à jour par lot).
3132
- **Initialisation mot de passe (invitation)** : `POST /management/passwd/initmany`.
33+
- **Envoi template mail (masse)** : `POST /management/mail/sendmany` (voir [Envoi de mails (templates)](../settings/mail-templates.html)).
3234
- **Suppression (backend)** : `POST /core/backends/delete`.
3335

3436
## Détail d’une identité (`/identities/table/:_id`)
@@ -37,5 +39,6 @@ Cette page documente l’écran de liste des identités (route `/identities/tabl
3739
- **Onglets** : l’écran de détail reprend les “tabs” (fiche/audits/jobs/lifecycle/debug) quand l’identité n’est pas “nouvelle” et selon permissions.
3840
- **Chargement** : `GET /management/identities/<id>` (404 si inexistante).
3941
- **Création** : si `:_id === NewTargetId`, l’écran initialise une identité vide (state `TO_CREATE`) et permet la saisie.
42+
- **Envoi template mail** : même modale que en liste (`POST /management/mail/sendmany`), pour une identité synchronisée.
4043

4144

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
---
2+
lang: fr-FR
3+
title: Envoi de mails (templates)
4+
description: Modale d'envoi manuel de templates mail depuis les identités dans Sesame-Orchestrator
5+
---
6+
7+
# Envoi de mails (templates)
8+
9+
Cette page décrit la **modale d’envoi manuel** accessible depuis la gestion des identités (pas un écran de paramètres dédié).
10+
11+
## Accès
12+
13+
- **Liste** `/identities/table` : sélectionner une ou plusieurs identités **synchronisées**, puis « Envoyer un mail (template) ».
14+
- **Fiche** `/identities/table/:id` : bouton équivalent sur une identité synchronisée.
15+
16+
## Prérequis
17+
18+
1. **Serveur SMTP** configuré ([SMTP](smtp.html)).
19+
2. Au moins un **chemin JSON** renseigné pour l’e-mail principal et/ou personnel (page SMTP).
20+
3. Identités en état **synchronisé** ; sinon l’action est désactivée ou un avertissement s’affiche.
21+
22+
## Contenu de la modale
23+
24+
### Colonne formulaire
25+
26+
- **Template** : liste de tous les fichiers `.hbs` du serveur.
27+
- Templates `mail_*` : envoi autorisé.
28+
- Templates internes (`initaccount`, `resetaccount`, …) : **aperçu seul** (bandeau bleu, bouton « Aperçu seul — envoi non disponible »).
29+
- **Sujet du mail** : obligatoire pour l’envoi (masqué en mode lecture seule).
30+
- **Adresse(s) du destinataire** : sélection multiple (chips) — e-mail principal et/ou personnel selon la config SMTP.
31+
- **Variables pré-construites** : issues de `configs/mail/mail_templates.yml`.
32+
- **Variables additionnelles** : paires clé/valeur libres (écrasent une clé pré-construite si même nom).
33+
- **Destinataires** : liste des identités concernées.
34+
- **Envoyer à toutes les identités synchronisées** (option) : si la sélection filtrée est plus petite que le total synchronisé.
35+
36+
### Colonne aperçu
37+
38+
- Rendu HTML via `POST /management/mail/templates/preview`.
39+
- Rafraîchissement automatique (debounce) à chaque changement de template, sujet ou variables.
40+
41+
## Envoi
42+
43+
- Bouton **Envoyer** : `POST /management/mail/sendmany`.
44+
- Notification avec nombre de mails envoyés / ignorés (`sent` / `skipped`).
45+
46+
## Permissions
47+
48+
- Action visible selon les droits sur `/management/identities` (mise à jour).
49+
- Envoi API : création sur `/management/mail`.
50+
51+
## Documentation technique
52+
53+
Voir [Templates de mails](../../configuration/mail-templates.html) pour les conventions de nommage, l’API complète et la création de nouveaux modèles.

docs/pages/settings/smtp.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,15 @@ Cette page permet de configurer l’envoi d’emails via un serveur SMTP (route
1111
## Contenu de l’interface
1212

1313
- Champs : `host`, `emetteur`, `username`, `password` (mot de passe affichable via icône “œil”).
14+
- **Chemins JSON destinataires** (envoi manuel de templates depuis les identités) :
15+
- **E-mail personnel** : chemin en notation pointée vers un champ additionnel (ex. `additionalFields.attributes.…`).
16+
- **E-mail principal** : ex. `inetOrgPerson.mail`.
17+
- Validés à l’enregistrement sur une identité synchronisée.
1418
- Bouton : “Sauvegarder les paramètres”.
1519
- Affichage des validations champ par champ (messages d’erreur).
1620

21+
Sans au moins un de ces chemins, la modale « Envoyer un mail (template) » affiche un bandeau d’avertissement et bloque l’envoi.
22+
1723
## Permissions
1824

1925
- Les champs et la sauvegarde sont conditionnés à `update` sur `/settings/mailadm`.
@@ -23,3 +29,8 @@ Cette page permet de configurer l’envoi d’emails via un serveur SMTP (route
2329
- **Lecture** : `GET /settings/mail/get`
2430
- **Sauvegarde** : `POST /settings/mail/set`
2531

32+
## Voir aussi
33+
34+
- [Templates de mails](../../configuration/mail-templates.html) — modèles Handlebars, conventions `mail_*`, API
35+
- [Envoi de mails (templates)](mail-templates.html) — modale depuis les identités
36+

0 commit comments

Comments
 (0)