commit 310724708f467ff889dda5c38c67389b86a21ba5 Author: mrKamoo Date: Wed Sep 30 16:27:32 2026 +0200 45 diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..16ab05a --- /dev/null +++ b/.dockerignore @@ -0,0 +1,10 @@ +**/node_modules +**/.git +addin/dist +backend/vendor +backend/.env +backend/storage/logs/* +backend/storage/framework/cache/* +backend/storage/framework/sessions/* +backend/storage/framework/views/* +docker/certs diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..43a4087 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,3 @@ +*.sh text eol=lf +docker/** text eol=lf +*.png binary diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..6532fa7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +node_modules/ +addin/dist/ +addin/.env +backend/vendor/ +backend/.env +docker/certs/* +!docker/certs/README.txt +deploy.env diff --git a/README.md b/README.md new file mode 100644 index 0000000..15440ee --- /dev/null +++ b/README.md @@ -0,0 +1,91 @@ +# Signatures CABM + +Gestion centralisée des signatures email des agents de la CA Béziers Méditerranée : +un **add-in Outlook** insère automatiquement la signature (OWA, nouvel Outlook, Outlook mobile), +un **back-office Laravel** gère templates, affectations par groupes AD, campagnes et portail agent. + +Architecture et lotissement : document « Signatures email CABM — Architecture et lotissement ». + +## Structure + +``` +AddinOutlook/ +├── addin/ Add-in Outlook (TypeScript, manifeste XML, NAA) +│ ├── manifest.xml Modèle ; la version finale est générée dans dist/ au build +│ └── src/ +│ ├── launchevent/ Gestionnaires OnNewMessageCompose / OnNewAppointmentOrganizer / OnMessageFromChanged +│ ├── taskpane/ Volet « Ma signature » (aperçu, réinsertion, lien portail) +│ └── shared/ Authentification NAA, appel API, cache roamingSettings +├── backend/ Fichiers du back-office, à fusionner avec un Laravel neuf (install-backend.ps1) +│ ├── app/Signature/ Rendu des templates, choix du template, calcul de la signature +│ ├── app/Services/ Client Graph, synchro annuaire, validation des jetons Entra +│ ├── database/ Migration du modèle de données, seeders, templates d'exemple +│ └── tests/ Tests unitaires et fonctionnels (php artisan test) +├── docker/ Image PHP-FPM, Nginx (certificat wildcard), entrypoint +├── docker-compose.yml app + scheduler + nginx + mariadb +├── docs/ +│ ├── 01-entra-app-registrations.md Inscriptions Entra, groupes AD, déploiement Integrated Apps +│ └── 02-deploiement.md VM DMZ, flux Stormshield, exploitation +└── install-backend.ps1 Installation du back-office sur le poste de dev (Laragon) +``` + +## Démarrage sur le poste de dev (Laragon) + +1. Créer les deux inscriptions Entra et les groupes AD : `docs/01-entra-app-registrations.md`. +2. Back-office, dans le terminal Laragon : + ```powershell + cd C:\laragon\www\AddinOutlook + powershell -ExecutionPolicy Bypass -File .\install-backend.ps1 + ``` + Le script crée un Laravel neuf, y ajoute nos fichiers, installe `firebase/php-jwt`, + `laravel/socialite`, `socialiteproviders/microsoft-azure`, prépare `.env` et lance les tests. +3. Compléter `backend\.env` (base MySQL Laragon, identifiants Entra), puis : + ```powershell + cd backend + php artisan migrate --seed + php artisan signature:sync --full + php artisan serve + ``` + Pour un hôte virtuel Laragon, faire pointer la racine web sur `backend\public`. +4. Add-in : + ```powershell + cd ..\addin + copy .env.example .env # compléter + npm install + npm run build # produit dist\ (dont dist\manifest.xml) + npm run validate # validation du manifeste par le service Microsoft + ``` + +L'add-in doit être servi en HTTPS avec un certificat de confiance : les tests se font sur la VM DMZ +(`docs/02-deploiement.md`) avec un chargement manuel du manifeste dans Outlook web. + +## API + +`GET /api/v1/signature?context=new|reply|forward|appointment&mailbox=` +En-tête `Authorization: Bearer ` → `{ html, variant, template, generated_at }`. + +- Template : groupe `signature_mail_*` de plus haute priorité, sinon template par défaut. +- Réponse / transfert : variante choisie par l'agent (courte, complète, aucune), défaut `short`. +- Boîte partagée déclarée : son template, avec ou sans le nom de l'agent selon le réglage de la boîte. +- Bannière : campagne active ciblant un des groupes de l'agent (ou tous), insérée par `{{{banniere}}}`. + +## Syntaxe des templates + +| Syntaxe | Effet | +| --- | --- | +| `{{prenom}}` | Valeur échappée | +| `{{#if mobile}}Mob. {{mobile}}
{{/if}}` | Ligne masquée si le champ est vide | +| `{{#unless x}}…{{/unless}}` | Bloc affiché si le champ est vide | +| `{{{banniere}}}` | Bannière de campagne (HTML généré par le serveur) | + +Variables : `prenom`, `nom`, `nom_complet`, `fonction`, `service`, `organisation`, `bureau`, `telephone`, +`mobile`, `email`, `adresse`, `code_postal`, `ville`, `site_url`, `banniere`, et pour une boîte partagée +`boite_nom`, `boite_email`. + +## Contenu du lot 0 et suite + +Livré : socle complet (modèle de données, synchro Graph delta toutes les 15 min, API signature, +validation des jetons, add-in avec cache de secours, SSO, rôles par groupes AD, tableau de bord, portail en aperçu). + +Lots suivants : écrans d'édition des templates (HTML + éditeur visuel), affectations et priorités, +boîtes partagées, campagnes, champs modifiables par l'agent et préférence de réponse, journal d'audit consultable. diff --git a/addin/assets/icon-128.png b/addin/assets/icon-128.png new file mode 100644 index 0000000..742fa10 Binary files /dev/null and b/addin/assets/icon-128.png differ diff --git a/addin/assets/icon-16.png b/addin/assets/icon-16.png new file mode 100644 index 0000000..d8e00f0 Binary files /dev/null and b/addin/assets/icon-16.png differ diff --git a/addin/assets/icon-32.png b/addin/assets/icon-32.png new file mode 100644 index 0000000..8cf6ae0 Binary files /dev/null and b/addin/assets/icon-32.png differ diff --git a/addin/assets/icon-64.png b/addin/assets/icon-64.png new file mode 100644 index 0000000..443b5c9 Binary files /dev/null and b/addin/assets/icon-64.png differ diff --git a/addin/assets/icon-80.png b/addin/assets/icon-80.png new file mode 100644 index 0000000..742b2c0 Binary files /dev/null and b/addin/assets/icon-80.png differ diff --git a/addin/manifest.xml b/addin/manifest.xml new file mode 100644 index 0000000..8d9dac5 --- /dev/null +++ b/addin/manifest.xml @@ -0,0 +1,161 @@ + + + + 8102c04b-a358-496c-99f3-70fac75e23b5 + 0.1.0.0 + Communauté d'agglomération Béziers Méditerranée + fr-FR + + + + + + + {{ORIGIN}} + https://login.microsoftonline.com + + + + + + + + + + +
+ + + +
+
+ ReadWriteItem + + + + + false + + + + + + + + + + + + + + + + + + + + true + + + + + + +