Update v1.1.0-beta.1
Some checks failed
continuous-integration/drone/push Build is failing

This commit is contained in:
2024-12-21 18:16:25 +01:00
parent f7658eca22
commit 51d11a6c36
20 changed files with 2688 additions and 935 deletions

View File

@@ -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.',