nikto-mcp
Version:
A secure MCP (Model Context Protocol) server that enables AI agents to interact with Nikto web server scanner
49 lines • 1.93 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.config = void 0;
exports.reloadConfig = reloadConfig;
const zod_1 = require("zod");
const fs_1 = require("fs");
const path_1 = require("path");
// Read version from package.json
const packageJsonPath = (0, path_1.join)(__dirname, '../../package.json');
const packageJson = JSON.parse((0, fs_1.readFileSync)(packageJsonPath, 'utf8'));
const configSchema = zod_1.z.object({
version: zod_1.z.string(),
niktoBinary: zod_1.z.string(),
niktoMode: zod_1.z.enum(['local', 'docker']),
dockerImage: zod_1.z.string(),
dockerNetworkMode: zod_1.z.string(),
maxConcurrentScans: zod_1.z.number().positive(),
defaultTimeout: zod_1.z.number().positive(),
logLevel: zod_1.z.enum(['debug', 'info', 'warn', 'error']),
port: zod_1.z.number().positive().optional(),
});
function loadConfig() {
return {
version: packageJson.version,
niktoBinary: process.env['NIKTO_BINARY'] ?? 'nikto',
niktoMode: process.env['NIKTO_MODE'] ?? 'local',
dockerImage: process.env['NIKTO_DOCKER_IMAGE'] ?? 'ghcr.io/sullo/nikto:latest',
dockerNetworkMode: process.env['NIKTO_DOCKER_NETWORK'] ?? 'host',
maxConcurrentScans: parseInt(process.env['MAX_CONCURRENT_SCANS'] ?? '3', 10),
defaultTimeout: parseInt(process.env['SCAN_TIMEOUT'] ?? '3600', 10),
logLevel: process.env['LOG_LEVEL'] ?? 'info',
port: process.env['MCP_PORT'] ? parseInt(process.env['MCP_PORT'], 10) : undefined,
};
}
exports.config = loadConfig();
// Function to reload configuration (useful for testing)
function reloadConfig() {
exports.config = loadConfig();
return exports.config;
}
// Validate configuration at startup
try {
configSchema.parse(exports.config);
}
catch (error) {
console.error('Invalid configuration:', error);
process.exit(1);
}
//# sourceMappingURL=index.js.map