///////////////////////////////////////////////// // ADHÉSION // [DOMAIN]/inscription ///////////////////////////////////////////////// ///////////////////////////////////////////////// // LOGGING ///////////////////////////////////////////////// const logger = require("../public/js/app/logger_lienventetemp"); ///////////////////////////////////////////////// // APPELS DES MODULES ///////////////////////////////////////////////// const express = require('express'); const router = express.Router(); // CALCUL DE DATE const moment = require('moment'); moment.locale('fr'); let now = moment().format("YYYY-MM-DD HH:mm:ss"); ///////////////////////////////////////////////// // APPELS DES FONCTIONS ///////////////////////////////////////////////// const { generate_link, download_file } = require("../controllers/vente_video/generate_linkController"); const { post_req_stripe, ventevideo_accompte_reussi, ventevideo_accompte_annule } = require("../controllers/vente_video/vente_videoController"); ///////////////////////////////////////////////// // ROUTES ///////////////////////////////////////////////// ///////////////////////////////////////////////// // VIDÉO UNESCO ///////////////////////////////////////////////// // ECRAN 1 : ACCUEIL DE LA VENTE DE LA VIDEO router.get('/videos', function(req, res) { logger.info("on est dans la page web /videos (ventevideoRouter.js)", { numsession: req.session.id }); // AFFICHER LES VARIABLES CONTENANT LES ERREURS if (req.session.affiche_err_1) { res.locals.affiche_err_1 = req.session.affiche_err_1; // on supprime le contenu après affichage req.session.affiche_err_1 = undefined; } res.render('ventevideo/page_templates/ventelien_boutonacheter'); }); // ECRAN 2 : PAIEMENT AVEC STRIPE router.post('/videos', post_req_stripe); // ECRAN 3 - RETOUR STRIPE router.get('/videos/paiement_reussi', ventevideo_accompte_reussi); router.get('/videos/paiement_annule', ventevideo_accompte_annule); ///////////////////////////////////////////////// // Générer le lien temporaire ///////////////////////////////////////////////// // ROUTE DE TEST router.get('/unesco/lien', async function(req, res) { logger.info("on est dans la route vente video lien (ventevideoRouter.js)", { numsession: req.session.id }); try { // APPEL DU CONTROLLER QUI GÉNÉRE LE LIEN const result = await generate_link(req, res); logger.info("on est dans la route vente video lien try", { numsession: req.session.id }); logger.info("result : " + result, { numsession: req.session.id }); // envoie de la réponse HTTP "200 : ok" avec les données res.status(200).json({ success: true, message: "Génération du lien réussi", data: result }); } catch (error) { logger.info("on est dans la route vente video lien catch", { numsession: req.session.id }); // envoie de la réponse HTTP "500 : erreur server" avec les données res.status(500).json({ success: false, message: "Génération du lien échec" }); } }); // ROUTE POUR LA BOUTIQUE VIDEOS router.get('/videos/whstripe', async function(req, res) { logger.info("on est dans la route vente video lien (ventevideoRouter.js)", { numsession: req.session.id }); try { // APPEL DU CONTROLLER QUI GÉNÉRE LE LIEN const result = await generate_link(req, res); logger.info("on est dans la route vente video lien try", { numsession: req.session.id }); logger.info("result : " + result, { numsession: req.session.id }); // envoie de la réponse HTTP "200 : ok" avec les données res.status(200).json({ success: true, message: "Génération du lien réussi", data: result }); } catch (error) { logger.info("on est dans la route vente video lien catch", { numsession: req.session.id }); // envoie de la réponse HTTP "500 : erreur server" avec les données res.status(500).json({ success: false, message: "Génération du lien échec" }); } }); ///////////////////////////////////////////////// // Endpoint pour télécharger le fichier depuis le lien généré ///////////////////////////////////////////////// // Route pour afficher le template avant téléchargement router.get('/unesco/download/:id', async function(req, res) { logger.info("on est dans la route vente video download affichage du lien (ventevideoRouter.js)", { numsession: req.session.id }); logger.info("lien de téléchargement appelé : " + req.originalUrl, { numsession: req.session.id }); try { // APPEL DU CONTROLLER QUI contrôle le lien et récupère le chemin du fichier const result = await download_file(req, res); logger.info("on est dans la route vente video download try", { numsession: req.session.id }); logger.info("result : " + result, { numsession: req.session.id }); // Vérification du résultat avant d'afficher la page if (result === "Lien expiré") { return res.status(403).render('ventevideo/page_templates/ventelien_telechargement_encours', { message: "Le lien de téléchargement a expiré.", downloadUrl: ``, message_color: "rouge" }); } else if (result === "Lien non trouvé") { return res.status(404).render('ventevideo/page_templates/ventelien_telechargement_encours', { message: "Le lien de téléchargement est introuvable.", downloadUrl: ``, message_color: "rouge" }); } else { // Rendu du template avec script pour télécharger automatiquement return res.render('ventevideo/page_templates/ventelien_telechargement_encours', { message: "Cliquez sur ce lien pour démarrer le téléchargement du film : ", downloadUrl: `/boutique/unesco/download_file/${req.params.id}`, // URL pour le téléchargement message_color: "" }); } } catch (error) { logger.error("Erreur dans la route de téléchargement", { error, numsession: req.session.id }); return res.status(500).render('ventevideo/page_templates/ventelien_telechargement_encours', { message: "Une erreur est survenue pendant le téléchargement.", downloadUrl: ``, message_color: "rouge" }); } }); router.get('/unesco/download_file/:id', async function(req, res) { logger.info("on est dans la route vente video download (ventevideoRouter.js)", { numsession: req.session.id }); logger.info("lien de téléchargement appelé : " + req.originalUrl, { numsession: req.session.id }); logger.info("req.session.originPath = " + req.session.originPath, { numsession: req.session.id }); logger.info("lien de téléchargement appelé : " + req.originalUrl, { numsession: req.session.id }); const expiresAtDate = new Date(req.session.expiresAt); try { console.log("expiresAtDate.getTime() = ", expiresAtDate.getTime()); if (Date.now() < expiresAtDate.getTime()) { return res.download(req.session.originPath, (err) => { if (err) { logger.error("Erreur de téléchargement / Fichier non trouvé.", { error: err }); return res.status(404).render('ventevideo/page_templates/ventelien_telechargement_encours', { message: "Fichier non trouvé.", downloadUrl: ``, message_color: "rouge" }); } }); } else { logger.error("Lien expiré"); return res.status(404).render('ventevideo/page_templates/ventelien_telechargement_encours', { message: "Lien expiré.", downloadUrl: ``, message_color: "rouge" }); } } catch (error) { logger.error("Erreur lors de la tentative de téléchargement", { error }); return res.status(500).render('ventevideo/page_templates/ventelien_telechargement_encours', { message: "Téléchargement en échec.", downloadUrl: ``, message_color: "rouge" }); } }); ///////////////////////////////////////////////// // EXPORT DE MODULE POUR QU'IL SOIT LU DANS LES AUTRES FICHIERS JS ///////////////////////////////////////////////// module.exports = router;