///////////////////////////////////////////////// // LOGGING ///////////////////////////////////////////////// const logger = require("../../public/js/app/logger_lienventetemp"); ///////////////////////////////////////////////// // APPELS DES MODULES ///////////////////////////////////////////////// const moment = require('moment'); const ejs = require('ejs'); const nodemailer = require('nodemailer'); const path = require("path"); const fs = require("fs"); const mysql = require('mysql2'); const mysql_promise = require('mysql2/promise'); //////////////////////////////////////////////////// // FILE NAME //////////////////////////////////////////////////// const filename = path.parse(__filename).base; // Configuration de la connexion à la base de données const dbConfig = { host: process.env.db_connection_host, port: process.env.db_connection_port, user: process.env.db_connection_user, password: process.env.db_connection_password, database: process.env.db_connection_database }; // Stockage des fichiers avec une date d'expiration const fileLinks = {}; // DATE moment.locale('fr'); var date_formattee = moment().format('L') var today = date_formattee; const generate_link = async function(req, res) { try { // CONNEXION A LA BD const db_connection_promise = await mysql_promise.createConnection(dbConfig); const linkId = Date.now(); const filePath = path.join(__dirname, 'files', 'film_suzuki_unesco_2024.mp4'); // Chemin du fichier let expiresAt = new Date(Date.now() + 24 * 60 * 60 * 1000); // 24 heures à partir de maintenant // Format de la date pour MySQL expiresAt = expiresAt.toISOString().slice(0, 19).replace('T', ' '); // 'YYYY-MM-DD HH:MM:SS' const link = `${process.env.DOMAIN_EXTERNE}boutique/unesco/download/${linkId}`; //const linkId = Date.now(); // Un identifiant unique basé sur le timestamp //fileLinks[linkId] = { // filePath: filePath, // expiresAt: Date.now() + 24 * 60 * 60 * 1000 // 24 heures //}; sql = 'INSERT INTO TemporaryLinks (id, link, filePath, expiresAt) VALUES ('+ linkId +', "'+ link +'", "'+ filePath +'", "'+ expiresAt +'")'; console.log("sql : ", sql); const [results, fields] = await db_connection_promise.execute(sql); // L'ID généré par MySQL est accessible ici console.log("results.affectedRows : ", results.affectedRows); console.log("link : ", link); return link; } catch (error) { // Echec de connection à la BD logger.error("Il y a un problème avec la connection à la base de données! : " + error, { numsession: req.session.id }); await db_connection_promise.end(); return error; //return res.status(403).send('Il y a un problème avec la connection à la base de données!'); } } const download_file = async function(req, res) { const linkId = req.params.id; //const fileData = fileLinks[linkId]; console.log("linkId : ",linkId); try { // CONNEXION A LA BD const db_connection_promise = await mysql_promise.createConnection(dbConfig); const [rows] = await db_connection_promise.execute( 'SELECT filePath, expiresAt FROM TemporaryLinks WHERE id = ?', [linkId] ); console.log("rows.length : ",rows.length); if (rows.length > 0) { console.log("rows.expiresAt : ",rows[0].expiresAt); console.log("today : ",today); console.log("Date.now() : ",Date.now()); const expiresAt = new Date(rows[0].expiresAt); console.log("expiresAt : ",expiresAt); console.log("expiresAt.getTime() : ",expiresAt.getTime()); if (Date.now() < expiresAt.getTime()) { req.session.filePath = rows[0].filePath; req.session.expiresAt = rows[0].expiresAt; res.download(rows[0].filePath, (err) => { if (err) { res.status(404).send('File not found'); } }); } else { res.status(403).send('Link has expired'); } } else { res.status(403).send('Link does not exist'); } } catch (error) { // Echec de connection à la BD logger.error("Il y a un problème avec la connection à la base de données! : " + error, { numsession: req.session.id }); await db_connection_promise.end(); return error; } } ///////////////////////////////////////////////// // EXPORT DE MODULE POUR QU'IL SOIT LU DANS LES AUTRES FICHIERS JS ///////////////////////////////////////////////// module.exports = { generate_link, download_file }