ObsiGate 2.86.0 — BUG-122 : déconnexion globale navigable GET /sso/logout (fusion #141) #71

Merged
bruno merged 2 commits from fix/deconnexion-globale-bug-122 into main 2026-11-06 14:26:44 -05:00
Owner

BUG-122 — Point d'entrée navigable de la déconnexion globale

Carte fusion #141 (signalement de Bruno, 2026-11-06 : « Déconnexion » du menu compte inerte depuis la console Spark).

Constat

La barre commune relaie l'action deconnexion à l'hôte ; aucun hôte ne la branchait (console, ObsiGate, Flowdeck, TikTak, ShaarIt, Hub — Kanbante ne détruisait que sa session locale). Et la déconnexion globale d'ObsiGate (ACC-3.1, #216) n'était de toute façon pas atteignable par les sœurs : POST /api/auth/logout n'est appelable qu'en same-origin depuis l'interface d'ObsiGate.

Cette PR (côté émettrice)

  • GET /sso/logout?return_to= (backend/routers/sso.py), symétrique de /sso/authorize : exécute la déconnexion globale puis redirige (302) vers le return_to validé par la liste blanche existante (validate_return_to : https + *.dracodev.net, repli « / »). Idempotente sans session.
  • Logique partagée : le corps de POST /api/auth/logout est extrait dans apply_global_logout(request, response) (backend/auth/router.py) — les deux entrées terminent exactement la même session : jetons natifs refresh/access révoqués, jti draco révoqué, cookie draco_session effacé sur le domaine parent.
  • Docs (workflow du dépôt) : registre docs/ISSUES_TODOLIST.md (BUG-122 + journal ; BUG-121 laissé réservé au bug de couleur « Secrets » proposé), fiche docs/features/deconnexion-globale-bug-122.md, CHANGELOG [2.86.0], bump 2.85.1 → 2.86.0 via scripts/bump_version.py --minor --changelog (VERSION + dérivés synchronisés).

Tests

  • tests/test_draco_session.py : 34 passés (+3 : révocation du jti + redirection + cookie effacé, liste blanche, idempotence).
  • Périmètre voisin : test_version.py + test_comptes_machine.py verts (105 passés au total sur les trois fichiers).
  • ruff et mypy : 0 erreur sur les fichiers touchés.
  • Suite complète lancée en local ; le seul échec relevé à ce stade (test_agent_loop) est reproduit à l'identique sur l'arbre vierge (fonds préexistant, sans rapport).

Suite

Les hôtes branchent leur action deconnexion sur cette route (PR sœurs : console 0.75.7, Flowdeck, TikTak, Kanbante, ShaarIt ; Hub en direct sur main). Aucune fusion sans l'ordre de Bruno. Redéploiement Docker requis après fusion + release.

## BUG-122 — Point d'entrée navigable de la déconnexion globale Carte fusion **#141** (signalement de Bruno, 2026-11-06 : « Déconnexion » du menu compte inerte depuis la console Spark). ### Constat La barre commune relaie l'action `deconnexion` à l'hôte ; aucun hôte ne la branchait (console, ObsiGate, Flowdeck, TikTak, ShaarIt, Hub — Kanbante ne détruisait que sa session locale). Et la déconnexion globale d'ObsiGate (ACC-3.1, #216) n'était de toute façon pas atteignable par les sœurs : `POST /api/auth/logout` n'est appelable qu'en same-origin depuis l'interface d'ObsiGate. ### Cette PR (côté émettrice) - **`GET /sso/logout?return_to=`** (`backend/routers/sso.py`), symétrique de `/sso/authorize` : exécute la déconnexion globale puis redirige (302) vers le `return_to` validé par la liste blanche existante (`validate_return_to` : https + `*.dracodev.net`, repli « / »). Idempotente sans session. - **Logique partagée** : le corps de `POST /api/auth/logout` est extrait dans `apply_global_logout(request, response)` (`backend/auth/router.py`) — les deux entrées terminent exactement la même session : jetons natifs refresh/access révoqués, `jti` draco révoqué, cookie `draco_session` effacé sur le domaine parent. - **Docs (workflow du dépôt)** : registre `docs/ISSUES_TODOLIST.md` (BUG-122 + journal ; BUG-121 laissé réservé au bug de couleur « Secrets » proposé), fiche `docs/features/deconnexion-globale-bug-122.md`, CHANGELOG [2.86.0], bump 2.85.1 → **2.86.0** via `scripts/bump_version.py --minor --changelog` (VERSION + dérivés synchronisés). ### Tests - `tests/test_draco_session.py` : **34 passés** (+3 : révocation du jti + redirection + cookie effacé, liste blanche, idempotence). - Périmètre voisin : `test_version.py` + `test_comptes_machine.py` verts (105 passés au total sur les trois fichiers). - `ruff` et `mypy` : 0 erreur sur les fichiers touchés. - Suite complète lancée en local ; le seul échec relevé à ce stade (`test_agent_loop`) est **reproduit à l'identique sur l'arbre vierge** (fonds préexistant, sans rapport). ### Suite Les hôtes branchent leur action `deconnexion` sur cette route (PR sœurs : console 0.75.7, Flowdeck, TikTak, Kanbante, ShaarIt ; Hub en direct sur main). **Aucune fusion sans l'ordre de Bruno.** Redéploiement Docker requis après fusion + release.
bruno added 1 commit 2026-11-06 13:56:22 -05:00
fix: point d'entrée navigable de la déconnexion globale GET /sso/logout (BUG-122, fusion #141) — 2.86.0
CI / lint (pull_request) Successful in 1m17s
CI / security (pull_request) Successful in 16s
CI / test (pull_request) Successful in 3m40s
CI / build (pull_request) Successful in 32s
CI / e2e (pull_request) Failing after 15m40s
b8949b2ddc
bruno added 1 commit 2026-11-06 14:07:33 -05:00
fix: brancher aussi la barre d'ObsiGate sur /sso/logout (BUG-122, fusion #141)
CI / lint (pull_request) Successful in 1m21s
CI / security (pull_request) Successful in 16s
CI / test (pull_request) Successful in 3m37s
CI / build (pull_request) Successful in 11s
CI / e2e (pull_request) Failing after 17m11s
5a5d7a5c59
Author
Owner

Suite complète comparée (mise à jour) : branche 1932 passés / 42 échecs contre arbre vierge 1928 passés / 43 échecs dans le même environnement — la liste des échecs est identique (fonds historique de 42) ; l'écart d'un échec côté vierge est un artefact de la copie de comparaison (test_desktop_files_match, le répertoire desktop/ exclu de cette copie). La branche ajoute 4 tests, tous verts (3 × /sso/logout, 1 × branchement de la barre d'ObsiGate, second commit).

Preuve de rendu réel (pile locale ObsiGate 2.86.0 + console 0.75.7) : voir la carte fusion #141.

**Suite complète comparée (mise à jour)** : branche **1932 passés / 42 échecs** contre arbre vierge **1928 passés / 43 échecs** dans le même environnement — la liste des échecs est **identique** (fonds historique de 42) ; l'écart d'un échec côté vierge est un artefact de la copie de comparaison (`test_desktop_files_match`, le répertoire `desktop/` exclu de cette copie). La branche ajoute 4 tests, tous verts (3 × `/sso/logout`, 1 × branchement de la barre d'ObsiGate, second commit). Preuve de rendu réel (pile locale ObsiGate 2.86.0 + console 0.75.7) : voir la carte fusion #141.
bruno merged commit 854ff0f904 into main 2026-11-06 14:26:44 -05:00
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Projets/ObsiGate#71