forked from FroSteel/Planification
v5.0.12 — Stabilité
This commit is contained in:
+21
-12
@@ -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)
|
* 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
|
* ou externe (seul itsma.vd.ch accessible). Fait un fetch avec mode "no-cors"
|
||||||
* court sur l'URL interne : si ça répond, on est interne ; sinon externe.
|
* 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
|
* Le résultat est mis en cache dans chrome.storage.local pendant 1h pour
|
||||||
* éviter de refaire le test à chaque démarrage.
|
* éviter de refaire le test à chaque démarrage.
|
||||||
@@ -308,7 +314,7 @@ async function extendSessionKeepAlive(origin, phpsessid) {
|
|||||||
* @returns {Promise<"internal"|"external">}
|
* @returns {Promise<"internal"|"external">}
|
||||||
*/
|
*/
|
||||||
async function detectNetworkContext(force = false) {
|
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
|
const CACHE_MAX_AGE_MS = 60 * 60 * 1000; // 1h
|
||||||
|
|
||||||
if (!force) {
|
if (!force) {
|
||||||
@@ -322,25 +328,28 @@ async function detectNetworkContext(force = false) {
|
|||||||
} catch (e) {}
|
} catch (e) {}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Test HEAD sur l'URL interne avec timeout 2.5 sec
|
|
||||||
const controller = new AbortController();
|
const controller = new AbortController();
|
||||||
const timer = setTimeout(() => controller.abort(), 2500);
|
const timer = setTimeout(() => controller.abort(), 2500);
|
||||||
let context = "external";
|
let context = "external";
|
||||||
try {
|
try {
|
||||||
console.log("[bg] detectNetworkContext : test de itsma.etat-de-vaud.ch...");
|
console.log("[bg] detectNetworkContext : test de itsma.etat-de-vaud.ch (mode no-cors)...");
|
||||||
const r = await fetch("https://itsma.etat-de-vaud.ch/", {
|
// v5.0.11 (fix) : no-cors évite l'erreur CORS de la redirection SSO.
|
||||||
method: "HEAD",
|
// 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,
|
signal: controller.signal,
|
||||||
credentials: "omit" // pas besoin des cookies pour ce test
|
credentials: "omit",
|
||||||
|
cache: "no-store"
|
||||||
});
|
});
|
||||||
clearTimeout(timer);
|
clearTimeout(timer);
|
||||||
// Tout statut HTTP (même 302, 404, 403) indique que le serveur est joignable
|
console.log("[bg] detectNetworkContext : interne accessible");
|
||||||
console.log("[bg] detectNetworkContext : interne accessible (status=" + r.status + ")");
|
|
||||||
context = "internal";
|
context = "internal";
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
clearTimeout(timer);
|
clearTimeout(timer);
|
||||||
// Timeout, DNS unreachable, erreur réseau = domaine interne inaccessible
|
// AbortError (timeout) ou TypeError (DNS unreachable / réseau coupé)
|
||||||
console.log("[bg] detectNetworkContext : interne inaccessible, on est en externe (" + err.name + ")");
|
console.log("[bg] detectNetworkContext : interne inaccessible → externe (" + err.name + ": " + err.message + ")");
|
||||||
context = "external";
|
context = "external";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"manifest_version": 3,
|
"manifest_version": 3,
|
||||||
"name": "Planification",
|
"name": "Planification",
|
||||||
"version": "5.0.11",
|
"version": "5.0.12",
|
||||||
"description": "Vue claire et rapide du planning des techniciens EasyVista. Regroupe interventions et réservations par tech, affiche horaires, contact, lieu, catégorie et statut en un coup d'œil.",
|
"description": "Vue claire et rapide du planning des techniciens EasyVista. Regroupe interventions et réservations par tech, affiche horaires, contact, lieu, catégorie et statut en un coup d'œil.",
|
||||||
"permissions": ["activeTab", "scripting", "storage", "tabs", "alarms"],
|
"permissions": ["activeTab", "scripting", "storage", "tabs", "alarms"],
|
||||||
"host_permissions": [
|
"host_permissions": [
|
||||||
|
|||||||
Reference in New Issue
Block a user