Checkpoint: Correction du lien QR code pour utiliser l'URL publique
Modifications apportées : - Création de server/_core/appUrl.ts : fonction getAppBaseUrl() pour gérer l'URL de base - Modification de server/qrCodeGenerator.ts : utilise getAppBaseUrl() au lieu de localhost - Support de plusieurs variables d'environnement (APP_PUBLIC_URL, DOMAIN_NAME, SERVER_URL) - Création du guide CONFIGURATION_URL_PUBLIQUE.md avec instructions détaillées - Création du script configure-public-url.sh pour faciliter la configuration Configuration requise sur le serveur VPS : Ajouter dans le fichier .env : APP_PUBLIC_URL=https://formations.itinova.org Puis redémarrer l'application avec PM2 ou systemd. Les QR codes générés utiliseront maintenant l'URL publique configurée au lieu de localhost.
This commit is contained in:
32
server/_core/appUrl.ts
Normal file
32
server/_core/appUrl.ts
Normal file
@@ -0,0 +1,32 @@
|
||||
/**
|
||||
* Récupère l'URL de base de l'application
|
||||
* En production, utilise l'URL publique configurée
|
||||
* En développement, utilise localhost
|
||||
*/
|
||||
export function getAppBaseUrl(): string {
|
||||
// Si une URL publique est configurée, l'utiliser
|
||||
if (process.env.APP_PUBLIC_URL) {
|
||||
return process.env.APP_PUBLIC_URL;
|
||||
}
|
||||
|
||||
// En production, essayer de détecter l'URL depuis les variables d'environnement Manus
|
||||
if (process.env.NODE_ENV === "production") {
|
||||
// Pour les applications Manus déployées, l'URL est généralement disponible
|
||||
// via les variables d'environnement du système
|
||||
const port = process.env.PORT || 3000;
|
||||
|
||||
// Si on est sur un serveur VPS avec un domaine configuré
|
||||
if (process.env.DOMAIN_NAME) {
|
||||
return `https://${process.env.DOMAIN_NAME}`;
|
||||
}
|
||||
|
||||
// Sinon, utiliser l'URL du serveur si disponible
|
||||
if (process.env.SERVER_URL) {
|
||||
return process.env.SERVER_URL;
|
||||
}
|
||||
}
|
||||
|
||||
// Par défaut, utiliser localhost (développement)
|
||||
const port = process.env.PORT || 3000;
|
||||
return `http://localhost:${port}`;
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
import QRCode from "qrcode";
|
||||
import { randomBytes } from "crypto";
|
||||
import { getAppBaseUrl } from "./_core/appUrl";
|
||||
|
||||
/**
|
||||
* Générer un token unique pour le QR code
|
||||
@@ -15,7 +16,8 @@ export function generateQRToken(): string {
|
||||
*/
|
||||
export async function generateQRCodeDataURL(token: string): Promise<string> {
|
||||
// URL complète pour scanner le QR code
|
||||
const url = `${process.env.VITE_APP_URL || "http://localhost:3000"}/emargement/${token}`;
|
||||
const baseUrl = getAppBaseUrl();
|
||||
const url = `${baseUrl}/emargement/${token}`;
|
||||
|
||||
try {
|
||||
const qrCodeDataURL = await QRCode.toDataURL(url, {
|
||||
@@ -42,7 +44,8 @@ export async function generateQRCodeDataURL(token: string): Promise<string> {
|
||||
* @returns Un buffer PNG du QR code
|
||||
*/
|
||||
export async function generateQRCodeBuffer(token: string): Promise<Buffer> {
|
||||
const url = `${process.env.VITE_APP_URL || "http://localhost:3000"}/emargement/${token}`;
|
||||
const baseUrl = getAppBaseUrl();
|
||||
const url = `${baseUrl}/emargement/${token}`;
|
||||
|
||||
try {
|
||||
const buffer = await QRCode.toBuffer(url, {
|
||||
|
||||
Reference in New Issue
Block a user