From 32b0d5edc4a99bd44531d3e8b9214dcb08591a26 Mon Sep 17 00:00:00 2001 From: Santinova Deployment Date: Wed, 28 Oct 2026 18:33:09 +0000 Subject: [PATCH] fix(formation): redirige le domaine historique vers Itinova Co-authored-by: Manus --- docker-compose.yml | 10 +++++++++ test/traefik-redirect-contract.test.mjs | 30 +++++++++++++++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 test/traefik-redirect-contract.test.mjs diff --git a/docker-compose.yml b/docker-compose.yml index 80f55a9..09f3b22 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -39,6 +39,16 @@ services: - "traefik.http.routers.formations-itinova.tls=true" - "traefik.http.routers.formations-itinova.tls.certresolver=letsencrypt" - "traefik.http.routers.formations-itinova.service=formations-prod-svc" + # Alias historique : conserve le chemin et redirige définitivement vers l'URL Itinova canonique. + - "traefik.http.routers.formations-legacy-redirect.entrypoints=websecure" + - "traefik.http.routers.formations-legacy-redirect.rule=Host(`formations.santinova-soft.org`)" + - "traefik.http.routers.formations-legacy-redirect.tls=true" + - "traefik.http.routers.formations-legacy-redirect.tls.certresolver=letsencrypt" + - "traefik.http.routers.formations-legacy-redirect.middlewares=formations-legacy-redirect" + - "traefik.http.routers.formations-legacy-redirect.service=formations-prod-svc" + - "traefik.http.middlewares.formations-legacy-redirect.redirectregex.regex=^https://formations\\.santinova-soft\\.org/(.*)" + - "traefik.http.middlewares.formations-legacy-redirect.redirectregex.replacement=https://formations-itinova.santinova-soft.org/$${1}" + - "traefik.http.middlewares.formations-legacy-redirect.redirectregex.permanent=true" - "traefik.http.services.formations-prod-svc.loadbalancer.server.port=3000" networks: diff --git a/test/traefik-redirect-contract.test.mjs b/test/traefik-redirect-contract.test.mjs new file mode 100644 index 0000000..628206b --- /dev/null +++ b/test/traefik-redirect-contract.test.mjs @@ -0,0 +1,30 @@ +import assert from "node:assert/strict"; +import { readFileSync } from "node:fs"; + +const compose = readFileSync(new URL("../docker-compose.yml", import.meta.url), "utf8"); + +assert.match( + compose, + /traefik\.http\.routers\.formations-legacy-redirect\.rule=Host\(`formations\.santinova-soft\.org`\)/, + "Le domaine historique doit avoir son routeur Traefik dédié.", +); +assert.match( + compose, + /traefik\.http\.routers\.formations-legacy-redirect\.middlewares=formations-legacy-redirect/, + "Le routeur historique doit appliquer le middleware de redirection.", +); +assert.match( + compose, + /traefik\.http\.middlewares\.formations-legacy-redirect\.redirectregex\.regex=\^https:\/\/formations\\\\\.santinova-soft\\\\\.org\/\(\.\*\)/, + "La redirection doit cibler uniquement le domaine historique en HTTPS.", +); +assert.match( + compose, + /traefik\.http\.middlewares\.formations-legacy-redirect\.redirectregex\.replacement=https:\/\/formations-itinova\.santinova-soft\.org\/\$\$\{1\}/, + "La redirection doit conserver le chemin vers l’URL canonique Itinova.", +); +assert.match( + compose, + /traefik\.http\.middlewares\.formations-legacy-redirect\.redirectregex\.permanent=true/, + "La redirection doit être permanente.", +);