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.
64 lines
1.6 KiB
TypeScript
64 lines
1.6 KiB
TypeScript
import QRCode from "qrcode";
|
|
import { randomBytes } from "crypto";
|
|
import { getAppBaseUrl } from "./_core/appUrl";
|
|
|
|
/**
|
|
* Générer un token unique pour le QR code
|
|
*/
|
|
export function generateQRToken(): string {
|
|
return randomBytes(32).toString("hex");
|
|
}
|
|
|
|
/**
|
|
* Générer un QR code en base64 à partir d'un token
|
|
* @param token Le token unique de la séquence
|
|
* @returns Une image QR code en base64 (data URL)
|
|
*/
|
|
export async function generateQRCodeDataURL(token: string): Promise<string> {
|
|
// URL complète pour scanner le QR code
|
|
const baseUrl = getAppBaseUrl();
|
|
const url = `${baseUrl}/emargement/${token}`;
|
|
|
|
try {
|
|
const qrCodeDataURL = await QRCode.toDataURL(url, {
|
|
errorCorrectionLevel: "H",
|
|
type: "image/png",
|
|
width: 400,
|
|
margin: 2,
|
|
color: {
|
|
dark: "#000000",
|
|
light: "#FFFFFF",
|
|
},
|
|
});
|
|
|
|
return qrCodeDataURL;
|
|
} catch (error) {
|
|
console.error("Erreur lors de la génération du QR code:", error);
|
|
throw new Error("Impossible de générer le QR code");
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Générer un QR code en buffer PNG
|
|
* @param token Le token unique de la séquence
|
|
* @returns Un buffer PNG du QR code
|
|
*/
|
|
export async function generateQRCodeBuffer(token: string): Promise<Buffer> {
|
|
const baseUrl = getAppBaseUrl();
|
|
const url = `${baseUrl}/emargement/${token}`;
|
|
|
|
try {
|
|
const buffer = await QRCode.toBuffer(url, {
|
|
errorCorrectionLevel: "H",
|
|
type: "png",
|
|
width: 400,
|
|
margin: 2,
|
|
});
|
|
|
|
return buffer;
|
|
} catch (error) {
|
|
console.error("Erreur lors de la génération du QR code:", error);
|
|
throw new Error("Impossible de générer le QR code");
|
|
}
|
|
}
|