UNPKG

safe-commander-mcp

Version:

A secure MCP server for executing whitelisted development commands with comprehensive security controls and resource limits

105 lines (104 loc) 5.33 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.validateStartupConfiguration = validateStartupConfiguration; const command_validator_1 = require("../commands/command-validator"); const path_validator_1 = require("../security/path-validator"); const sanitizer_1 = require("../security/sanitizer"); const command_categorizer_1 = require("../commands/command-categorizer"); const config_loader_1 = require("./config-loader"); const logger_1 = require("../utils/logger"); /** * Comprehensive startup validation * * @throws Error if any startup validation checks fail */ function validateStartupConfiguration() { try { (0, logger_1.log)("info", "Running startup validation checks..."); // Validate command categorization first const categoryValidation = (0, command_categorizer_1.validateCommandCategories)(config_loader_1.CONFIG.ALLOWED_COMMANDS); if (!categoryValidation.valid) { (0, logger_1.log)("warn", "Some commands are missing categorization or descriptions", { missingCategories: categoryValidation.missingCategories, missingDescriptions: categoryValidation.missingDescriptions, note: 'These commands will be placed in the "other" category', }); } else { (0, logger_1.log)("debug", "All commands have proper categorization and descriptions"); } // Test command validation logic with each allowed command for (const cmd of config_loader_1.CONFIG.ALLOWED_COMMANDS) { try { (0, command_validator_1.validateCommand)(cmd); (0, logger_1.log)("debug", `Command validation successful for: ${cmd}`); } catch (error) { const errorMessage = error instanceof Error ? error.message : "Unknown validation error"; throw new Error(`Startup validation failed for allowed command '${cmd}': ${errorMessage}`); } } // Test path validation logic with the allowed path try { (0, path_validator_1.validatePath)(".", config_loader_1.CONFIG.ALLOWED_PATH); (0, path_validator_1.validatePath)("./test", config_loader_1.CONFIG.ALLOWED_PATH); (0, logger_1.log)("debug", "Path validation logic working correctly"); } catch (error) { const errorMessage = error instanceof Error ? error.message : "Unknown path validation error"; throw new Error(`Path validation logic failed: ${errorMessage}`); } // Test sanitizeCommand function with safe commands try { for (const cmd of config_loader_1.CONFIG.ALLOWED_COMMANDS) { const sanitized = (0, sanitizer_1.sanitizeCommand)(cmd); if (sanitized !== cmd) { throw new Error(`Command '${cmd}' failed sanitization check`); } } (0, logger_1.log)("debug", "Command sanitization logic working correctly"); } catch (error) { const errorMessage = error instanceof Error ? error.message : "Unknown sanitization error"; throw new Error(`Command sanitization failed: ${errorMessage}`); } // Validate configuration values if (config_loader_1.CONFIG.MAX_COMMAND_LENGTH <= 0) { throw new Error("MAX_COMMAND_LENGTH must be greater than 0"); } if (config_loader_1.CONFIG.MAX_OUTPUT_SIZE <= 0) { throw new Error("MAX_OUTPUT_SIZE must be greater than 0"); } if (config_loader_1.CONFIG.COMMAND_TIMEOUT <= 0) { throw new Error("COMMAND_TIMEOUT must be greater than 0"); } if (config_loader_1.CONFIG.MAX_CONCURRENT_COMMANDS <= 0) { throw new Error("MAX_CONCURRENT_COMMANDS must be greater than 0"); } // Test that dangerous commands are properly rejected const dangerousCommands = ["rm -rf", "sudo rm", "chmod +x; /bin/sh", "cat /etc/passwd", "dangerous_cmd"]; for (const dangerousCmd of dangerousCommands) { try { (0, command_validator_1.validateCommand)(dangerousCmd); // If we get here, validation failed to catch a dangerous command throw new Error(`Validation failed to reject dangerous command: ${dangerousCmd}`); } catch (error) { // This is expected - dangerous commands should be rejected (0, logger_1.log)("debug", `Correctly rejected dangerous command: ${dangerousCmd}`); } } // Log validation summary (0, logger_1.log)("info", "All startup validation checks passed successfully", { totalCommands: config_loader_1.CONFIG.ALLOWED_COMMANDS.length, categorizedCommands: categoryValidation.known.length, uncategorizedCommands: categoryValidation.unknown.length, configurationValid: true, }); } catch (error) { const errorMessage = error instanceof Error ? error.message : "Unknown startup validation error"; (0, logger_1.log)("error", "Startup validation failed", { error: errorMessage }); throw new Error(`Startup validation failed: ${errorMessage}`); } }