UNPKG

firewalla-mcp-server

Version:

Model Context Protocol (MCP) server for Firewalla MSP API - Provides real-time network monitoring, security analysis, and firewall management through 28 specialized tools compatible with any MCP client

122 lines 5.79 kB
/** * Bulk rule management tool handlers */ import { BaseToolHandler } from './base.js'; import { ParameterValidator, createErrorResponse, ErrorType, } from '../../validation/error-handler.js'; import { BulkOperationManager, validateBulkOperationArgs, } from '../../utils/bulk-operation-manager.js'; import { withToolTimeout } from '../../utils/timeout-manager.js'; /** * Bulk pause multiple firewall rules */ export class BulkPauseRulesHandler extends BaseToolHandler { constructor() { super({ enableGeoEnrichment: false, // No IP fields in bulk rule operations enableFieldNormalization: true, additionalMeta: { data_source: 'bulk_rules', entity_type: 'bulk_rule_pause', supports_geographic_enrichment: false, supports_field_normalization: true, standardization_version: '2.0.0', }, }); this.name = 'bulk_pause_rules'; this.description = 'Pause multiple firewall rules in a single operation. Requires array of rule IDs. Optional duration parameter (default 60 minutes).'; this.category = 'rule'; } async execute(args, firewalla) { // Validate bulk operation arguments const validation = validateBulkOperationArgs(args); if (!validation.isValid) { return createErrorResponse(this.name, 'Parameter validation failed', ErrorType.VALIDATION_ERROR, undefined, validation.errors); } const { ids, options } = validation.sanitizedArgs; const manager = BulkOperationManager.forRules(); // Validate the IDs array const bulkValidation = manager.validateBulkParams(ids); if (!bulkValidation.isValid) { return createErrorResponse(this.name, 'Bulk operation validation failed', ErrorType.VALIDATION_ERROR, undefined, bulkValidation.errors); } // Validate duration parameter if provided let duration = 60; // Default 60 minutes if (options?.duration !== undefined) { const durationValidation = ParameterValidator.validateNumber(options.duration, 'duration', { min: 1, max: 1440, integer: true }); if (!durationValidation.isValid) { return createErrorResponse(this.name, 'Duration validation failed', ErrorType.VALIDATION_ERROR, undefined, durationValidation.errors); } duration = durationValidation.sanitizedValue; } // Define the pause operation for individual rules const pauseOperation = async (ruleId) => { return withToolTimeout(async () => firewalla.pauseRule(ruleId, duration), `${this.name}_item`, 5000 // 5 second timeout per rule ); }; // Execute the bulk operation const startTime = Date.now(); const result = await manager.executeBulkOperation(bulkValidation.sanitizedIds, pauseOperation, firewalla, 'pause_rules'); const unifiedResponseData = { operation: this.name, pause_duration_minutes: duration, bulk_operation_result: result, timestamp: new Date().toISOString(), }; const executionTime = Date.now() - startTime; return this.createUnifiedResponse(unifiedResponseData, { executionTimeMs: executionTime, }); } } /** * Bulk resume multiple firewall rules */ export class BulkResumeRulesHandler extends BaseToolHandler { constructor() { super({ enableGeoEnrichment: false, // No IP fields in bulk rule operations enableFieldNormalization: true, additionalMeta: { data_source: 'bulk_rules', entity_type: 'bulk_rule_resume', supports_geographic_enrichment: false, supports_field_normalization: true, standardization_version: '2.0.0', }, }); this.name = 'bulk_resume_rules'; this.description = 'Resume multiple paused firewall rules in a single operation. Requires array of rule IDs. Re-enables previously paused rules.'; this.category = 'rule'; } async execute(args, firewalla) { // Validate bulk operation arguments const validation = validateBulkOperationArgs(args); if (!validation.isValid) { return createErrorResponse(this.name, 'Parameter validation failed', ErrorType.VALIDATION_ERROR, undefined, validation.errors); } const { ids } = validation.sanitizedArgs; const manager = BulkOperationManager.forRules(); // Validate the IDs array const bulkValidation = manager.validateBulkParams(ids); if (!bulkValidation.isValid) { return createErrorResponse(this.name, 'Bulk operation validation failed', ErrorType.VALIDATION_ERROR, undefined, bulkValidation.errors); } // Define the resume operation for individual rules const resumeOperation = async (ruleId) => { return withToolTimeout(async () => firewalla.resumeRule(ruleId), `${this.name}_item`, 5000 // 5 second timeout per rule ); }; // Execute the bulk operation const startTime = Date.now(); const result = await manager.executeBulkOperation(bulkValidation.sanitizedIds, resumeOperation, firewalla, 'resume_rules'); const unifiedResponseData = { operation: this.name, bulk_operation_result: result, timestamp: new Date().toISOString(), }; const executionTime = Date.now() - startTime; return this.createUnifiedResponse(unifiedResponseData, { executionTimeMs: executionTime, }); } } //# sourceMappingURL=bulk-rules.js.map