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) ## 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). 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 donc RETIRÉE : la page /profile elle-même continue
d'exister (jetons API, réglages du compte Kanbante), d'exister (jetons API, réglages du compte Kanbante),
mais elle n'est plus la cible du menu compte de la mais elle n'est plus la cible du menu compte de la
barre. « Déconnexion » reste relayée, inchangée. */ barre. « Déconnexion » : voir la branche ci-dessous. */
if (act === "deconnexion") { location.href = "/logout"; return; } 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 === "palette") { location.href = "/recherche"; return; }
if (act === "alertes") { if (window.DRACO_ALERTES) { window.DRACO_ALERTES.open(); } else { location.href = "/activity"; } 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). */ /* 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