Merge pull request 'Kanbante 0.46.3 — Déconnexion du menu compte locale et globale (fusion #141)' (#89) from fix/deconnexion-globale-0-46-3 into main
CI / test (push) Failing after 1s

This commit was merged in pull request #89.
This commit is contained in:
2026-11-06 14:27:26 -05:00
4 changed files with 46 additions and 3 deletions
+6
View File
@@ -1,3 +1,9 @@
## 0.46.3 — 2026-11-06 — Déconnexion du menu compte : locale **et** globale (fusion #141)
- **Défaut corrigé** : Kanbante était le seul hôte à brancher l'action `deconnexion` de la barre commune, mais sa branche ne faisait que naviguer vers `GET /logout` — la session locale était détruite, **la session draco (SSO) survivait** : le pont `/auth/draco` rouvrait une session Kanbante sans mot de passe. Une « déconnexion » qui ne déconnectait pas vraiment.
- **Branchement corrigé** (`app/templates/_draco_bar.html`) : destruction d'abord de la session locale (`fetch GET /logout`), puis navigation vers la déconnexion globale de l'émettrice (`GET {draco_urls.obsigate}/sso/logout?return_to={origine}/`, nouvelle route ObsiGate 2.86.0, PR sœur) : le `jti` draco y est révoqué et le cookie effacé sur le domaine parent. Après le parcours, la session de la suite entière et la session locale Kanbante sont terminées ; le retour se fait sur la racine Kanbante (page de connexion).
- **Test** : nouveau `tests/test_deconnexion.py` (marqueurs du branchement + disparition de l'ancien branchement local seul). Périmètre draco/barre : 33 passés (environnement local : variables `NO_PROXY`/proxy de la VM à écarter pour httpx, fonds connu).
## 0.46.2 — 2026-11-06 — Rôles du Hub propagés à Kanbante (HUB-19, suite du pilote ShaarIt 0.7.0)
Version **corrective** au sens du patron du dépôt (pas de fonction nouvelle côté métier : un garde d'accès branché sur le registre du Hub, contrat D3(a) du plan Hub v2).
+1 -1
View File
@@ -1 +1 @@
0.46.2
0.46.3
+18 -2
View File
@@ -152,8 +152,24 @@
donc RETIRÉE : la page /profile elle-même continue
d'exister (jetons API, réglages du compte Kanbante),
mais elle n'est plus la cible du menu compte de la
barre. « Déconnexion » reste relayée, inchangée. */
if (act === "deconnexion") { location.href = "/logout"; return; }
barre. « Déconnexion » : voir la branche ci-dessous. */
if (act === "deconnexion") {
/* Fusion #141 : la déconnexion n'est plus seulement
locale. Détruire d'abord la session Kanbante
(GET /logout), puis naviguer vers la déconnexion
globale de l'émettrice (ObsiGate, GET /sso/logout)
avec retour ici — le jti draco y est révoqué et le
cookie effacé sur le domaine parent. Avant ce
correctif, le seul /logout laissait la session SSO
vivante : le pont /auth/draco rouvrait une session
Kanbante sans mot de passe. */
var retourKb = encodeURIComponent(location.origin + "/");
var cibleKb = "{{ draco_urls.obsigate }}/sso/logout?return_to=" + retourKb;
fetch("/logout", { credentials: "same-origin" })
.catch(function () { })
.finally(function () { location.href = cibleKb; });
return;
}
if (act === "palette") { location.href = "/recherche"; return; }
if (act === "alertes") { if (window.DRACO_ALERTES) { window.DRACO_ALERTES.open(); } else { location.href = "/activity"; } return; }
/* Correctif fusion #70 : action "menu" supprimée avec le bouton trois points (console agent dans le menu de la marque). */
+21
View File
@@ -0,0 +1,21 @@
"""Déconnexion du menu compte (fusion #141) — branchement global.
Kanbante était le seul hôte branché, mais sa branche ne faisait que
naviguer vers son /logout local : la session draco (SSO) survivait
et le pont /auth/draco rouvrait une session sans mot de passe. Le
branchement livré : destruction de la session locale (GET /logout)
puis navigation vers la déconnexion globale de l'émettrice
(GET /sso/logout chez ObsiGate, retour ici).
"""
from pathlib import Path
R = Path(__file__).resolve().parents[1]
def test_gabarit_branche_deconnexion_globale():
gabarit = (R / "app/templates/_draco_bar.html").read_text(encoding="utf-8")
assert 'act === "deconnexion"' in gabarit
assert 'fetch("/logout"' in gabarit
assert "{{ draco_urls.obsigate }}/sso/logout?return_to=" in gabarit
# L'ancien branchement local seul a disparu.
assert 'if (act === "deconnexion") { location.href = "/logout"; return; }' not in gabarit