Files
nas-runbooks/common/MAIL-BROWSER-HERMES-TT.md
T

74 lines
3.9 KiB
Markdown

# Acces boite mail O365 pro (hermes-tt) — historique et decision
## Echec V0 : hermes-mail-proxy (Graph API device code flow)
Tentative : client public officiel Microsoft ("Microsoft Graph Command Line Tools",
client_id 14d82eec-204b-4c2f-b7e8-296a70dab67e) via MSAL device code flow, pour
contourner le besoin d'enregistrement d'appli Azure AD (bloque en self-service sur
le tenant TT). Code deploye port 3060 (hermes-mail-proxy), jamais authentifie :
consentement Mail.Read/Mail.ReadWrite/Mail.Send bloque par l'admin meme sur ce
client pre-consenti. Confirme le 22/07/2026 (curl /auth/status -> authenticated:false
apres plusieurs semaines up). Container arrete et supprime le 22/07/2026, port 3060
libere. Ne pas retenter la voie Graph API sur ce tenant sans intervention admin TT.
## Decision V1 : hermes-mail-browser (session navigateur persistante)
Principe : authentification 100% humaine (Nabil, MFA inclus) via noVNC sur un
navigateur reel tournant sur le NAS (IP maison tunisienne). L'automatisation ne
fait QUE lire sur la session deja ouverte — jamais de re-authentification
automatisee, jamais de credentials stockes en clair.
Stack :
- Microsoft Edge reel (channel msedge, pas Chromium generique) — fingerprint
Sec-CH-UA coherent avec un poste Windows corporate, reduction des heuristiques
de detection cote Defender for Cloud Apps.
- Affichage virtuel Xvfb + x11vnc, expose uniquement en LAN via noVNC (port 8810,
bind 192.168.100.33, AUCUN vhost DSM, AUCUN reverse-proxy).
- Edge lance en persistant (--user-data-dir sur volume monte, profil survit aux
redemarrages) avec remote debugging port 9222 (localhost uniquement).
- API FastAPI (port 3110) se connecte au MEME navigateur via CDP
(connect_over_cdp) — pas d'instance separee — pour lire la boite de reception.
hermes-tt consomme cette API en lecture seule.
Scope Phase 1 (lecture seule) : liste boite de reception (expediteur, objet, date,
lu/non lu, apercu), lecture corps complet d'un mail. Aucune action d'ecriture
(envoi, suppression, deplacement) en V1.
Gestion expiration session : l'API detecte l'atterrissage sur
login.microsoftonline.com et renvoie 409 "reauthentification manuelle requise"
plutot que de tenter quoi que ce soit — Nabil rouvre noVNC, se reauthentifie,
la session persiste a nouveau.
Ports : 3110 (API interne), 8810 (noVNC, LAN uniquement). Conteneur :
hermes-mail-browser, reseau n8n, UID/GID 1026:100, volume data/ pour le profil
navigateur.
Statut : conteneur deploye et sain, en attente authentification manuelle (22/07/2026).
## Mise a jour 22/07/2026 soir — validation phase 1 complete
Bug corrige pendant la validation : premiere version de main.py ouvrait une
nouvelle connexion Playwright a CHAQUE requete. Deux requetes de test annulees
cote client (timeout curl) ont laisse des coroutines bloquees cote serveur,
qui ont ensuite bloque toute nouvelle tentative (verrou de spawn du driver
Playwright). Corrige : connexion unique partagee, ouverte au demarrage de
app (FastAPI lifespan), reutilisee pour toutes les requetes, timeout de
securite 15s sur la connexion CDP.
Piege reseau rencontre en testant : ports 3110/8810 bindes UNIQUEMENT sur
192.168.100.33 (delibere, pas de bind 0.0.0.0). Injoignable depuis un
conteneur Docker (mcp-nas) via 172.17.0.1 ou directement via 192.168.100.33
depuis un container — passer par ssh nas-host pour tout test/usage agent.
Tests reussis en conditions reelles (session Nabil authentifiee) :
- GET /auth/status -> authenticated:true
- GET /inbox?limit=5 -> expediteur/objet/heure/apercu corrects (5/5), y compris
un mail metier Zone Sud reel
- GET /message/0 -> corps complet correctement extrait
Phase 1 (lecture seule boite de reception) fonctionnelle, prete pour usage
par hermes-tt.
Reste a faire : calibrer le 409 sur expiration reelle de session (pas encore
observe) ; evaluer robustesse des selecteurs OWA dans la duree ; envisager
V1.5 (appel API interne OWA via page.evaluate+fetch) si le DOM scraping
devient trop lent.