feat: normaliser les URL production par entité
Some checks failed
Validation applicative / TypeScript, tests et build (push) Failing after 1m35s
Some checks failed
Validation applicative / TypeScript, tests et build (push) Failing after 1m35s
This commit is contained in:
@@ -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 :
|
||||
|
||||
@@ -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é
|
||||
|
||||
4
app.json
4
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",
|
||||
|
||||
@@ -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, '<div class="date-item"><strong>Date 1 :</strong> lundi 15 janvier 2025</div><div class="date-item"><strong>Date 2 :</strong> mardi 16 janvier 2025</div>');
|
||||
};
|
||||
|
||||
|
||||
@@ -129,7 +129,7 @@ export default function AdminParametres() {
|
||||
<Input
|
||||
id="urlPublique"
|
||||
type="url"
|
||||
placeholder="https://formations.itinova.org"
|
||||
placeholder="https://formations-itinova.santinova-soft.org"
|
||||
value={urlPublique}
|
||||
onChange={(e) => {
|
||||
setUrlPublique(e.target.value);
|
||||
@@ -169,7 +169,7 @@ export default function AdminParametres() {
|
||||
</div>
|
||||
<p className="text-sm text-muted-foreground">
|
||||
Cette URL est utilisée pour générer les QR codes d'émargement.
|
||||
Exemple : https://formations.itinova.org (sans slash à la fin)
|
||||
Exemple : https://formations-itinova.santinova-soft.org (sans slash à la fin)
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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) */
|
||||
|
||||
@@ -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;"
|
||||
|
||||
@@ -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://
|
||||
|
||||
@@ -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(
|
||||
'<a href="{{lienReinitialisation}}">Réinitialiser</a>',
|
||||
{ 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",
|
||||
`<a href="${resetLink}">Réinitialiser</a>`,
|
||||
|
||||
@@ -15,7 +15,7 @@ export async function getParametres() {
|
||||
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);
|
||||
|
||||
2
todo.md
2
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
|
||||
|
||||
Reference in New Issue
Block a user