carrot-scan
Version:
Command-line tool for detecting vulnerabilities in files and directories.
94 lines (77 loc) • 2.55 kB
JavaScript
import fs from 'fs/promises';
import path from 'path';
import chalk from 'chalk';
const PLUGINS_DIR = path.join(process.cwd(), 'packages/core/plugins');
const CONFIG_PATH = path.join(process.cwd(), 'carrot-scan.config.js');
async function readConfig() {
try {
const { default: config } = await import(CONFIG_PATH);
return config;
} catch (error) {
console.error(chalk.red(`Error reading config file: ${error.message}`));
return null;
}
}
async function writeConfig(config) {
try {
const content = `export default ${JSON.stringify(config, null, 2)};`;
await fs.writeFile(CONFIG_PATH, content);
} catch (error) {
console.error(chalk.red(`Error writing config file: ${error.message}`));
}
}
export async function listPlugins() {
try {
const files = await fs.readdir(PLUGINS_DIR);
const pluginFiles = files.filter(file => file.endsWith('.js') && file !== 'template.js');
const config = await readConfig();
if (!config || !config.plugins) {
return [];
}
if (pluginFiles.length === 0) {
return [];
}
return pluginFiles.map(file => {
const pluginName = file.replace('.js', '');
const enabled = config.plugins[pluginName]?.enabled || false;
return { name: pluginName, enabled };
});
} catch (error) {
console.error(chalk.red(`Error listing plugins: ${error.message}`));
return [];
}
}
export async function enablePlugin(pluginName) {
const config = await readConfig();
if (!config) return;
if (!config.plugins[pluginName]) {
return;
}
config.plugins[pluginName].enabled = true;
await writeConfig(config);
}
export async function disablePlugin(pluginName) {
const config = await readConfig();
if (!config) return;
if (!config.plugins[pluginName]) {
return;
}
config.plugins[pluginName].enabled = false;
await writeConfig(config);
}
export async function createPlugin(pluginName) {
const templatePath = path.join(PLUGINS_DIR, 'template.js');
const newPluginPath = path.join(PLUGINS_DIR, `${pluginName}.js`);
try {
await fs.copyFile(templatePath, newPluginPath);
console.log(chalk.green(`Plugin '${pluginName}.js' created successfully from template.`));
// Add new plugin to config as enabled by default
const config = await readConfig();
if (config) {
config.plugins[pluginName] = { enabled: true };
await writeConfig(config);
}
} catch (error) {
console.error(chalk.red(`Error creating plugin '${pluginName}': ${error.message}`));
}
}