- Création de la page /emargement-formateur/:token avec formulaire simplifié - Procédure backend presences.validerFormateur dédiée - Deux boutons QR code dans l'interface formateur (apprenants + formateur) - Génération automatique des URL distinctes pour chaque type d'utilisateur - Déploiement réussi sur le VPS de production
93 lines
2.6 KiB
TypeScript
93 lines
2.6 KiB
TypeScript
import QRCode from "qrcode";
|
|
import { randomBytes } from "crypto";
|
|
import { getParametres } from "./parametresDb";
|
|
|
|
/**
|
|
* 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 parametres = await getParametres();
|
|
const url = `${parametres.urlPublique}/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 formateur en base64 à partir d'un token
|
|
* @param token Le token unique de la séquence
|
|
* @returns Une image QR code en base64 (data URL) pour l'émargement formateur
|
|
*/
|
|
export async function generateQRCodeFormateurDataURL(token: string): Promise<string> {
|
|
// URL complète pour scanner le QR code formateur
|
|
const parametres = await getParametres();
|
|
const url = `${parametres.urlPublique}/emargement-formateur/${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 formateur:", error);
|
|
throw new Error("Impossible de générer le QR code formateur");
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 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 parametres = await getParametres();
|
|
const url = `${parametres.urlPublique}/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");
|
|
}
|
|
}
|