Update v1.2.0-beta - Dynamic context menu & permissions
All checks were successful
continuous-integration/drone/push Build is passing
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
This commit is contained in:
@@ -80,7 +80,11 @@ router.get('/shared/:ownerName/:folderName', authMiddleware, async (req, res) =>
|
||||
|
||||
const availableExtensions = Array.from(new Set(fileDetails.map(file => file.extension)));
|
||||
|
||||
// Determine if current user is owner
|
||||
const isOwner = folderInfo.activeUsers.length > 0 && folderInfo.activeUsers[0].id === userId;
|
||||
|
||||
res.render('folder', {
|
||||
user: req.userData,
|
||||
files: fileDetails,
|
||||
folders,
|
||||
allFolders,
|
||||
@@ -90,7 +94,10 @@ router.get('/shared/:ownerName/:folderName', authMiddleware, async (req, res) =>
|
||||
fileInfoNames,
|
||||
userName,
|
||||
isSharedFolder: true,
|
||||
ownerName
|
||||
ownerName,
|
||||
isCollaborativeFolder: true,
|
||||
isOwner,
|
||||
currentUserId: userId
|
||||
});
|
||||
|
||||
} catch (error) {
|
||||
@@ -196,10 +203,47 @@ router.get('/:folderName', authMiddleware, async (req, res) => {
|
||||
});
|
||||
|
||||
Promise.all(fileDetailsPromises)
|
||||
.then(fileDetails => {
|
||||
.then(async fileDetails => {
|
||||
const availableExtensions = Array.from(new Set(fileDetails.map(file => file.extension)));
|
||||
|
||||
res.render('folder', { files: fileDetails, folders, allFolders, extensions: availableExtensions, currentFolder: currentFolderName, folderName: folderName, fileInfoNames, userName });
|
||||
// Check if current folder is collaborative
|
||||
let isCollaborativeFolder = false;
|
||||
let isOwner = true; // By default, user is owner of their own folder
|
||||
let collaborators = [];
|
||||
|
||||
try {
|
||||
const collaborationFilePath = path.join(__dirname, '../../../data', 'collaboration.json');
|
||||
const collaborationData = JSON.parse(await fs.promises.readFile(collaborationFilePath, 'utf8'));
|
||||
const itemId = `folder-${folderName}`;
|
||||
const folderInfo = collaborationData.activeFiles[itemId];
|
||||
|
||||
if (folderInfo && folderInfo.isCollaborative && folderInfo.activeUsers) {
|
||||
isCollaborativeFolder = true;
|
||||
collaborators = folderInfo.activeUsers;
|
||||
// First user in activeUsers array is the owner
|
||||
if (collaborators.length > 0) {
|
||||
isOwner = collaborators[0].id === userRealId;
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
// If collaboration.json doesn't exist or can't be read, continue without collaboration info
|
||||
console.log('No collaboration data found:', error.message);
|
||||
}
|
||||
|
||||
res.render('folder', {
|
||||
user: user,
|
||||
files: fileDetails,
|
||||
folders,
|
||||
allFolders,
|
||||
extensions: availableExtensions,
|
||||
currentFolder: currentFolderName,
|
||||
folderName: folderName,
|
||||
fileInfoNames,
|
||||
userName,
|
||||
isCollaborativeFolder,
|
||||
isOwner,
|
||||
currentUserId: userRealId
|
||||
});
|
||||
})
|
||||
.catch(error => {
|
||||
console.error('Error processing file details:', error);
|
||||
|
||||
Reference in New Issue
Block a user