v5.0.12 — Stabilité

This commit is contained in:
Quentin Rouiller
2026-04-21 15:49:08 +02:00
parent 6794360887
commit 909ddb8301
2 changed files with 22 additions and 13 deletions
+21 -12
View File
@@ -298,8 +298,14 @@ async function extendSessionKeepAlive(origin, phpsessid) {
/**
* Détecte si on est sur le réseau interne (itsma.etat-de-vaud.ch accessible)
* ou externe (seul itsma.vd.ch accessible). Fait un HEAD test avec timeout
* court sur l'URL interne : si ça répond, on est interne ; sinon externe.
* ou externe (seul itsma.vd.ch accessible). Fait un fetch avec mode "no-cors"
* sur l'URL interne : si ça répond (même redirection SSO), on est interne.
* Si ça échoue (DNS unreachable, timeout), on est externe.
*
* v5.0.11 (fix) : mode "no-cors" pour éviter que l'erreur CORS de la
* redirection SSO (itsma.etat-de-vaud.ch → portail.etat-de-vaud.ch/sso/)
* soit interprétée comme un échec de connectivité. Au bureau, la redirection
* SSO passe → le fetch termine → on sait qu'on est interne.
*
* Le résultat est mis en cache dans chrome.storage.local pendant 1h pour
* éviter de refaire le test à chaque démarrage.
@@ -308,7 +314,7 @@ async function extendSessionKeepAlive(origin, phpsessid) {
* @returns {Promise<"internal"|"external">}
*/
async function detectNetworkContext(force = false) {
const CACHE_KEY = "network_context";
const CACHE_KEY = "network_context_v2"; // v5.0.12 : nouvelle clé pour invalider le cache fautif v5.0.11
const CACHE_MAX_AGE_MS = 60 * 60 * 1000; // 1h
if (!force) {
@@ -322,25 +328,28 @@ async function detectNetworkContext(force = false) {
} catch (e) {}
}
// Test HEAD sur l'URL interne avec timeout 2.5 sec
const controller = new AbortController();
const timer = setTimeout(() => controller.abort(), 2500);
let context = "external";
try {
console.log("[bg] detectNetworkContext : test de itsma.etat-de-vaud.ch...");
const r = await fetch("https://itsma.etat-de-vaud.ch/", {
method: "HEAD",
console.log("[bg] detectNetworkContext : test de itsma.etat-de-vaud.ch (mode no-cors)...");
// v5.0.11 (fix) : no-cors évite l'erreur CORS de la redirection SSO.
// Si le fetch termine sans throw, le serveur est joignable = interne.
// Si timeout ou DNS fail, throw → externe.
await fetch("https://itsma.etat-de-vaud.ch/", {
method: "GET",
mode: "no-cors",
signal: controller.signal,
credentials: "omit" // pas besoin des cookies pour ce test
credentials: "omit",
cache: "no-store"
});
clearTimeout(timer);
// Tout statut HTTP (même 302, 404, 403) indique que le serveur est joignable
console.log("[bg] detectNetworkContext : interne accessible (status=" + r.status + ")");
console.log("[bg] detectNetworkContext : interne accessible");
context = "internal";
} catch (err) {
clearTimeout(timer);
// Timeout, DNS unreachable, erreur réseau = domaine interne inaccessible
console.log("[bg] detectNetworkContext : interne inaccessible, on est en externe (" + err.name + ")");
// AbortError (timeout) ou TypeError (DNS unreachable / réseau coupé)
console.log("[bg] detectNetworkContext : interne inaccessible externe (" + err.name + ": " + err.message + ")");
context = "external";
}