All checks were successful
continuous-integration/drone/push Build is passing
✨ New Features: - Dynamic permission-based context menus for files and folders - Support for collaborative folder access control - Upload to specific folders including shared folders - Changelog modal for version updates - Improved dark mode synchronization 🐛 Bug Fixes: - Fixed context menu displaying incorrect options - Fixed CSS !important override preventing dynamic menu behavior - Fixed folder collaboration permission checks - Fixed breadcrumb navigation with empty segments - Fixed "Premature close" error loop in attachments - Fixed missing user variable in admin routes - Fixed avatar loading COEP policy issues 🔒 Security: - Added security middleware (CSRF, rate limiting, input validation) - Fixed collaboration folder access validation - Improved shared folder permission handling 🎨 UI/UX Improvements: - Removed Actions column from folder view - Context menu now properly hides/shows based on permissions - Better visual feedback for collaborative folders - Improved upload flow with inline modals 🧹 Code Quality: - Added collaboration data to folder routes - Refactored context menu logic for better maintainability - Added debug logging for troubleshooting - Improved file upload handling with chunking support
37 lines
1.6 KiB
JavaScript
37 lines
1.6 KiB
JavaScript
const express = require('express');
|
|
const fs = require('fs');
|
|
const path = require('path');
|
|
const router = express.Router();
|
|
const authMiddleware = require('../../../Middlewares/authMiddleware');
|
|
const { ErrorLogger } = require('../../../config/logs');
|
|
|
|
// Quitter un dossier partagé
|
|
router.post('/leave', authMiddleware, async (req, res) => {
|
|
try {
|
|
const userId = req.userData.name;
|
|
const { folderName, folderOwner } = req.body;
|
|
if (!folderName || !folderOwner) {
|
|
return res.status(400).json({ error: 'Missing folderName or folderOwner' });
|
|
}
|
|
const collabPath = path.join(__dirname, '../../../data', 'collaboration.json');
|
|
let collabData = JSON.parse(fs.readFileSync(collabPath, 'utf8'));
|
|
const itemId = `folder-${folderName}`;
|
|
if (!collabData.activeFiles[itemId]) {
|
|
return res.status(404).json({ error: 'Shared folder not found' });
|
|
}
|
|
// Retirer l'utilisateur de la liste des collaborateurs
|
|
collabData.activeFiles[itemId].activeUsers = collabData.activeFiles[itemId].activeUsers.filter(u => u.id !== userId);
|
|
// Si plus aucun utilisateur, on peut supprimer la collaboration
|
|
if (collabData.activeFiles[itemId].activeUsers.length === 0) {
|
|
delete collabData.activeFiles[itemId];
|
|
}
|
|
fs.writeFileSync(collabPath, JSON.stringify(collabData, null, 2), 'utf8');
|
|
return res.json({ success: true });
|
|
} catch (error) {
|
|
ErrorLogger.error('Error leaving shared folder:', error);
|
|
return res.status(500).json({ error: 'Erreur lors du quit du dossier partagé.' });
|
|
}
|
|
});
|
|
|
|
module.exports = router;
|