mirror of
https://github.com/usebruno/bruno.git
synced 2026-06-27 06:34:06 +00:00
fix: invalid collection in workspace (#6612)
This commit is contained in:
@@ -27,17 +27,34 @@ const {
|
||||
getWorkspaceUid
|
||||
} = require('../utils/workspace-config');
|
||||
|
||||
const { isValidCollectionDirectory } = require('../utils/filesystem');
|
||||
|
||||
const DEFAULT_WORKSPACE_NAME = 'My Workspace';
|
||||
|
||||
const prepareWorkspaceConfigForClient = (workspaceConfig, isDefault) => {
|
||||
const prepareWorkspaceConfigForClient = (workspaceConfig, workspacePath, isDefault) => {
|
||||
const collections = workspaceConfig.collections || [];
|
||||
const filteredCollections = collections
|
||||
.map((collection) => {
|
||||
if (collection.path && !path.isAbsolute(collection.path)) {
|
||||
return { ...collection, path: path.resolve(workspacePath, collection.path) };
|
||||
}
|
||||
return collection;
|
||||
})
|
||||
.filter((collection) => collection.path && isValidCollectionDirectory(collection.path));
|
||||
|
||||
const config = {
|
||||
...workspaceConfig,
|
||||
collections: filteredCollections
|
||||
};
|
||||
|
||||
if (isDefault) {
|
||||
return {
|
||||
...workspaceConfig,
|
||||
...config,
|
||||
name: DEFAULT_WORKSPACE_NAME,
|
||||
type: 'default'
|
||||
};
|
||||
}
|
||||
return workspaceConfig;
|
||||
return config;
|
||||
};
|
||||
|
||||
const registerWorkspaceIpc = (mainWindow, workspaceWatcher) => {
|
||||
@@ -72,7 +89,7 @@ const registerWorkspaceIpc = (mainWindow, workspaceWatcher) => {
|
||||
|
||||
lastOpenedWorkspaces.add(dirPath);
|
||||
|
||||
const configForClient = prepareWorkspaceConfigForClient(workspaceConfig, isDefault);
|
||||
const configForClient = prepareWorkspaceConfigForClient(workspaceConfig, dirPath, isDefault);
|
||||
|
||||
mainWindow.webContents.send('main:workspace-opened', dirPath, workspaceUid, configForClient);
|
||||
|
||||
@@ -99,7 +116,7 @@ const registerWorkspaceIpc = (mainWindow, workspaceWatcher) => {
|
||||
|
||||
const workspaceUid = getWorkspaceUid(workspacePath);
|
||||
const isDefault = workspaceUid === 'default';
|
||||
const configForClient = prepareWorkspaceConfigForClient(workspaceConfig, isDefault);
|
||||
const configForClient = prepareWorkspaceConfigForClient(workspaceConfig, workspacePath, isDefault);
|
||||
|
||||
lastOpenedWorkspaces.add(workspacePath);
|
||||
|
||||
@@ -139,7 +156,7 @@ const registerWorkspaceIpc = (mainWindow, workspaceWatcher) => {
|
||||
|
||||
const workspaceUid = getWorkspaceUid(workspacePath);
|
||||
const isDefault = workspaceUid === 'default';
|
||||
const configForClient = prepareWorkspaceConfigForClient(workspaceConfig, isDefault);
|
||||
const configForClient = prepareWorkspaceConfigForClient(workspaceConfig, workspacePath, isDefault);
|
||||
|
||||
lastOpenedWorkspaces.add(workspacePath);
|
||||
|
||||
@@ -374,7 +391,7 @@ const registerWorkspaceIpc = (mainWindow, workspaceWatcher) => {
|
||||
|
||||
const workspaceUid = getWorkspaceUid(finalWorkspacePath);
|
||||
const isDefault = workspaceUid === 'default';
|
||||
const configForClient = prepareWorkspaceConfigForClient(finalConfig, isDefault);
|
||||
const configForClient = prepareWorkspaceConfigForClient(finalConfig, finalWorkspacePath, isDefault);
|
||||
|
||||
lastOpenedWorkspaces.add(finalWorkspacePath);
|
||||
|
||||
@@ -503,7 +520,7 @@ const registerWorkspaceIpc = (mainWindow, workspaceWatcher) => {
|
||||
const workspaceConfig = readWorkspaceConfig(workspacePath);
|
||||
const workspaceUid = getWorkspaceUid(workspacePath);
|
||||
const isDefault = workspaceUid === 'default';
|
||||
const configForClient = prepareWorkspaceConfigForClient(workspaceConfig, isDefault);
|
||||
const configForClient = prepareWorkspaceConfigForClient(workspaceConfig, workspacePath, isDefault);
|
||||
mainWindow.webContents.send('main:workspace-config-updated', workspacePath, workspaceUid, configForClient);
|
||||
|
||||
return updatedCollections;
|
||||
@@ -545,7 +562,7 @@ const registerWorkspaceIpc = (mainWindow, workspaceWatcher) => {
|
||||
|
||||
const correctWorkspaceUid = getWorkspaceUid(workspacePath);
|
||||
const isDefault = correctWorkspaceUid === 'default';
|
||||
const configForClient = prepareWorkspaceConfigForClient(result.updatedConfig, isDefault);
|
||||
const configForClient = prepareWorkspaceConfigForClient(result.updatedConfig, workspacePath, isDefault);
|
||||
mainWindow.webContents.send('main:workspace-config-updated', workspacePath, correctWorkspaceUid, configForClient);
|
||||
|
||||
return true;
|
||||
@@ -597,7 +614,7 @@ const registerWorkspaceIpc = (mainWindow, workspaceWatcher) => {
|
||||
|
||||
const { workspacePath, workspaceUid } = result;
|
||||
const workspaceConfig = readWorkspaceConfig(workspacePath);
|
||||
const configForClient = prepareWorkspaceConfigForClient(workspaceConfig, true);
|
||||
const configForClient = prepareWorkspaceConfigForClient(workspaceConfig, workspacePath, true);
|
||||
|
||||
return {
|
||||
workspaceConfig: configForClient,
|
||||
@@ -627,7 +644,7 @@ const registerWorkspaceIpc = (mainWindow, workspaceWatcher) => {
|
||||
const { workspacePath, workspaceUid } = defaultResult;
|
||||
defaultWorkspacePath = workspacePath;
|
||||
const workspaceConfig = readWorkspaceConfig(workspacePath);
|
||||
const configForClient = prepareWorkspaceConfigForClient(workspaceConfig, true);
|
||||
const configForClient = prepareWorkspaceConfigForClient(workspaceConfig, workspacePath, true);
|
||||
|
||||
win.webContents.send('main:workspace-opened', workspacePath, workspaceUid, configForClient);
|
||||
|
||||
@@ -652,7 +669,7 @@ const registerWorkspaceIpc = (mainWindow, workspaceWatcher) => {
|
||||
validateWorkspaceConfig(workspaceConfig);
|
||||
const workspaceUid = getWorkspaceUid(workspacePath);
|
||||
const isDefault = workspaceUid === 'default';
|
||||
const configForClient = prepareWorkspaceConfigForClient(workspaceConfig, isDefault);
|
||||
const configForClient = prepareWorkspaceConfigForClient(workspaceConfig, workspacePath, isDefault);
|
||||
|
||||
win.webContents.send('main:workspace-opened', workspacePath, workspaceUid, configForClient);
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@ const fs = require('fs');
|
||||
const path = require('path');
|
||||
const { app } = require('electron');
|
||||
const { generateUidBasedOnHash } = require('../utils/common');
|
||||
const { writeFile } = require('../utils/filesystem');
|
||||
const { writeFile, isValidCollectionDirectory } = require('../utils/filesystem');
|
||||
const { getPreferences, savePreferences } = require('./preferences');
|
||||
const { globalEnvironmentsStore } = require('./global-environments');
|
||||
const {
|
||||
@@ -178,6 +178,10 @@ class DefaultWorkspaceManager {
|
||||
}
|
||||
seenPaths.add(normalizedPath);
|
||||
|
||||
if (!isValidCollectionDirectory(absolutePath)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const collectionName = path.basename(absolutePath);
|
||||
|
||||
return {
|
||||
|
||||
@@ -38,6 +38,15 @@ const isDirectory = (dirPath) => {
|
||||
}
|
||||
};
|
||||
|
||||
const isValidCollectionDirectory = (dirPath) => {
|
||||
if (!isDirectory(dirPath)) {
|
||||
return false;
|
||||
}
|
||||
const brunoJsonPath = path.join(dirPath, 'bruno.json');
|
||||
const opencollectionYmlPath = path.join(dirPath, 'opencollection.yml');
|
||||
return fs.existsSync(brunoJsonPath) || fs.existsSync(opencollectionYmlPath);
|
||||
};
|
||||
|
||||
const hasSubDirectories = (dir) => {
|
||||
const files = fs.readdirSync(dir);
|
||||
return files.some((file) => fs.statSync(path.join(dir, file)).isDirectory());
|
||||
@@ -452,6 +461,7 @@ module.exports = {
|
||||
isSymbolicLink,
|
||||
isFile,
|
||||
isDirectory,
|
||||
isValidCollectionDirectory,
|
||||
normalizeAndResolvePath,
|
||||
isWSLPath,
|
||||
normalizeWSLPath,
|
||||
|
||||
@@ -3,7 +3,7 @@ const path = require('path');
|
||||
const os = require('os');
|
||||
const yaml = require('js-yaml');
|
||||
const crypto = require('node:crypto');
|
||||
const { writeFile, validateName } = require('./filesystem');
|
||||
const { writeFile, validateName, isValidCollectionDirectory } = require('./filesystem');
|
||||
const { generateUidBasedOnHash } = require('./common');
|
||||
const { withLock, getWorkspaceLockKey } = require('./workspace-lock');
|
||||
|
||||
@@ -420,6 +420,9 @@ const getWorkspaceCollections = (workspacePath) => {
|
||||
return false;
|
||||
}
|
||||
seenPaths.add(normalizedPath);
|
||||
if (!isValidCollectionDirectory(collection.path)) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
});
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user