This commit is contained in:
@@ -3,6 +3,7 @@ const fs = require('fs');
|
||||
const path = require('path');
|
||||
const multiparty = require('multiparty');
|
||||
const router = express.Router();
|
||||
const bcrypt = require('bcrypt');
|
||||
|
||||
// Limite de taille de fichier à 10 Go
|
||||
const MAX_FILE_SIZE = 10 * 1024 * 1024 * 1024; // 10 Go
|
||||
@@ -19,7 +20,7 @@ router.post('/', (req, res) => {
|
||||
maxFilesSize: MAX_FILE_SIZE,
|
||||
});
|
||||
|
||||
form.parse(req, (err, fields, files) => {
|
||||
form.parse(req, async (err, fields, files) => {
|
||||
if (err) {
|
||||
console.error('Error parsing the file:', err);
|
||||
return res.status(400).send('Error during the file upload');
|
||||
@@ -30,12 +31,20 @@ router.post('/', (req, res) => {
|
||||
}
|
||||
|
||||
const file = files.file[0];
|
||||
// Modifier le chemin pour être relatif à la racine
|
||||
const userDir = path.join(process.cwd(), 'cdn-files', req.user.name);
|
||||
|
||||
// Utiliser le nom sécurisé fourni par le client
|
||||
const filename = fields.filename ? fields.filename[0] : file.originalFilename;
|
||||
const filePath = path.join(userDir, filename);
|
||||
|
||||
// Récupérer les champs supplémentaires
|
||||
const expiryDate = fields.expiryDate ? fields.expiryDate[0] : '';
|
||||
const password = fields.password ? fields.password[0] : '';
|
||||
|
||||
// Hasher le mot de passe si présent
|
||||
const saltRounds = 10;
|
||||
let hashedPassword = '';
|
||||
if (password) {
|
||||
hashedPassword = await bcrypt.hash(password, saltRounds);
|
||||
}
|
||||
|
||||
// Crée le répertoire s'il n'existe pas
|
||||
if (!fs.existsSync(userDir)) {
|
||||
@@ -48,7 +57,7 @@ router.post('/', (req, res) => {
|
||||
|
||||
readStream.pipe(writeStream);
|
||||
|
||||
readStream.on('end', () => {
|
||||
readStream.on('end', async () => {
|
||||
// Supprimer le fichier temporaire
|
||||
fs.unlinkSync(file.path);
|
||||
|
||||
@@ -57,6 +66,35 @@ router.post('/', (req, res) => {
|
||||
if (!fileNamePattern.test(filename)) {
|
||||
console.warn('Le fichier uploadé ne suit pas le format de nom sécurisé attendu:', filename);
|
||||
}
|
||||
|
||||
// Mettre à jour file_info.json si password ou expiryDate présent
|
||||
if (expiryDate || password) {
|
||||
const fileInfo = {
|
||||
fileName: filename,
|
||||
expiryDate: expiryDate,
|
||||
password: hashedPassword,
|
||||
Id: req.user.id,
|
||||
path: filePath
|
||||
};
|
||||
|
||||
try {
|
||||
let data = [];
|
||||
const fileInfoPath = path.join(__dirname, '../../../data', 'file_info.json');
|
||||
|
||||
if (fs.existsSync(fileInfoPath)) {
|
||||
const existingData = await fs.promises.readFile(fileInfoPath, 'utf8');
|
||||
data = JSON.parse(existingData);
|
||||
if (!Array.isArray(data)) {
|
||||
data = [];
|
||||
}
|
||||
}
|
||||
|
||||
data.push(fileInfo);
|
||||
await fs.promises.writeFile(fileInfoPath, JSON.stringify(data, null, 2));
|
||||
} catch (error) {
|
||||
console.error('Error updating file_info.json:', error);
|
||||
}
|
||||
}
|
||||
|
||||
res.status(200).send({
|
||||
message: 'File uploaded successfully.',
|
||||
|
||||
Reference in New Issue
Block a user