Skip to main content
Glama
config.js5.03 kB
// config.js - Secure Configuration Management const path = require('path'); const os = require('os'); // Load environment variables require('dotenv').config(); const config = { // Server configuration server: { name: 'wiremcp-secure', version: '2.0.0', environment: process.env.NODE_ENV || 'production' }, // Security settings security: { // Maximum capture duration in seconds maxCaptureDuration: parseInt(process.env.MAX_CAPTURE_DURATION) || 60, // Minimum capture duration in seconds minCaptureDuration: parseInt(process.env.MIN_CAPTURE_DURATION) || 1, // Maximum file size for captures (100MB default) maxCaptureSize: parseInt(process.env.MAX_CAPTURE_SIZE) || 100 * 1024 * 1024, // Maximum output size for JSON responses (1MB default) maxOutputSize: parseInt(process.env.MAX_OUTPUT_SIZE) || 1024 * 1024, // Rate limiting rateLimit: { enabled: process.env.RATE_LIMIT_ENABLED !== 'false', maxRequests: parseInt(process.env.RATE_LIMIT_MAX) || 5, windowMs: parseInt(process.env.RATE_LIMIT_WINDOW_MS) || 60000 }, // Concurrent capture limit maxConcurrentCaptures: parseInt(process.env.MAX_CONCURRENT_CAPTURES) || 3, // Allowed PCAP directories (whitelist) allowedPcapDirs: process.env.ALLOWED_PCAP_DIRS ? process.env.ALLOWED_PCAP_DIRS.split(',').map(d => path.resolve(d.trim())) : [ path.resolve(process.env.HOME || os.homedir(), 'wiremcp', 'pcaps'), path.resolve(os.tmpdir(), 'wiremcp') ], // Temp directory for captures tempDir: process.env.TEMP_DIR || path.join(os.tmpdir(), 'wiremcp'), // Enable credential extraction feature (disabled by default for security) enableCredentialExtraction: process.env.ENABLE_CREDENTIAL_EXTRACTION === 'true', // Sanitize sensitive data from outputs sanitizeSensitiveData: process.env.SANITIZE_DATA !== 'false' }, // Network interface validation network: { // Only allow specific interfaces (empty = allow all available) allowedInterfaces: process.env.ALLOWED_INTERFACES ? process.env.ALLOWED_INTERFACES.split(',').map(i => i.trim()) : [], // Empty means allow all system interfaces // Default interface defaultInterface: process.env.DEFAULT_INTERFACE || 'en0' }, // Threat intelligence threatIntel: { enabled: process.env.THREAT_INTEL_ENABLED !== 'false', sources: { urlhaus: { enabled: true, url: 'https://urlhaus.abuse.ch/downloads/text/', timeout: 10000, maxSize: 10 * 1024 * 1024 // 10MB } }, // Cache threat data for this many seconds cacheTTL: parseInt(process.env.THREAT_CACHE_TTL) || 3600 }, // Audit logging audit: { enabled: process.env.AUDIT_ENABLED !== 'false', logFile: process.env.AUDIT_LOG_FILE || path.join(os.tmpdir(), 'wiremcp-audit.log'), logLevel: process.env.AUDIT_LOG_LEVEL || 'info' }, // tshark configuration tshark: { // Path to tshark (auto-detected if not set) path: process.env.TSHARK_PATH || null, // Execution timeout (capture duration + buffer) timeoutBuffer: 30, // seconds // Fallback paths for tshark fallbackPaths: process.platform === 'win32' ? [ 'C:\\Program Files\\Wireshark\\tshark.exe', 'C:\\Program Files (x86)\\Wireshark\\tshark.exe' ] : [ '/usr/bin/tshark', '/usr/local/bin/tshark', '/opt/homebrew/bin/tshark', '/Applications/Wireshark.app/Contents/MacOS/tshark' ] } }; // Validation function validateConfig() { const errors = []; if (config.security.maxCaptureDuration < config.security.minCaptureDuration) { errors.push('maxCaptureDuration must be >= minCaptureDuration'); } if (config.security.maxCaptureDuration > 3600) { errors.push('maxCaptureDuration cannot exceed 1 hour for safety'); } if (config.security.maxConcurrentCaptures < 1) { errors.push('maxConcurrentCaptures must be at least 1'); } if (config.security.rateLimit.maxRequests < 1) { errors.push('rateLimit.maxRequests must be at least 1'); } if (errors.length > 0) { throw new Error(`Configuration validation failed:\n${errors.join('\n')}`); } } // Initialize configuration function init() { try { validateConfig(); console.error('[CONFIG] Configuration loaded and validated successfully'); console.error(`[CONFIG] Environment: ${config.server.environment}`); console.error(`[CONFIG] Rate limiting: ${config.security.rateLimit.enabled ? 'enabled' : 'disabled'}`); console.error(`[CONFIG] Audit logging: ${config.audit.enabled ? 'enabled' : 'disabled'}`); console.error(`[CONFIG] Credential extraction: ${config.security.enableCredentialExtraction ? 'enabled' : 'disabled'}`); return config; } catch (error) { console.error(`[CONFIG] Error: ${error.message}`); process.exit(1); } } module.exports = init();

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/anishphilip012git/WireMCP-Secure'

If you have feedback or need assistance with the MCP directory API, please join our Discord server