diff --git a/CONFIGURATION_URL_PUBLIQUE.md b/CONFIGURATION_URL_PUBLIQUE.md
index 3b1885c..3b7fce6 100644
--- a/CONFIGURATION_URL_PUBLIQUE.md
+++ b/CONFIGURATION_URL_PUBLIQUE.md
@@ -22,7 +22,7 @@ nano .env
### 3. Ajouter la variable APP_PUBLIC_URL
Ajoutez cette ligne dans le fichier `.env` :
```
-APP_PUBLIC_URL=https://formations.itinova.org
+APP_PUBLIC_URL=https://formations-itinova.santinova-soft.org
```
### 4. Redémarrer l'application
@@ -38,7 +38,7 @@ sudo systemctl restart formation-manager-itinova
1. Connectez-vous à l'interface formateur
2. Générez un nouveau QR code pour une séquence
3. Scannez le QR code avec votre téléphone
-4. Vérifiez que l'URL commence par `https://formations.itinova.org/emargement/...`
+4. Vérifiez que l'URL commence par `https://formations-itinova.santinova-soft.org/emargement/...`
## Alternative : Utiliser DOMAIN_NAME
Si vous préférez, vous pouvez aussi utiliser :
diff --git a/HTTPS_SETUP.md b/HTTPS_SETUP.md
index 693a1c5..c586cb4 100644
--- a/HTTPS_SETUP.md
+++ b/HTTPS_SETUP.md
@@ -101,7 +101,7 @@ server {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_cache_bypass $http_upgrade;
-
+
# Timeouts
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
@@ -170,12 +170,12 @@ Si tout se passe bien, vous verrez un message de succès indiquant que le certif
Testez que votre site est accessible en HTTPS :
```bash
-curl -I https://formations.itinova.org
+curl -I https://formations-itinova.santinova-soft.org
```
Vous devriez voir une réponse HTTP/2 200 OK.
-Ouvrez votre navigateur et accédez à `https://formations.itinova.org`. Vous devriez voir :
+Ouvrez votre navigateur et accédez à `https://formations-itinova.santinova-soft.org`. Vous devriez voir :
- Un cadenas vert dans la barre d'adresse
- Votre application fonctionnant normalement
- Aucun avertissement de sécurité
@@ -387,6 +387,6 @@ Pour aller plus loin, vous pouvez configurer un pare-feu (ufw), mettre en place
---
-**Auteur** : Manus AI
-**Date** : 23 novembre 2025
+**Auteur** : Manus AI
+**Date** : 23 novembre 2025
**Version** : 1.0
diff --git a/app.json b/app.json
index a1ccb5a..f592566 100644
--- a/app.json
+++ b/app.json
@@ -3,8 +3,8 @@
"name": "Formation Manager",
"category": "ITINOVA",
"urls": {
- "recette": "https://formations.recette.santinova-soft.org",
- "prod": "https://formations.santinova-soft.org"
+ "recette": "https://formations-itinova.recette.santinova-soft.org",
+ "prod": "https://formations-itinova.santinova-soft.org"
},
"containerName": "formation-manager-itinova",
"image": "images/formation-manager.png",
diff --git a/client/src/pages/AdminEmailTemplates.tsx b/client/src/pages/AdminEmailTemplates.tsx
index 28982e3..605bc08 100644
--- a/client/src/pages/AdminEmailTemplates.tsx
+++ b/client/src/pages/AdminEmailTemplates.tsx
@@ -163,7 +163,7 @@ export default function AdminEmailTemplates() {
.replace(/\{\{formateur\}\}/g, 'Jean Martin')
.replace(/\{\{couleurPrincipale\}\}/g, formData.couleurPrincipale)
.replace(/\{\{couleurSecondaire\}\}/g, formData.couleurSecondaire)
- .replace(/\{\{lienReinitialisation\}\}/g, 'https://formations.itinova.org/reset-password/token123')
+ .replace(/\{\{lienReinitialisation\}\}/g, 'https://formations-itinova.santinova-soft.org/reset-password/token123')
.replace(/\{\{datesHTML\}\}/g, '
Date 1 : lundi 15 janvier 2025
Date 2 : mardi 16 janvier 2025
');
};
@@ -369,7 +369,7 @@ export default function AdminEmailTemplates() {
Corps du message
-
+
{/* Boutons de variables dynamiques */}
({ loading: false });
-
+
// Initialiser les valeurs quand les données sont chargées
useEffect(() => {
if (parametres) {
@@ -60,7 +60,7 @@ export default function AdminParametres() {
const handleSubmit = (e: React.FormEvent) => {
e.preventDefault();
-
+
// Validation de l'URL
try {
new URL(urlPublique);
@@ -129,7 +129,7 @@ export default function AdminParametres() {
{
setUrlPublique(e.target.value);
@@ -168,8 +168,8 @@ export default function AdminParametres() {
- Cette URL est utilisée pour générer les QR codes d'émargement.
- Exemple : https://formations.itinova.org (sans slash à la fin)
+ Cette URL est utilisée pour générer les QR codes d'émargement.
+ Exemple : https://formations-itinova.santinova-soft.org (sans slash à la fin)
@@ -225,8 +225,8 @@ export default function AdminParametres() {
-
diff --git a/docker-compose.yml b/docker-compose.yml
index 2139489..0e52444 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -18,6 +18,7 @@ services:
env_file:
- .env
environment:
+ APP_PUBLIC_URL: https://formations-itinova.santinova-soft.org
NODE_ENV: production
PORT: 3000
TRUST_PROXY: 1
@@ -29,7 +30,7 @@ services:
- "traefik.enable=true"
- "traefik.docker.network=web"
- "traefik.http.routers.formations-prod.entrypoints=websecure"
- - "traefik.http.routers.formations-prod.rule=Host(`formations.santinova-soft.org`)"
+ - "traefik.http.routers.formations-prod.rule=Host(`formations.santinova-soft.org`) || Host(`formations-itinova.santinova-soft.org`)"
- "traefik.http.routers.formations-prod.tls=true"
- "traefik.http.routers.formations-prod.tls.certresolver=letsencrypt"
- "traefik.http.routers.formations-prod.service=formations-prod-svc"
diff --git a/drizzle/schema.ts b/drizzle/schema.ts
index e4f797e..25a8803 100644
--- a/drizzle/schema.ts
+++ b/drizzle/schema.ts
@@ -571,7 +571,7 @@ export type InsertLogNotification = typeof logsNotifications.$inferInsert;
export const parametres = mysqlTable("parametres", {
id: int("id").autoincrement().primaryKey(),
/** URL publique de l'application pour les QR codes d'émargement */
- urlPublique: varchar("urlPublique", { length: 500 }).notNull().default("https://formations.itinova.org"),
+ urlPublique: varchar("urlPublique", { length: 500 }).notNull().default("https://formations-itinova.santinova-soft.org"),
/** Délai d'expiration des QR codes en minutes (par défaut 30 minutes) */
delaiExpirationQR: int("delaiExpirationQR").default(30).notNull(),
/** Durée de validité des tokens d'émargement en heures (par défaut 24 heures) */
diff --git a/fix-all-database-schema-FINAL.sh b/fix-all-database-schema-FINAL.sh
index b06ba72..77c9ede 100755
--- a/fix-all-database-schema-FINAL.sh
+++ b/fix-all-database-schema-FINAL.sh
@@ -237,7 +237,7 @@ else
fi
execute_sql "Ajout de la colonne urlPublique" \
-"ALTER TABLE parametres ADD COLUMN urlPublique VARCHAR(500) NOT NULL DEFAULT 'https://formations.itinova.org' AFTER id;"
+"ALTER TABLE parametres ADD COLUMN urlPublique VARCHAR(500) NOT NULL DEFAULT 'https://formations-itinova.santinova-soft.org' AFTER id;"
execute_sql "Ajout de la colonne delaiExpirationQR" \
"ALTER TABLE parametres ADD COLUMN delaiExpirationQR INT NOT NULL DEFAULT 30 AFTER urlPublique;"
diff --git a/scripts/configure-public-url.sh b/scripts/configure-public-url.sh
index abc3c35..8513187 100755
--- a/scripts/configure-public-url.sh
+++ b/scripts/configure-public-url.sh
@@ -20,7 +20,7 @@ if [ ! -f "$ENV_FILE" ]; then
fi
# Demander l'URL publique
-echo "Entrez l'URL publique de votre application (ex: https://formations.itinova.org) :"
+echo "Entrez l'URL publique de votre application (ex: https://formations-itinova.santinova-soft.org) :"
read PUBLIC_URL
# Vérifier que l'URL commence par http:// ou https://
diff --git a/server/__tests__/passwordResetEmailTemplate.test.ts b/server/__tests__/passwordResetEmailTemplate.test.ts
index fefd54c..6bca97b 100644
--- a/server/__tests__/passwordResetEmailTemplate.test.ts
+++ b/server/__tests__/passwordResetEmailTemplate.test.ts
@@ -17,7 +17,7 @@ describe("modèle d’e-mail de réinitialisation", () => {
});
it("substitue le lien de réinitialisation dans le contenu du modèle", () => {
- const link = "https://formations.recette.santinova-soft.org/reset-password?token=abc123";
+ const link = "https://formations-itinova.recette.santinova-soft.org/reset-password?token=abc123";
const result = replaceEmailVariables(
'Réinitialiser ',
{ lienReinitialisation: link },
@@ -38,7 +38,7 @@ describe("modèle d’e-mail de réinitialisation", () => {
});
const { generateEmailFromTemplate } = await import("../emailTemplateGenerator");
- const resetLink = "https://formations.recette.santinova-soft.org/reset-password?token=abc123";
+ const resetLink = "https://formations-itinova.recette.santinova-soft.org/reset-password?token=abc123";
const html = await generateEmailFromTemplate(
"reset_password",
`Réinitialiser `,
diff --git a/server/parametresDb.ts b/server/parametresDb.ts
index 92df487..b8b2cd8 100644
--- a/server/parametresDb.ts
+++ b/server/parametresDb.ts
@@ -11,17 +11,17 @@ export async function getParametres() {
if (!db) throw new Error("Database not available");
const result = await db.select().from(parametres).limit(1);
-
+
if (result.length === 0) {
// Créer les paramètres par défaut
await db.insert(parametres).values({
- urlPublique: "https://formations.itinova.org",
+ urlPublique: "https://formations-itinova.santinova-soft.org",
});
-
+
const newResult = await db.select().from(parametres).limit(1);
return newResult[0];
}
-
+
return result[0];
}
@@ -44,7 +44,7 @@ export async function updateParametres(
if (!db) throw new Error("Database not available");
const params = await getParametres();
-
+
// Enregistrer l'historique pour chaque champ modifié
for (const [key, value] of Object.entries(updates)) {
const oldValue = params[key as keyof typeof params];
@@ -58,12 +58,12 @@ export async function updateParametres(
});
}
}
-
+
// Mettre à jour les paramètres
await db.update(parametres)
.set(updates)
.where(eq(parametres.id, params.id));
-
+
return getParametres();
}
@@ -113,8 +113,8 @@ export async function testerUrl(url: string): Promise<{ accessible: boolean; mes
return {
accessible: response.ok,
- message: response.ok
- ? "L'URL est accessible"
+ message: response.ok
+ ? "L'URL est accessible"
: `L'URL a retourné une erreur HTTP ${response.status}`,
statusCode: response.status
};
@@ -125,7 +125,7 @@ export async function testerUrl(url: string): Promise<{ accessible: boolean; mes
message: "Format d'URL invalide"
};
}
-
+
return {
accessible: false,
message: `Erreur lors du test: ${error instanceof Error ? error.message : 'Erreur inconnue'}`
diff --git a/todo.md b/todo.md
index f84a45b..a2cd47d 100644
--- a/todo.md
+++ b/todo.md
@@ -689,7 +689,7 @@
- [x] Créer la page AdminParametres
- [x] Ajouter le lien dans le menu après "Configuration SMTP"
- [x] Modifier qrCodeGenerator pour utiliser l'URL de la BDD
-- [x] Définir l'URL par défaut : https://formations.itinova.org
+- [x] Définir l'URL par défaut : https://formations-itinova.santinova-soft.org
- [x] Ajouter DashboardLayout à la page AdminParametres
- [x] Ajouter DashboardLayout à la page FormateurEmargement